2012-04-02 5 views
6

मैं एक एल्गोरिदम खोज रहा हूं जो तारों का एक वेक्टर v1 ले जाएगा और तारों का एक समान वेक्टर v2 लौटाएगा जहां प्रत्येक स्ट्रिंग कम से कम है x वर्ण लंबे और अद्वितीय हैं। v1 में तार अद्वितीय नहीं हो सकते हैं।मैं स्ट्रिंग्स की सूची को विशिष्ट रूप से कैसे छोटा कर सकता हूं ताकि वे अधिकतम x वर्णों में लंबे समय तक

जबकि मुझे v1 में एएससीआईआईआई को स्वीकार करने की आवश्यकता है, तो मैं नए वर्णों को सम्मिलित करने के दौरान केवल अल्फान्यूमेरिक वर्ण ([A-Za-z0-9]) डालना पसंद करूंगा।

जाहिर है कि यहां तीन चेतावनियां हैं:

  1. v1 और x के कुछ मूल्यों के लिए, कोई संभव अद्वितीय v2 है। उदाहरण के लिए, जब v1 में 37 तत्व और x == 1 हैं।

  2. प्रश्न में निर्दिष्ट जैसा "समान" व्यक्तिपरक है। तार उपयोगकर्ता का सामना करेंगे, और संभवतः लघु प्राकृतिक भाषा वाक्यांश (उदाहरण के लिए "रंगों की संख्या")। मैं चाहता हूं कि एक इंसान जितनी जल्दी हो सके छोटी स्ट्रिंग में मूल को मैप करने में सक्षम हो। इसका मतलब है कि disemvoweling जैसे हेरिस्टिक का लाभ लेना। क्योंकि संभवत: मेरे समानता निर्माण का कोई उद्देश्य उपाय नहीं है (स्ट्रिंग दूरी शायद यहां सबसे उपयोगी नहीं होगी, हालांकि यह हो सकती है) अच्छा होने पर मेरा निर्णय मनमाना होगा। विधि अंग्रेजी के लिए उपयुक्त होनी चाहिए - अन्य भाषाएं अप्रासंगिक हैं।

जाहिर है यह एक (प्रोग्रामिंग) भाषा-नास्तिक समस्या है, लेकिन मैं अजगर में क्रियान्वयन की दिशा में अनुकूल लग रही है चाहते हैं (क्योंकि मैं अपने स्ट्रिंग प्रसंस्करण भाषा सीधी-सपाट लगता है)।

+1

क्या मतलब है 'मैं केवल अक्षर वर्ण ([ए-ज़ा-जे 0-9]) डालना पसंद करता हूं जब नए अक्षरों को सम्मिलित करना आवश्यक होता है।' – jamylak

+4

यह एक दिलचस्प समस्या की तरह लगता है, लेकिन मैं वास्तव में यह देखने के लिए संघर्ष कर रहा हूं कि आप क्या पूछ रहे हैं। क्या आपको लगता है कि आप इनपुट और वांछित आउटपुट का एक बहुत ही सरल उदाहरण प्रदान कर सकते हैं? –

+0

इसके अलावा, हम किस बारे में "शॉर्टिंग" की बात कर रहे हैं? रंगों की संख्या -> clrs के nmbr, या रंगों की संख्या -> एन ओ सी? –

उत्तर

-1
def split_len(seq, length): 
    return [seq[i:i+length] for i in range(0, len(seq), length)] 
newListOfString=[] 
for item in listOfStrings: 
    newListOfString.append(split_len(item,8)[0]) 

यह पहला आठ वर्ण देता है।

+2

मुझे पूरा यकीन है कि ओपी स्वयं इसे बहुत अधिक समझने में सक्षम था। इसके अलावा '[_ [: 8] _ सूची में _fStrings] 'वही करेगा। – Kimvais

1

पायथन में ऐसा करने के बारे में कुछ नोट/पॉइंटर्स।

  1. bisect module का उपयोग अपने परिणाम सरणी को आसानी से संभावित गैर-यूनिकों को आसानी से स्थानांतरित करने के लिए करें। यह उपयोगी है भले ही v1 पहले ही सॉर्ट किया गया हो (उदा। name और enemy डिसेंवॉलिंग के बाद टकरा जाएगा)
  2. स्ट्रिंग पर सरल कॉलिंग .translate(None, "aeiouyAEIOUY") द्वारा डिस्मोवॉलिंग हासिल की जा सकती है।
  3. डुप्लिकेट के मामले में आप सभी परिणामों को कम करके और "बिटमैस्क" के रूप में स्वैपकेस का उपयोग करके पहले टकराव को हल करने का प्रयास कर सकते हैं, यानी एए के कई अवसर ["aaa", "aaA", "aAa", "aAA"] आदि बन जाते हैं और यदि यह अंत से शुरू होने वाले "incrementing" वर्ण पर्याप्त नहीं है , जब तक एक गैर-टकराव पहचानकर्ता नहीं मिलता है, उदाहरण के लिए। ["aa"]*7 बन जाएगा ["aa", "aA", "Aa", "AA", "ab", "aB", "Ab"]
1

स्केच -

कार्यों है कि एक अंग्रेज़ी स्ट्रिंग के आकार को कम की एक सूची का विकास करना। कम से कम सबसे अस्पष्ट कार्यों को आदेश दें।

v1 में प्रत्येक स्ट्रिंग के लिए बार-बार एक अस्पष्ट कार्य लागू होता है जब तक कि यह स्ट्रिंग के आकार को कम नहीं कर सकता और फिर अगले फ़ंक्शन पर जा सकता है।

जब वांछित आकार x प्राप्त किया जाता है, तो v2 में तारों के संबंध में कम स्ट्रिंग अद्वितीय है सत्यापित करें। यदि ऐसा है, तो इसे v2 पर जोड़ें, यदि नहीं, तो अस्पष्ट कार्यों को लागू करना जारी रखें।

आकार घटाने वाले कार्यों के लिए कुछ विचार निम्नलिखित हैं जो कम से कम सबसे अस्पष्ट रूप से आदेश दिया गया है। (यादृच्छिक चयन कम स्ट्रिंग अद्वितीय जा रहा है की संभावना को बढ़ाने के उद्देश्य से कर रहे हैं।)

  1. एक भी अंतरिक्ष
  2. के साथ दो सफेद रिक्त स्थान वर्णों के एक यादृच्छिक घटना की जगह विराम चिह्न के एक यादृच्छिक घटना के साथ अंतरिक्ष के बाद बदलें एक एकल स्थान
  3. यादृच्छिक रूप से एक वर्ण शब्द को हटाएं जो कि एक हत्या सूची (उदाहरण के लिए "मैं", "ए")
  4. यादृच्छिक रूप से दो वर्ण शब्द निकालें जो कि हत्या का सदस्य भी है सूची (उदाहरण के लिए "ए", "का")
  5. आरए में तीन वर्ण शब्द निकालें एंड्रॉइड जो कि एक हत्या सूची का सदस्य भी है (उदाहरण के लिए "द", "और")
  6. पहले तीन और अंतिम चरित्र (उदाहरण के लिए "संख्या" बनकर शब्द "शब्द" के साथ पांच या अधिक वर्ण शब्द को बदलें। रंग "रंग बन जाते हैं")
  7. यादृच्छिक
  8. पर एक स्वर निकालें v1 में बड़ी संख्या में तारों में होने वाले शब्द को निकालें। विचार यह है कि बहुत आम शब्दों में कम मूल्य होता है।
  9. एक शब्द/वाक्यांश अनुवाद एक शब्दकोश (कोश) के आधार पर एक छोटी "घमंड लाइसेंस प्लेट" शब्द के लिए (जैसे http://www.baac.net/michael/plates/index.html के रूप में)

(नोट: पिछले दो कार्यों प्रारंभिक अनछुए स्ट्रिंग के लिए उपयोग की आवश्यकता होगी , और unaltered और बदले गए शब्दों के बीच पत्राचार।)

संबंधित मुद्दे

 संबंधित मुद्दे