ikili arama Pythonu

Bir Python ikili araması, sıralanmış bir dizideki bir öğenin konumunu bulur. Bir listeyi ikiye böler. Belirtilen değer ortadaki sayıdan buyukse, arama listenin sağına odaklanır. Aksi takdirde, arama listenin solundaki numarayı arar.

Listedeki bir √∂ƒüenin konumunu nasƒ±l bulursunuz? ƒ∞kili aramalar bu konuda arkanƒ±zda. ƒ∞kili aramalarƒ± kullanarak, sƒ±ralanmƒ±≈ü bir dizi içindeki bir √∂ƒüenin konumunu kolayca bulabilirsiniz.

Bilgisayarlar, belirli bir √∂ƒüeyi bulmak için listeler arasƒ±nda arama yapmakta iyidir. Bilgisayarlarƒ±n bir listedeki √∂ƒüeleri bulmak için kullandƒ±ƒüƒ± kurallara arama algoritmalarƒ± denir. En populer Python algoritmalarƒ±ndan biri ikili aramadƒ±r.

Bu kƒ±lavuzda, ikili aramalarƒ±n ne olduƒüunu ve ikili aramalarƒ±n neler olduƒüunu tartƒ±≈üacaƒüƒ±z. onlar nasƒ±l çalƒ±≈üƒ±r. Programlarƒ±nƒ±za nasƒ±l bir tane yazacaƒüƒ±nƒ±zƒ± √∂ƒürenebilmeniz için Python’da bir ikili arama √∂rneƒüini inceleyeceƒüiz. Haydi ba≈ülayalƒ±m!

Python İkili Araması nedir?

Python ikili araması, sıralı bir dizideki bir öğenin konumunu bulan bir algoritmadır. İkili aramalar, bir listeyi tekrar tekrar ikiye böler. Ardından, bir değerin listedeki orta değerden daha yuksek veya daha duşuk olup olmadığı bir aramayla karşılaştırılır.

ƒ∞kili arama gerçekle≈ütirmenin iki yolu vardƒ±r. Her iki yakla≈üƒ±m da bir dizideki belirli bir noktada en yuksek ve en du≈üuk konumlarƒ± izlemek için kullanƒ±lan i≈üaretçiler ayarlar.

Kullanabileceƒüiniz ilk yakla≈üƒ±m yinelemeli y√∂ntemdir. Bu yakla≈üƒ±mda, bir dizideki bir elemanƒ±n konumunu belirlemek için bir dizi ifade tekrarlanƒ±r. Python’da bu amaçla bir while d√∂ngusu kullanƒ±rƒ±z.

Diƒüer yakla≈üƒ±m √∂zyinelemeli y√∂ntemdir. Burasƒ±, listedeki bir eleman bulunana kadar kendini tekrar tekrar çaƒüƒ±ran bir fonksiyon yazdƒ±ƒüƒ±nƒ±z yerdir. √ñzyinelemeli y√∂ntem, daha √∂nce tartƒ±≈ütƒ±ƒüƒ±mƒ±z b√∂l ve y√∂net yakla≈üƒ±mƒ±nƒ± kullanƒ±r ve bir √∂ƒüe bulunana kadar arama surecini tekrarlar.

Katƒ±lƒ±mcƒ±larƒ±n %81’i, bir eƒüitim kampƒ±na katƒ±ldƒ±ktan sonra teknik i≈ü beklentileri konusunda daha emin hissettiklerini belirtti. . Bugun bir eƒüitim kampƒ± ile e≈üle≈ütirin.

Ortalama bir eƒüitim kampƒ± mezunu, bir eƒüitim kampƒ±na ba≈ülamaktan ilk i≈üini bulmaya kadar, kariyer geçi≈üinde altƒ± aydan az zaman harcadƒ±.

B√∂lunmeyle ilgili onca konu≈ümayla ve fetih ve √∂zyineleme, bir ikili aramanƒ±n tam olarak nasƒ±l çalƒ±≈ütƒ±ƒüƒ±nƒ±n izini kaybetmek kolay olabilir. Bu nedenle, ikili aramanƒ±n nasƒ±l çalƒ±≈ütƒ±ƒüƒ±na ili≈ükin doƒürudan bir √∂rneƒüe atlayacaƒüƒ±z. A≈üaƒüƒ±daki listeyi g√∂z √∂nunde bulundurun:

79142234

"22‚" listemizde.

Ba≈ülamak için listelerimize iki i≈üaretçi koyacaƒüƒ±z. Bir i≈üaretçi listedeki en yuksek deƒüeri, diƒüer nokta ise en du≈üuk deƒüeri yansƒ±tacaktƒ±r:

< /table>

Sonraki adımımız, dizinin ortasındaki 14 olan elemanı bulmaktır. Bu değer, aradığımız değere eşitse, bu değer döndurulmelidir.

Bu durumda 14, 22 ile aynı değildir. Dolayısıyla programımızın bir karşılaştırma yapması gerekiyor.

Aradığımız sayıyı, mevcut orta elemanın sağ tarafındaki elemanların orta elemanı ile karşılaştıracağız.Bunu ancak aradığımız sayı ise yapacağız. ortadaki sayıdan buyuktur. Aksi takdirde, öğeyi mevcut orta öğenin solundaki orta öğeyle karşılaştırırız.

22 sayƒ±sƒ± 14’ten buyuktur. Programƒ±mƒ±z 22’yi kar≈üƒ±la≈ütƒ±rmaya ba≈ülar. mevcut orta elemanƒ±mƒ±zƒ±n (14) saƒü tarafƒ±ndaki orta elemana. Bu durumda, bu sayƒ± 22’dir. Bu, aradƒ±ƒüƒ±mƒ±z sayƒ±ya e≈üittir.

Biz‚Äô orta deƒüer. Programƒ±mƒ±z ≈üimdi o sayƒ±nƒ±n dizin konumunu d√∂ndurecek. Bu durumda, 22’nin dizin konumu 3’tur (unutmayƒ±n, listeler 0’dan ba≈ülayarak dizine eklenir!).

ƒ∞kili Nasƒ±l Uygulanƒ±r? Python’da Ara

Haydi&rsq uo;s bazı Python kodları ile ellerimizi kirletir. Daha önce tartıştığımız yaklaşımların ikisini de kullanarak ikili aramanın Python uygulamasını keşfedeceğiz: yinelemeli ve özyinelemeli yöntemler.

Python’da Yinelemeli ƒ∞kili Arama

Biz‚Äô yinelemeli y√∂ntemle ba≈ülayacaƒüƒ±m. Burasƒ±, listemizdeki her √∂ƒüenin uzerinden geçeceƒüimiz yerdir. Ardƒ±ndan, listede ortadaki deƒüeri bulacaƒüƒ±z. Aradƒ±ƒüƒ±mƒ±z deƒüeri bulana kadar bunu yapmaya devam edeceƒüiz.

İkili Arama Fonksiyonu

Bir Python işlevi:

Fonksiyonumuz iki parametre kabul eder: arama yapmak istediƒüimiz liste ve içinde bulmak istediƒüimiz sayƒ± listemizde.

Ardƒ±ndan listedeki en du≈üuk ve en yuksek deƒüerler için varsayƒ±lan deƒüerleri depolayan iki Python deƒüi≈ükeni bildirdik. < em>du≈üuk, listedeki ba≈ülangƒ±ç ‚Äã‚Äãdizin deƒüeri olan 0’a ayarlanƒ±r. yuksek, listenin uzunluƒüuna ayarlanƒ±r m inus one (çunku listeler sƒ±fƒ±rdan dizine eklenir).

Bir sonraki adƒ±mƒ±mƒ±z bir Python while d√∂ngusu bildirmekti. Bu d√∂ngu, en du≈üuk eleman en yuksek sayƒ±dan kuçuk veya ona e≈üitken çalƒ±≈üƒ±r. Bu, d√∂ngumuzun ancak sayƒ± henuz bulunamadƒ±ƒüƒ±nda çalƒ±≈üacaƒüƒ± anlamƒ±na gelir.

Ardƒ±ndan ortadaki sayƒ±yƒ± hesaplƒ±yoruz. Bunu en yuksek deƒüerden en du≈üuk deƒüeri 烱kararak yaparƒ±z. Daha sonra o sayƒ±nƒ±n 2’ye b√∂lunduƒüunde modulosunu (kalanƒ±nƒ±) hesaplƒ±yoruz. Ardƒ±ndan modulo’yu en kuçuk sayƒ±nƒ±n deƒüerine ekliyoruz.

Listemizde ortadaki sayı ile sayı aynı ise. bulmak istiyorsak, o sayının konumunu döndururuz.

Yeni "du≈üuk‚" sayƒ±, orta konumdan bir buyuk olmalƒ±dƒ±r. Bu, ortadaki sayƒ± bulmak istediƒüimiz sayƒ±dan kuçukse olur. Bu, daha √∂nce g√∂rsel √∂rneƒüimizde yaptƒ±ƒüƒ±mƒ±z gibi aramamƒ±zƒ± listemizin sol tarafƒ±na kaydƒ±rƒ±r.

Aksi takdirde, "yuksek‚" sayƒ±mƒ±zƒ± orta konumdan bir eksik olacak ≈üekilde ayarlarƒ±z. Bu, aramamƒ±zƒ± listemizin saƒü tarafƒ±na ta≈üƒ±r.

" Python.Engineering hayatƒ±ma en çok ihtiyacƒ±m olduƒüu anda girdi ve hƒ±zlƒ± bir ≈üekilde bir bootcamp ile e≈üle≈ümeme yardƒ±mcƒ± oldu. Mezun olduktan iki ay sonra, hayattaki deƒüerlerim ve hedeflerime uygun hayalimdeki i≈üi buldum!"

Venus, Rockbot’ta Yazƒ±lƒ±m Muhendisi

< p>Bu, low, high’a e≈üit veya daha du≈üuk olana kadar tekrarlanƒ±r. Deƒüerimiz bulunamazsa, -1 d√∂ndururuz. Nedenini birazdan konu≈üacaƒüƒ±z.

Aramayı Yurutun

Aşağıdaki kodu programınızın altına findValue işlevinin dışında ekleyin:

Listeyi bildirerek ba≈üladƒ±k Ardƒ±ndan, bulmak istediƒüimiz sayƒ± olan 22’yi belirledik.

Sonra, findValue() fonksiyonumuzu a diyoruz. ve listeyi içinden geçirin.

-1’in daha √∂nce geldiƒüi yer burasƒ±dƒ±r. Fonksiyonumuz tarafƒ±ndan d√∂ndurulen sayƒ± -1 ise, √∂ƒüemiz listede bulunamadƒ± demektir. Arama fonksiyonumuz negatif bir sayƒ± d√∂nduremeyeceƒüinden, programcƒ±lar genellikle -1’i bu gibi durumlarda kullanƒ±r.

Aksi takdirde, programımız bize bu değerin dizin konumunu bildiren bir mesaj yazdırır.

< p>Kodumuz şunu döndurur:

Artık 22 sayısının dizin 3 konumunda görunduğunu biliyoruz.

Python’da √ñzyinelemeli ƒ∞kili Arama

ƒ∞kili arama yapmak için √∂zyinelemeyi de kullanabiliriz. Burasƒ±, bir ko≈üul ‚Äì numaramƒ±z bulundu ‚Äì kar≈üƒ±landƒ±.

Bir Özyinelemeli İşlev Tanımlayın

Son √∂rneƒüimizde olduƒüu gibi ikili aramamƒ±zƒ± gerçekle≈ütiren bir i≈ülev yazarak ba≈ülayacaƒüƒ±z:

Kodumuz bir şekilde son örneğimize benzer.

En yuksek değerin duşukten buyuk veya eşit olup olmadığını kontrol ederek başlıyoruz. Eğer öyleyse, programımız -1 döndurur. Aksi takdirde ikili arama yapmaya başlayacaktır.

Son √∂rnekteki ile aynƒ± yakla≈üƒ±mƒ± kullanarak ortadaki sayƒ±yƒ± hesaplƒ±yoruz. ƒ∞lk olarak, en du≈üuk deƒüeri en yuksek deƒüerden 烱karƒ±yoruz. Ardƒ±ndan, 2’ye b√∂lunduƒüunde bu deƒüerin modulosunu (kalanƒ±nƒ±) hesaplarƒ±z. Son olarak, en du≈üuk sayƒ±yƒ± ekleriz.

Ardından, nasıl olacağına karar veren bir if ifadesi yazdık. ikili aramamız devam etmelidir:

  • Ortadaki sayƒ± aradƒ±ƒüƒ±mƒ±z sayƒ±ya e≈üitse, o sayƒ±nƒ±n konumu d√∂ndurulur.
  • Ortadaki sayƒ± ise aradƒ±ƒüƒ±mƒ±zdan daha az, findValue() fonksiyonumuz tekrar çaƒürƒ±lƒ±r. Bu sefer du≈üuk deƒüeri ortadaki deƒüerden bir buyuk olacak ≈üekilde ayarlanmƒ±≈ütƒ±r.
  • Ortadaki sayƒ± aradƒ±ƒüƒ±mƒ±zdan buyukse, < em>findValue() i≈ülevi çaƒürƒ±lƒ±r. "yuksek‚" ortadaki deƒüerden bir eksik olacaktƒ±r.

Ana Programı Yazın

Tek yapmamız gereken ana programımızı yazmak:

Ana programımız önceki örneğimizle aynı, bir fark var. findValue() işlevimize iki yeni parametre aktarıyoruz: duşuk ve yuksek.

Algoritmamƒ±z √∂zyinelemeli olduƒüundan ve bu deƒüerleri fonksiyonumuzda atayamadƒ±ƒüƒ±mƒ±z için bunu yapmamƒ±z gerekiyor. Eƒüer deƒüerleri fonksiyonumuzda atasaydƒ±k, fonksiyonumuz her çalƒ±≈ütƒ±rƒ±ldƒ±ƒüƒ±nda bu deƒüerler sƒ±fƒ±rlanƒ±r, bu da arama algoritmamƒ±zƒ± boz.

Kodumuz şunu döndurur:

Daha √∂nce de aynƒ± sonucu aldƒ±k. Bu √∂rnekte, ikili aramamƒ±zƒ± gerçekle≈ütirmek için yinelemeli bir program yerine yinelemeli bir program kullandƒ±k.

Python İkili Aramasını Ne Zaman Kullanmalısınız?

İkili arama, bir bir numara listesinde arama yapmanın etkili yolu. Bu arama, doğrusal bir aramadan daha verimlidir. Bunun nedeni, ikili yöntemin, sıralanmış bir listenin ortasını bulur bulmaz aramanızı yarıya indirmesidir.

Bir listenin, kullanƒ±larak aranabilmesi için √∂nce sayƒ±sal olarak sƒ±ralanmasƒ± gerektiƒüini unutmamak √∂nemlidir. ikili arama ƒ∞kili arama yapmadan √∂nce, numaralarƒ±nƒ±zƒ±n artan duzende sƒ±ralandƒ±ƒüƒ±ndan emin olun.

Python Karma≈üƒ±klƒ±k Daƒüƒ±lƒ±mƒ±’nda ƒ∞kili Arama

İkili aramanın karmaşıklığı nedir? Bu guzel bir soru.

ƒ∞kili arama algoritmasƒ±nƒ±n en iyi durum karma≈üƒ±klƒ±ƒüƒ± O(1)’dir. Bu, ilk kar≈üƒ±la≈ütƒ±rma aradƒ±ƒüƒ±nƒ±z √∂ƒüeye e≈üit olduƒüunda gerçekle≈üir.

ƒ∞kili arama için ortalama ve en k√∂tu durum karma≈üƒ±klƒ±ƒüƒ± O(log n)’dir. Bu, bir arama yapmak için gereken surenin, bir listede aranacak √∂ƒüe sayƒ±sƒ±na baƒülƒ± olarak logaritmik olarak arttƒ±ƒüƒ± anlamƒ±na gelir.

Sonuç

ƒ∞kili aramalar verimli bir yoldur. bir listedeki bir deƒüerin dizin konumunu bulmak için.

ƒ∞kili arama her çalƒ±≈ütƒ±rƒ±ldƒ±ƒüƒ±nda, arama listeyi iki parçaya b√∂ler. Arama, listenin aradƒ±ƒüƒ±nƒ±z numaraya en yakƒ±n tarafƒ±na odaklanƒ±r.

Arama her çalƒ±≈ütƒ±rƒ±ldƒ±ƒüƒ±nda, programƒ±n aramasƒ± gereken sayƒ± miktarƒ± yarƒ±ya du≈üer.

p>

Python hakkƒ±nda daha fazla bilgi edinmek için Python Nasƒ±l √ñƒürenilir kƒ±lavuzumuzu okuyun.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method

Duşuk


Yuksek
79142234