Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में DFA का उपयोग करके जांचें कि बाइनरी स्ट्रिंग 3 का गुणक है या नहीं


मान लीजिए हमारे पास एक सरणी n है जो किसी संख्या के बाइनरी प्रतिनिधित्व को दर्शाती है। हमें डिटरमिनिस्टिक फाइनाइट ऑटोमेटा (DFA) का उपयोग करके जांचना है कि इसका बाइनरी प्रतिनिधित्व 3 से विभाज्य है या नहीं।

उदाहरण के लिए, यदि n = [1, 1, 0, 0] (12 का बाइनरी) है, तो आउटपुट True होगा।

हल करने का तरीका

हम DFA इस तरह बना सकते हैं: जब कोई संख्या 3 से विभाज्य होती है तो शेषफल 0 होगा, यदि नहीं तो शेषफल 1 या 2 होगा। इन तीन शेषफलों के लिए तीन अवस्थाएं हैं। प्रारंभिक अवस्था अंतिम अवस्था भी है क्योंकि जब शेषफल 0 होता है तो इसका मतलब संख्या विभाज्य है।

  1. dfa_state := 0
  2. प्रत्येक बिट के लिए:
    • यदि dfa_state 0 है और बिट 1 है, तो dfa_state := 1
    • यदि dfa_state 1 है और बिट 0 है, तो dfa_state := 2; यदि बिट 1 है तो dfa_state := 0
    • यदि dfa_state 2 है और बिट 0 है, तो dfa_state := 1
  3. यदि dfa_state 0 है तो True लौटाएं, अन्यथा False

उदाहरण

def solve(nums):
    dfa_state = 0
    for i in range(len(nums)):
        digit = nums[i]
        if dfa_state == 0:
            if digit == 1:
                dfa_state = 1
        elif dfa_state == 1:
            if digit == 0:
                dfa_state = 2
            else:
                dfa_state = 0
        elif dfa_state == 2:
            if digit == 0:
                dfa_state = 1
        if dfa_state == 0:
            return True
    return False

n = [1, 1, 0, 0]
print(solve(n))

इनपुट

[1, 1, 0, 0]

आउटपुट

True
  1. पायथन का उपयोग करके एकाधिक फ़ाइलों का नाम बदलना पायथन का उपयोग करके एकाधिक फ़ाइलों का नाम बदलना

    rename() मेथड का उपयोग पायथन 3 में किसी फ़ाइल या निर्देशिका का नाम बदलने के लिए किया जाता है। rename() मेथड os मॉड्यूल का एक हिस्सा है। os.rename() के लिए सिंटैक्स os.rename(src, dst) पहला तर्क src है जो नाम बदलने वाली फ़ाइल का स्रोत पता है और दूसरा तर्क dst नए नाम के साथ गंतव्य है। आइए किसी भी निर

  1. - पायथन में स्ट्रिंग को बाइनरी में कैसे बदलें?

    स्ट्रिंग को बाइनरी में बदलने के लिए, आपको प्रत्येक कैरेक्टर पर पुनरावृति करके उसे बाइनरी में बदलना होगा। फिर इन कैरेक्टर्स को एक सिंगल स्ट्रिंग में जोड़ दें। आप format(ord(x), b) का उपयोग करके कैरेक्टर x को बाइनरी के रूप में फॉर्मेट कर सकते हैं। उदाहरण के लिए: >>> st = hello world >>&

  1. - पायथन में कैसे जांचें कि स्ट्रिंग में केवल कुछ विशिष्ट कैरेक्टर्स हैं?

    आप सेट्स का उपयोग करके इस परिणाम को प्राप्त कर सकते हैं कि स्ट्रिंग में केवल कुछ विशिष्ट कैरेक्टर्स हैं। उन कैरेक्टर्स का उपयोग करके एक सेट घोषित करें जिन्हें आप अनुमति देना चाहते हैं। उदाहरण के लिए यदि हम जांचना चाहते हैं कि स्ट्रिंग में केवल 1, 2, 3 और 4 हैं, तो हम उपयोग कर सकते हैं - उदाहरण from