bisect_left ve bisect_right
Sıralı bir listede ekleme noktalarını bulun.
bisect_left ve bisect_right, CoddyKit'te ücretsiz bir Competitive Programming Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Competitive Programming Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Competitive Programming Academy kursu toplamda 4 dersten oluşur.
Tekrarlı Kod Olmadan Arama
Python'ın bisect modülü, sıralı listeler için test edilmiş bir ikili arama sunar. Elle yazılmış bir döngü olmadığında, hata ayıklamanız gereken bir eksik-bir fazla hatası da olmaz.
import bisectMantıksal Değerler Değil, Ekleme Konumları
bisect, doğru veya yanlış yerine, bir değerin listeyi sıralı tutacak şekilde eklenebileceği bir indeks döndürür. Asıl güç bu indeksten gelir.
a = [1, 3, 3, 3, 7]bisect_left Sola Yanaşır
bisect_left, değerin yerleşebileceği ilk konumu döndürür. Yinelemelerde tüm eşit öğelerin önüne yerleşir, asla sonrasına değil.
bisect.bisect_left(a, 3) # 1bisect_right Sağa Yanaşır
bisect_right, son eşit öğenin hemen sonrasındaki konumu döndürür. Yinelemelerde eşleşen tüm değerlerin arkasına yerleşir.
bisect.bisect_right(a, 3) # 4Eşit Öğeleri Sayın
Bir değerin yinelemelerini saymak için ikisini birbirinden çıkarın; bunu O(log n) sürede yapabilirsiniz. right eksi left, değerin tam olarak kaç kez göründüğünü verir.
lo = bisect.bisect_left(a, 3)
hi = bisect.bisect_right(a, 3)
print(hi - lo) # 3Değer Mevcut muydu
Üyeliği kontrol etmek için bisect_left ile i değerini alın ve a[i] değerinin hedefe eşit olduğunu doğrulayın. Önce i değerinin liste uzunluğuna ulaşmadığından emin olun.
i = bisect.bisect_left(a, x)
found = i < len(a) and a[i] == xX'e Eşit veya Ondan Büyük İlk Öğe
bisect_left, x'e eşit veya x'ten büyük olan ilk öğeyi de bulur. Bu indeks, alt sınır yanıtınızı doğrudan gösterir.
i = bisect.bisect_left(a, x) # first >= xKesinlikle Daha Büyük İlk Öğe
x'ten kesinlikle büyük olan ilk öğeye mi ihtiyacınız var? bisect_right bu indeksi, üst sınırın karşılığını, doğrudan verir.
i = bisect.bisect_right(a, x) # first > xEkleyin ve Sıralı Tutun
insort, konumu bulup tek çağrıda ekleme yapar ve listeyi sıralı tutar. Sıralı bir yapıyı anlık olarak oluştururken kullanışlıdır.
bisect.insort(a, 5) # a stays sortedBir Pencerenin İçinde Arayın
İsteğe bağlı lo ve hi bağımsız değişkenleri, aramayı bir dilimle sınırlar. Yalnızca bir alt aralıkla ilgilendiğinizde kopyalama yapmanızı önler.
bisect.bisect_left(a, x, 2, 5)Yardımcı Listeyle Anahtarlar
bisect öğelerin tamamını karşılaştırır; bu nedenle bir alana göre arama yapmak için yalnızca bu anahtarlardan oluşan paralel bir liste oluşturup bisect'i onun üzerinde kullanın.
keys = [p[0] for p in pairs]
i = bisect.bisect_left(keys, target)Hızlı Kontrol
Yinelemeleri ve ekleme konumlarını nasıl ele alacağınızı düşünün.
Özet: Bisect Ustalığı
Artık ekleme konumlarını bulabilir, yinelemeleri sayabilir ve alt ve üst sınırları logaritmik sürede belirleyebilirsiniz. Bir döngü yazmadan önce bisect'e başvurun. ✨
Sıkça Sorulan Sorular
“bisect_left ve bisect_right” dersi ücretsiz mi?
Evet — “bisect_left ve bisect_right” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Competitive Programming Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Competitive Programming Academy kursu toplamda 4 dersten oluşur.
“bisect_left ve bisect_right” dersinde ne öğreneceğim?
Sıralı bir listede ekleme noktalarını bulun. Competitive Programming Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Competitive Programming Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Competitive Programming Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“bisect_left ve bisect_right” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Competitive Programming Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Competitive Programming Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Hatasız Klasik İkili Arama
- bisect_left ve bisect_right
- İlk True: Predicate İkili Araması
- Yanıt Üzerinde İkili Arama