क्या रिक्त स्थान के बिना मोर्स कोड विशिष्ट रूप से अस्वीकार्य है?


54

क्या सभी मोर्स कोड स्ट्रिंग विशिष्ट रूप से निर्णायक हैं? रिक्त स्थान के बिना,

......-...-..---.-----.-..-..-..

हो सकता है, Hello Worldलेकिन शायद पहला अक्षर एक है 5- वास्तव में यह बहुत ही संभावना नहीं है कि डॉट्स और डैश का एक अनियंत्रित अनुक्रम एक अनूठा अनुवाद होना चाहिए।

संभवतः क्राफ्ट असमानता का उपयोग कर सकता है लेकिन यह केवल उपसर्ग कोड पर लागू होता है ।

मोर्स कोड रिक्त स्थान के साथ है उपसर्ग कोड है, जिसमें संदेश हमेशा विशिष्ट डीकोड किया जा सकता। एक बार जब हम रिक्त स्थान हटा देते हैं तो यह अब सच नहीं है।


मामले में मैं सही हूं, और सभी मोर्स कोड संदेश विशिष्ट रूप से डीकोड नहीं किया जा सकता है, क्या सभी संभावित संदेशों को सूचीबद्ध करने का एक तरीका है? यहाँ कुछ संबंधित व्यायाम हैं जो मुझे कोडगॉल्फ पर मिले


7
आप पहले से ही अपने खुद के सवाल का जवाब दिया है लगता है?
राफेल

7
"रिक्त स्थान के बिना मोर्स कोड" मोर्स कोड नहीं है। स्पेस स्पेसिफिकेशन का हिस्सा हैं, क्योंकि उनके बिना कोड डिस्क्रिप्टिव नहीं है।
स्टीफन कैनेडी

1
@StephenKennedy यह पहले से ही सवाल में है। क्या आपने इसे पूरा पढ़ा?
राफेल

3
एक कोड के लिए संभावित संदेशों को सूचीबद्ध करने के लिए पर्ल स्क्रिप्ट । एहसास नहीं था कि यह एक विशुद्ध सैद्धांतिक समुदाय था। :)
squeezy

1
क्या आप वास्तव में सुनिश्चित हैं कि आपका स्वीकृत उत्तर किसी उत्तर के रूप में, या किसी भी चीज़ के संकेत के रूप में योग्य है? मेरा मतलब है कि यह स्पष्ट है कि ईटी = ए ... जो साबित करता है कि स्पीलबर्ग सही थे: ईटी एक विदेशी है।
बबौ

जवाबों:


91

निम्नलिखित दोनों प्रशंसनीय संदेश हैं, लेकिन इसका बिल्कुल अलग अर्थ है:

SOS HELP      = ...---...  .... . .-.. .--.        => ...---.........-...--.
I AM HIS DATE = ..  .- --  .... .. ...  -.. .- - . => ...---.........-...--.

6
प्यारा, लेकिन यह पहले से ही स्थापित किया गया है कि रिक्त स्थान के बिना मोर्स अस्पष्ट है इसलिए मुझे नहीं लगता कि यह एक टिप्पणी की तुलना में बहुत अधिक है।
डेविड रिचेर्बी

37
ओपी पूछ रहा है कि क्या रिक्त स्थान के बिना डॉट्स और डैश की एक श्रृंखला को टी और ई के मनमाने दृश्यों के विपरीत दो "वास्तविक" संदेशों के रूप में व्याख्या किया जा सकता है । पहला एसओएस! मदद! दो अनुमानों से बना है और दूसरा मैं उसकी तारीख एक व्याकरणिक और समझदार अंग्रेजी वाक्य है इसलिए दोनों वैध संदेश हैं। यह एक उदाहरण प्रदान करके प्रश्न का उत्तर सफलतापूर्वक देता है।
सीजे डेनिस

2
@CJDennis सवाल यह बिल्कुल नहीं कहता है। यह पूछता है कि क्या मोर्स के तार विशिष्ट रूप से निर्णायक हैं और यदि डॉट्स और डैश के लिए सभी स्ट्रिंग्स को सूचीबद्ध करने का एक तरीका है जो किसी दिए गए अनुक्रम में कोड करता है। यह अंग्रेजी में अर्थ रखने वाले तार के बारे में कुछ भी नहीं कहता है।
डेविड रिचेर्बी

2
समस्या का अध्ययन करने के लिए एक विशिष्ट (काउंटर) उदाहरण और सामान्य तरीका दोनों है और दोनों अच्छे उत्तर के लिए प्रासंगिक हैं। उदाहरण देखें lakatos द्वारा साक्ष्य / खंडन
vzn 19

3
"यह क्या कहता है, पताका?" I AM HIS DATE"तो अमेलिया ने पुराने नूनन के साथ संभोग करने का फैसला किया , हम्म। हमें शायद इसे अपने पास रखना चाहिए।"
dotancohen

36

टिप्पणियों से डेविड रिचर्जी का हवाला देते हुए:

चूंकि message E का प्रतिनिधित्व करता है और T का प्रतिनिधित्व करता है, रिक्त स्थान के बिना किसी भी मोर्स संदेश को में एक स्ट्रिंग के रूप में व्याख्या किया जा सकता है{E,T}

इसके अलावा, चूंकि ए, आई, एम और एन दो मोर्स पात्रों के चार संभावित संयोजनों (,-, ⋅, -, -⋅⋅, क्रमशः) द्वारा दर्शाए गए हैं, बिना रिक्त स्थान के किसी भी संदेश को स्ट्रिंग के रूप में भी व्याख्या किया जा सकता है। । ध्यान दें कि लंबाई> 1 के किसी भी मोर्स संदेश के लिए, यह डेविड की व्याख्या से अलग है। इस प्रकार, अद्वितीय व्याख्या वाले एकमात्र संदेश लंबाई 1 के हैं (और, मुझे लगता है, 0, यदि वह एक संदेश के रूप में गिना जाता है) - अर्थात्, ⋅, ई का प्रतिनिधित्व करता है, और -, टी का प्रतिनिधित्व करता है।{A,I,M,N}{E,T}?

यहाँ कुछ जावास्क्रिप्ट है जो आपको .और स्ट्रिंग की सभी संभावित व्याख्याएँ बताएगा -। 22 सेकंड तक की लंबाई एक सेकंड के भीतर चलती है, लेकिन इससे अधिक कुछ भी धीमी गति से शुरू होता है - मैं उदाहरण के लिए, इसके साथ हेलो वर्ल्ड को डिकोड करने की कोशिश नहीं करूंगा। आप अपने ब्राउज़र में एक JavaScript कंसोल खोलकर पॉप कर सकते हैं, इस में पेस्ट, और फिर उदाहरण के लिए, कहते हैं, decode('......-...-..---')। (इस उदाहरण में, प्रविष्टि # 2446 इच्छित स्ट्रिंग "HELLO" है।)

var decode = function(code) {
  var cache = {
    '0': ['']
  };
  for(var start = 0;start < code.length;start++) {
    for(var len = 1;len < 6;len++) {
      if(start + len > code.length) continue;
      if(!cache[start + len]) cache[start + len] = [];
      var curCode = code.slice(start, start + len);
      if(dict[curCode]) {
        for(var i_start = 0;i_start < cache[start].length;i_start++) {
          cache[start + len].push(cache[start][i_start] + dict[curCode]);
        }
      }
    }
  }
  return cache[code.length];
};

var dict = {
  '.-': 'A',
  '-...': 'B',
  '-.-.': 'C',
  '-..': 'D',
  '.': 'E',
  '..-.': 'F',
  '--.': 'G',
  '....': 'H',
  '..': 'I',
  '.---': 'J',
  '-.-': 'K',
  '.-..': 'L',
  '--': 'M',
  '-.': 'N',
  '---': 'O',
  '.--.': 'P',
  '--.-': 'Q',
  '.-.': 'R',
  '...': 'S',
  '-': 'T',
  '..-': 'U',
  '...-': 'V',
  '.--': 'W',
  '-..-': 'X',
  '-.--': 'Y',
  '--..': 'Z',
  '.----': '1',
  '..---': '2',
  '...--': '3',
  '....-': '4',
  '.....': '5',
  '-....': '6',
  '--...': '7',
  '---..': '8',
  '----.': '9',
  '-----': '0'
};

वास्तविक शब्दों के केवल तार के लिए इसे कम करने के लिए कोड थोड़ा लंबा है, इसलिए मैंने इसे यहां रखा है । यह नोड.जेएस के तहत चलता है और एक फ़ाइल की अपेक्षा करता है /usr/share/dict/words-2500। मैं जिस शब्दकोश का उपयोग कर रहा हूं वह यहां पाया जा सकता है । यह भोला नहीं है - यह जैसे-जैसे आगे बढ़ता जाता है, वैसे-वैसे यह बड़े इनपुट्स पर ज्यादा तेज चलता है।

शब्दकोश में एक शीर्ष -2500 शब्दों की सूची होती है, जो मैंने इंटरनेट पर कहीं, शून्य से 1-1, 2- और 3- पत्र के संयोजन में पाया, जिसे मैंने शब्दों को समझा। यह एल्गोरिथ्म चुनने के लिए बहुत से छोटे शब्दों को रखने के लिए संवेदनशील है, और यदि आप अनुमति देते हैं, तो, प्रत्येक व्यक्तिगत पत्र को एक शब्द के रूप में (मैं आपको देख रहा हूं /usr/share/dict/words) धीमा कर देता हूं ।

एल्गोरिथ्म शब्दों की संख्या के आधार पर छंटनी करके समाप्त होता है, इसलिए "दिलचस्प" वाले उम्मीद से शीर्ष पर होंगे। यह HELLO WORLDएक दूसरे के नीचे चल रहा है और पहली हिट के रूप में अपेक्षित वाक्यांश को वापस करने पर बहुत अच्छा काम करता है । इससे मुझे यह भी पता चला कि DATA SCIENTIST(केवल अन्य वाक्यांश मैंने कोशिश की) मोर्स कोड के समान ही है NEW REAL INDIA

संपादित करें: मैंने कुछ मिनटों के लिए और अधिक रोचक खोज की। शब्द SPACESऔर SWITCHmorsagrams हैं। अब तक वे सबसे लंबी एकल-शब्द जोड़ी हैं जो मैंने पाया है।


3
क्या आपने अभी मोर्सग्राम शब्द का आविष्कार किया है ? मुझे यह बहुत पसंद है, लेकिन एक वेब-खोज ने इस साइट पर एक ही लिंक प्रदान किया है ।
बमुगुएस्ट

मैंने इस दिलचस्प सवाल को Puzzling पर एक खुली चुनौती में बदलने की स्वतंत्रता भी ले ली है। कुछ संदर्भ यहाँ इस पोस्टिंग के साथ।
BmyGuest

@BmyGuest हाँ, यह पूरी तरह से बना हुआ शब्द है। मुझे यह पसंद है, यद्यपि।
हारून डफ़र

17

यह मानना ​​पर्याप्त है कि अक्षरों के कुछ छोटे संयोजन अस्पष्ट डिकोडिंग देते हैं। एक एकल अस्पष्ट अनुक्रम पर्याप्त है, लेकिन मैं निम्नलिखित देख सकता हूं:

ATE ~ P
EA ~ IT
MO ~ OM

आदि के रूप में डेविड रिचेर्बी टिप्पणियों में नोट करते हैं, कोई भी पत्र Es और Ts के स्ट्रिंग के बराबर है, जो अक्षरों के मनमाने अनुक्रमों को एन्कोडिंग के रूप में मोर्स कोड को अस्पष्ट बनाता है; उपरोक्त संयोजनों से पता चलता है कि यह अंग्रेजी में प्रशंसनीय अक्षर संयोजनों के लिए भी सही है (उदाहरण के लिए, MEAT~ MITT)। शायद एक दिलचस्प कोडिंग अभ्यास पाँच या उससे कम अक्षरों के सभी तारों को खोजने के लिए होगा जो किसी अन्य चीज़ के लिए गलत हो सकते हैं, अक्षर संयोजनों तक सीमित है जो वास्तव में अंग्रेजी पाठ में पाया जा सकता है (एक या अधिक शब्दों का उपयोग करके), समतुल्य वर्ग द्वारा समूहीकृत।

अपने मूल उदाहरण का उपयोग करना, ऐसा ही होता है

HELLO WORLD ~ HAS TEAM NO MAID TOE

और जबकि दाएं हाथ वाला पक्ष शायद आंशिक संदेश के रूप में भी अवास्तविक है, यह निश्चित रूप से अंग्रेजी शब्दों का एक क्रम है, और एक जो कंप्यूटर सहायता के बिना 15 मिनट से भी कम समय में पाया जा सकता है। इस बात को प्रमाण के रूप में लिया जा सकता है कि अंग्रेजी के कई वाक्यांशों को अंग्रेजी शब्दों के एक अलग (संभवतः निरर्थक) अनुक्रम के रूप में गलत समझा जा सकता है।


एमटी बनाम टीएम इसका बहुत छोटा उदाहरण है।
राफेल

2
@ राफेल एमटी == टीएम == ओ तीनों एक ही अनुक्रम हैं। जिससे अनुवाद करना बहुत मुश्किल हो जाता है।
Red_Shadow

10

मोर्स कोड वास्तव में एक टर्नरी कोड है, न कि बाइनरी कोड, इसलिए रिक्त स्थान आवश्यक हैं। यदि स्थान नहीं थे, तो बहुत अधिक अस्पष्टता का परिणाम होगा, पूरे संदेश के साथ नहीं, बल्कि व्यक्तिगत पत्रों के साथ।

उदाहरण के लिए, 2 डॉट्स एक I है, लेकिन 3 डॉट्स एक एस है। यदि आप ट्रांसक्रिप्ट कर रहे हैं और आप दो डॉट्स सुनते हैं, तो क्या आप तुरंत "I" लिखते हैं या क्या आप तब तक प्रतीक्षा करते हैं जब तक आप एक और डॉट (या डैश) नहीं सुनते?

इसका उत्तर यह है कि प्रत्येक मान को अलग किया जाता है ताकि वे एक साथ समूहीकृत हों। जब ऑपरेटर मोर्स में महत्वपूर्ण संदेश देते हैं, तो वे अनुक्रम के अंत को इंगित करने के लिए प्रत्येक अक्षर कोड अनुक्रम के बाद डैश के समान लंबाई का एक ठहराव बनाते हैं।

यहां तक ​​कि अगर आप एक समय में एक पूर्ण वाक्य को देखने के लिए एआई प्रोग्राम लिखते हैं और यह पता लगाते हैं कि संदेश की तार्किक व्याख्या क्या थी, तब भी कई मामूली अस्पष्टताएं और गलतियां होंगी


2
लगता है आपका अंतिम वाक्य छोटा कर दिया गया है।
डेविड रिचेर्बी

2
@DavidRicherby हाँ, ऐसा इसलिए है क्योंकि मैंने बिना किसी रिक्त स्थान के मोर्स कोड का उपयोग करके पोस्ट बनाने की कोशिश की।
टायलर डरडेन

4

कुछ नोट्स अन्य (अच्छे) उत्तरों में शामिल नहीं हैं, लेकिन जो आमतौर पर पूर्व ज्ञान पर शोध नहीं करते हैं और किसी भी सामान का हवाला देते हैं (मेरे लिए कंप्यूटर विज्ञान का एक आंतरिक हिस्सा है )।

  • CS का यह सामान्य सिद्धांत पाठ विभाजन की श्रेणी में आता है और "शब्द विभाजन" / "असंतोष" भी है, हालांकि सिद्धांत थोड़ा अलग है, शब्दों में प्रतीकों के विभाजन के अनुक्रम के बारे में है (चर अक्षरों के साथ), आदि, जहां प्रतीक इकाइयाँ हैं। यहाँ स्ट्रिंग्स को अक्षरों में विभाजित किया गया है जहाँ अक्षरों की चर लंबाई होती है, लेकिन सिद्धांत अनुरूप है, हालांकि 1-1 बिल्कुल नहीं। यानी वाक्य-में-शब्द, चर-शब्द-अक्षर-लंबाई और वाक्य-में-शब्द, चर-शब्द / अक्षर-लंबाई के बीच मानचित्रण।

  • जैसा कि अन्य ने बताया है कि इसका अनुभवजन्य रूप से अध्ययन किया जा सकता है। और किसी ने किया कि एक कोण से (इस का अध्ययन करने के कई तरीके हैं) और वेब पेज पर परिणामों को एक बड़ी निर्देशिका / तालिका के परिणामों के साथ "प्रकाशित" किया ।

    मुझे 25,787 अस्पष्ट मोर्स कोड शब्द मिले। यह 10,330 अलग मोर्स स्ट्रिंग्स से बना है। उच्चतम आवृत्ति अस्पष्ट मोर्स शब्द में 13 संभावित दाता शब्द हैं। परिणाम शब्दों की आवृत्ति के आधार पर तालिका में नीचे दिए गए हैं जो समान मोर्स प्रतिनिधित्व को साझा करते हैं।

  • वाह, "संदर्भ मायने रखता है" ... एक लगभग समान प्रश्न " 3yrs से stackoverflow पर रिक्त स्थान के बिना मोर्स कोड का अनुवाद" वर्तमान में 0 वोट है।


2

सामान्य तौर पर, कई संभावित डिकोडिंग हैं, लेकिन अगर आप वास्तव में चाहते हैं तो आप उन सभी को सूचीबद्ध कर सकते हैं। आप उन्हें एक रसीले तरीके से सूचीबद्ध कर सकते हैं, अर्थात्, उन सभी के लिए एक संक्षिप्त प्रतिनिधित्व दें। चूंकि यह एक प्रोग्रामिंग अभ्यास से ज्यादा कुछ नहीं है, इसलिए मैं आपको इसे स्वयं करने की चुनौती देता हूं।

उस ने कहा, तथ्य यह है कि अस्पष्टता संदेश को समझने की क्षमता या संदेश के कम से कम बड़े हिस्से को नहीं रोकती है। मोर्स कोड द्वारा प्रस्तुत पाठ के लिए एक संभाव्य मॉडल को मानते हुए - निश्चितता के लिए, हम यह मान सकते हैं कि यह अंग्रेजी है और अंग्रेजी के सांख्यिकीय गुणों का उपयोग करता है - यह अनिवार्य रूप से संदेश को डिकोड करना संभव हो सकता है, हालांकि कुछ स्थानीय अस्पष्टताएं अपरिहार्य हो सकती हैं। कारण यह है कि अधिकांश डिकोडिंग गैर-समझदारी के संदर्भ में हैं। इसका तरीका यह है कि प्रत्येक डिकोडिंग की संभावना का अनुमान लगाने के लिए पिछले पैराग्राफ से डायनेमिक प्रोग्रामिंग एल्गोरिदम का विस्तार किया जाए, और फिर अधिकतम संभावना डीकोडिंग का चयन करें। इस दृष्टिकोण के सफल होने की अधिक संभावना है क्योंकि संदेश लंबा हो जाता है।


क्या Viterbi एल्गोरिथ्म आपके द्वारा वर्णित के समान कुछ नहीं करता है? डिकोडिंग की संख्या की घातीय वृद्धि को मापना, क्या यहां के लिए एक उचित प्रश्न है, या cstheory.SE?
जॉन मेंगुल

1
यह सही है, विचार गतिशील प्रोग्रामिंग का उपयोग करना है। घातीय वृद्धि का अनुमान लगाना शायद यहां के कषायों से बेहतर है।
युवल फिल्मस

वास्तव में, यह भाषण प्रसंस्करण में शब्दों की पहचान करने के लिए किया जाता है। इसका परिणाम यह है कि एक शब्द जाली कहा जाता है, यह सभी शब्द अनुक्रमों का एक संघनित प्रतिनिधित्व है जो विश्लेषण किए गए ध्वनि अनुक्रम से मेल खा सकता है।
बबौ

1

सभी संभावित डिकोडिंग की भाषा को कैसे परिभाषित / पहचानें / उत्पन्न करें।

स्पष्ट रूप से, रिक्त स्थान के बिना, मोर्स कोड अब विशिष्ट रूप से समझने योग्य नहीं है।

हालाँकि इसे डीकोड करने के लिए सभी संभव तरीकों से एक गाढ़ा रूप देना संभव है। यह वास्तव में भाषण प्रसंस्करण में क्या किया जाता है: ध्वनियों की एक अनूठी धारा (या फोनोम्स) से, आपको उन सभी तरीकों को खोजना होगा जो शब्दों के अनुक्रम में विघटित हो सकते हैं। ऐसा करने के लिए एल्गोरिदम एक शब्द जाली कहलाता है। आपको इस उत्तर के "लेक्सिकल अस्पष्टता" अनुभाग में एक उदाहरण मिलेगा ।

बाइनरी मोर्स कोड (कोई स्थान नहीं) के मामले में, आपके पास केवल डॉट्स और डैश हैं, लेकिन समस्या समान है।

जिस तरह से आप सभी अनुवाद प्राप्त कर सकते हैं वह इस प्रकार है।

T

तो फिर आप अपने मोर्स अनुक्रम ले के एनwnWn+10nL={w}=L(W)T(L)T(L)

TWTW

विवरण आसानी से काम कर रहे हैं। लेकिन पूछें कि क्या आपको और अधिक की आवश्यकता है।


0

एक सॉल्वर के लिए कुछ छद्म कोड जो सभी संभव व्याख्याएं देंगे। यह कुछ त्वरित विचारों पर आधारित है, इसलिए अतिरिक्त इनपुट का स्वागत किया जाएगा। विधि पाठ के दो इनपुटों में से एक को अब तक अनुवादित, और मोर्स कोड के दूसरे को स्वीकार करती है।

MorseSolver (string textSoFar, string codeRemaining)
{
    if(codeRemaining length == 0) output textSoFar
    else
    {
        codeLength = length of code remaining
        read 1 through (min of 5 or codeLength) characters from codeRemaining
        for each set of characters
        {
            call an IsMorseCode method that checks if the characters 
              input are valid morse code
            if they are valid add the translated character to textSoFar 
              and remove the characters from codeRemaining, then call 
              the MorseSolver again with the new strings)
        }

}

यह "शब्दों" के बीच किसी भी स्थान के बिना अक्षरों और संख्याओं के सभी संभावित संयोजनों का उत्पादन करेगा। यदि आप अस्पष्टता साबित करना चाहते हैं, तो यह निश्चित रूप से ऐसा करेगा। यदि आप कुछ सार्थक संदेश निकालना चाहते हैं, तो हैशटैग को पठनीय भाषा में अनुवाद करने के लिए कोड की तलाश करें।

उपरोक्त का उपयोग करते हुए, मैंने C # में एक प्रोग्राम लिखा जो उपरोक्त करता है। मैंने इसे उपरोक्त स्ट्रिंग के लिए 22 मिलियन संभावनाओं पर चलने से रोक दिया, जो कि हैलो वर्ल्ड में अनुवाद कर सकता है। "हैलो" के बराबर मोर्स कोड के परिणामस्वरूप 20,569 संभावित परिणाम प्राप्त हुए। मैंने भी संख्याओं को शामिल नहीं किया। अगर मैंने उन्हें अनुमति दी तो यह अधिक होगा।


इस तरह के एक एल्गोरिथ्म का आउटपुट एक सबूत होगा कि कोई भी व्यक्तिगत स्ट्रिंग अस्पष्ट है, लेकिन यह साबित नहीं होगा कि सभी तार अस्पष्ट हैं।
डेविड रिचेर्बी

@DavidRicherby लंबाई के सभी तार> 1 अस्पष्ट हैं। जो इस पृष्ठ पर अन्यत्र सिद्ध किया गया है। मैं प्रश्न के दूसरे भाग का उत्तर देने का प्रयास कर रहा था, और एक स्ट्रिंग से सभी संभव समाधानों को निकालने के लिए एक साधन प्रदान कर रहा था।
Red_Shadow

जिज्ञासा से बाहर, क्या आप अपना सी # कार्यक्रम साझा करेंगे? मेरा पर्ल संस्करण "हेलो" समकक्ष के लिए 19796 संभावित समाधानों के साथ आता है। अधिकांश शायद मैं कुछ मामलों हालांकि ... उत्पादन करना भूल गया
squeezy

1
वास्तविक स्रोत कोड यहां ऑफटॉपिक है; कृपया इसे कहीं और प्रकाशित करें (pastebin, Gist, ...) और केवल इससे लिंक करें।
राफेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.