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

पायथन में बाइनरी सर्च (द्विभाजित)

यहां हम पायथन में द्विभाजित देखेंगे। द्विभाजक का उपयोग बाइनरी खोज के लिए किया जाता है। बाइनरी सर्च तकनीक का उपयोग क्रमबद्ध सूची में तत्वों को खोजने के लिए किया जाता है। द्विभाजित एक पुस्तकालय कार्य है।

हम पायथन में द्विभाजित का उपयोग करते हुए तीन अलग-अलग कार्य देखेंगे।

किसी तत्व की पहली घटना का पता लगाना

bisect.bisect_left(a, x, lo =0, hi =len(a)) इस फ़ंक्शन का उपयोग क्रमबद्ध सूची में x के सबसे बाएं सम्मिलन बिंदु को वापस करने के लिए किया जाता है। इस मामले में अंतिम दो पैरामीटर वैकल्पिक हैं। इन दोनों का इस्तेमाल सबलिस्ट में सर्च करने के लिए किया जाता है।

उदाहरण

from bisect import bisect_left
def BinSearch(a, x):
   i = bisect_left(a, x)
   if i != len(a) and a[i] == x:
      return i
   else:
      return -1
a = [2, 3, 4, 4, 5, 8, 12, 36, 36, 36, 85, 89, 96]
x = int(4)
pos = BinSearch(a, x)
if pos == -1:
   print(x, "is absent")
else:
   print("First occurrence of", x, "is at position", pos)

आउटपुट

First occurrence of 4 is at position 2

x से छोटा सबसे बड़ा मान ढूँढना

bisect_left विकल्प का उपयोग करके, हम बड़ा मान प्राप्त कर सकते हैं, जो x (कुंजी) से छोटा है।

उदाहरण

from bisect import bisect_left
def BinSearch(a, x):
   i = bisect_left(a, x)
   if i :
      return i-1
   else:
      return -1
a = [2, 3, 4, 4, 5, 8, 12, 36, 36, 36, 85, 89, 96]
x = int(8)
pos = BinSearch(a, x)
if pos == -1:
   print(x, "is absent")
else:
   print("Larger value, smaller than", x, "is at position", pos)

आउटपुट

Larger value, smaller than 8 is at position 4

x की सबसे सही आवृत्ति का पता लगाना

bisect.bisect_right(a, x, lo =0, hi =len(a)) इस फ़ंक्शन का उपयोग क्रमबद्ध सूची में x के सबसे सही सम्मिलन बिंदु को वापस करने के लिए किया जाता है। इस मामले में अंतिम दो पैरामीटर वैकल्पिक हैं। इन दोनों का इस्तेमाल सबलिस्ट में सर्च करने के लिए किया जाता है।

उदाहरण

from bisect import bisect_right
def BinSearch(a, x):
   i = bisect_right(a, x)
   if i != len(a) + 1 and a[i-1] == x:
      return i-1
   else:
      return -1
a = [2, 3, 4, 4, 5, 8, 12, 36, 36, 36, 85, 89, 96]
x = int(36)
pos = BinSearch(a, x)
if pos == -1:
   print(x, "is absent")
else:
   print("Right most occurrence of", x, "is at position", pos)

आउटपुट

Right most occurrence of 36 is at position 9

  1. पायथन में प्रीऑर्डर ट्रैवर्सल से बाइनरी सर्च ट्री का निर्माण करें

    मान लीजिए कि हमें एक बाइनरी सर्च ट्री बनाना है जो दिए गए प्रीऑर्डर ट्रैवर्सल से मेल खाता हो। इसलिए यदि प्री-ऑर्डर ट्रैवर्सल [8,5,1,7,10,12] जैसा है, तो आउटपुट [8,5,10,1,7,null,12] होगा, इसलिए ट्री होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रूट:=0वें प्रीऑर्डर ट्रैवर्सल सूची का नोड

  1. पायथन में एक बाइनरी सर्च ट्री का सबसे कम सामान्य पूर्वज

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हमें दो दिए गए नोड्स के सबसे कम सामान्य पूर्वज नोड्स को खोजना होगा। दो नोड्स p और q का LCA वास्तव में पेड़ में सबसे कम नोड के रूप में होता है जिसमें p और q दोनों डीसेंटेंट होते हैं। तो अगर बाइनरी ट्री [6, 2, 8, 0, 4, 7, 9, नल, नल, 3, 5] जैसा है। पेड़ जै

  1. पाइथन में सॉर्ट किए गए ऐरे को बाइनरी सर्च ट्री में कनवर्ट करें

    मान लीजिए कि हमारे पास एक क्रमबद्ध सरणी ए है। हमें एक ऊंचाई-संतुलित बाइनरी खोज उत्पन्न करनी है। इस समस्या में, एक ऊंचाई-संतुलित बाइनरी ट्री वास्तव में एक बाइनरी ट्री है जिसमें प्रत्येक नोड के दो उपप्रकारों की गहराई कभी भी 1 से अधिक भिन्न नहीं होती है। मान लीजिए कि सरणी [-10, -3, 0, 5, 9 की तरह है। ]