İkili Arama Algoritması – Python Analizi Yaptırma Fiyatları – Python Yazılım Analizi Örnekleri – Ücretli Python Analizi Yaptırma – Python Dili
İkili Arama Algoritması
Pratikte son bir özyineleme örneği olarak, ikili arama adı verilen algoritmaya bir göz atalım. Muhtemelen 20 evet-hayır sorusu sorarak birinin ne düşündüğünü tahmin etmeniz gereken oyunu biliyorsunuzdur. Sorularınızdan en iyi şekilde yararlanmak için, olasılık sayısını (az ya da çok) yarıya indirmeye çalışırsınız.
Sayısal olarak daha eğilimli olanlar için bu oyunun bir versiyonu, bir sayıyı tahmin etmektir. Örneğin partneriniz 1 ile 100 arasında bir sayı düşünüyor ve sizin hangisi olduğunu tahmin etmeniz gerekiyor. Tabii ki, bunu yüzlerce tahminde yapabilirsin, ama gerçekten kaç tanesine ihtiyacın var?
Görünüşe göre, sadece yedi soruya ihtiyacın var. İlki, “Sayı 50’den büyük mü?” Eğer öyleyse, “75’ten büyük mü?” Sayıyı bulana kadar aralığı yarıya indirmeye devam edersiniz. Bunu fazla düşünmeden yapabilirsiniz.
Aynı taktik birçok farklı bağlamda kullanılabilir. Yaygın sorunlardan biri, bir sayının (sıralanmış) bir sırada bulunup bulunmadığını ve hatta nerede olduğunu bulmaktır.
Yine aynı prosedürü uyguluyorsunuz: “Sayı, dizinin ortasının sağında mı?” Değilse, “İkinci çeyrekte mi (sol yarının ortasının sağında)?” ve benzeri. Sayının nerede olabileceğine dair bir üst ve alt sınır tutarsınız ve her soruda bu aralığı ikiye bölmeye devam edersiniz. Mesele şu ki, bu algoritma kendisini doğal olarak yinelemeli bir tanım ve uygulamaya borçludur.
Ne yaptığımızı bildiğimizden emin olmak için önce tanımı gözden geçirelim:
• Üst ve alt limitler aynıysa, her ikisi de sayının doğru konumunu ifade eder, bu yüzden geri verin.
• Aksi takdirde, aralığın ortasını (üst ve alt sınırın ortalaması) bulun ve sayının sağda mı yoksa solda mı olduğunu öğrenin.
Uygun yarıda aramaya devam edin. Yinelemeli durumun anahtarı, sayıların sıralanmış olmasıdır, böylece ortadaki öğeyi bulduğunuzda, onu aradığınız sayıyla karşılaştırabilirsiniz. Numaranız büyükse sağda, küçükse solda olmalıdır.
Özyinelemeli kısım “Uygun yarıda aramaya devam et” şeklindedir çünkü arama tam olarak tanımda açıklanan şekilde gerçekleştirilecektir. (Not: arama algoritması, sayı dizide yoksa olması gereken konumu döndürür, bu konum doğal olarak başka bir sayı tarafından işgal edilecektir.)
Bu tam olarak tanımın yapması gerektiğini söylediği şeyi yapar: Eğer alt == üst ise, o zaman üst sınır olan üst değeri döndür. Aradığınız sayının (sayı) gerçekten bulunduğunu varsaydığınızı (iddia ettiğinizi) unutmayın (sayı == sıra[üst]).
Henüz temel durumunuza ulaşmadıysanız, ortayı bulur, numaranızın solda mı yoksa sağda mı olduğunu kontrol eder ve yeni limitlerle yinelemeli aramayı çağırırsınız. Limit belirtimlerini isteğe bağlı hale getirerek bunu kullanmayı daha da kolaylaştırabilirsiniz. İşlev tanımının başına aşağıdaki koşullu eklemeniz yeterlidir.
Ama neden tüm bu zahmete katlanıyorsun, soruyorsun? Bir şey için, basitçe liste yöntemi indeksini kullanabilirsiniz ve bunu kendiniz uygulamak isterseniz, en baştan başlayıp sayıyı bulana kadar yineleyerek bir döngü oluşturabilirsiniz.
Elbette. Dizini kullanmak gayet iyi. Ancak basit bir döngü kullanmak biraz verimsiz olabilir. 100 arasında bir sayı (veya konum) bulmak için yedi soruya ihtiyacınız olduğunu söylediğimi hatırlıyor musunuz? Ve döngü, en kötü senaryoda açıkça 100 soruya ihtiyaç duyar.
Büyük anlaşma, diyorsun. Ancak listede 100.000.000.000.000.000.000.000.000.000.000.000 öğe ve bir döngü ile aynı sayıda soru varsa (belki bir Python listesi için biraz gerçekçi olmayan bir boyut), bu tür şeyler önemli olmaya başlar. İkili arama o zaman sadece 117 soruya ihtiyaç duyar.
İkili arama algoritması C
Doğrusal arama algoritması
Arama algoritmaları
Arama algoritmaları YAPAY zeka
Ardışık arama algoritması nedir
En hızlı arama algoritması
Binary search Algoritması Java
Rastgele arama algoritması
İşlevleri Atma
Şimdiye kadar, muhtemelen işlevleri tıpkı diğer nesneler gibi (dizeler, sayılar, diziler vb.) değişkenlere atayarak, parametre olarak geçirerek ve diğer işlevlerden döndürerek kullanmaya alışmışsınızdır. Bazı programlama dilleri (Şema veya LISP gibi) hemen hemen her şeyi gerçekleştirmek için işlevleri bu şekilde kullanır.
Genellikle Python’daki işlevlere o kadar fazla güvenmeseniz de (genellikle bir sonraki bölümde bu konuda daha fazla kendi nesne türünüzü yaparsınız), yapabilirsiniz. Bu bölümde, bu tür “işlevsel programlama” için yararlı olan birkaç işlev açıklanmaktadır. Bu işlevler harita, filtre, küçültme ve uygulamadır.
Harita işlevi, öğelerin her birine bir işlev uygulayarak bir diziyi diğerine (aynı uzunlukta) “eşler”. Örneğin, bir numara listeniz olabilir ve tüm numaraların ikiye katlandığı başka bir liste oluşturmak isteyebilirsiniz.
Yerleşik chr işlevi, tek parametresi olarak bir sayı alır ve bu sayıya karşılık gelen karakteri döndürür (gerçekte ASCII kodu olan sıralı sayı).
Dizeler yalnızca karakter dizileri olduğundan, haritayı doğrudan kullanabilirsiniz. Sonucun başka bir dize değil, bir liste olduğunu unutmayın.
Filtre işlevi, istemediğiniz öğelerin filtrelendiği yeni bir liste döndürür. Veya başka bir deyişle, tam olarak istediklerinizi döndürür. Belirli bir sıra öğesi için bir Boole (gerçek) değeri döndüren bir işlevle filtre sağlarsınız.
İşlev true döndürürse, öğe döndürülen dizinin bir parçasıdır; false döndürürse, öğe döndürülen diziye dahil edilmez. (Orijinal sıra değiştirilmez.) Örneğin, liste numaralarından yalnızca çift sayıları korumak isteyebilirsiniz.
Lambda ifadesi, belirli bir sayının 2’ye bölündüğünde kalanın sıfır olup olmadığını kontrol eder (bu, sayının çift olduğunu söylemenin başka bir yoludur).
Şimdi, harita ve filtre çok yararlı olabilir, ancak bunlar dile liste kavrayışı gelmeden önce eklendi. Düşünürseniz, harita ve filtrenin başarabildiği her şey, liste kavrayışlarıyla da yapılabilir.
Kanımca, liste kavrayışları çoğu durumda harita ve filtre kullanmaktan daha okunabilir. Her zaman liste kavrayışlarını kullanmanız gerektiğini söyleyecek kadar ileri gitmeyeceğim: bu büyük ölçüde bir zevk meselesi ve her bir özel programlama görevinin talepleri.
■Not: Peşinde olduğunuz şey hızsa, harita ve filtre ile devam etmek isteyebilirsiniz. Yerleşik işlevlerle birlikte kullanıldıklarında, liste kavramalarından daha hızlıdırlar.
Arama algoritmaları Arama algoritmaları YAPAY zeka Ardışık arama algoritması nedir Binary search Algoritması Java Doğrusal arama algoritması En hızlı arama algoritması İkili arama algoritması C Rastgele arama algoritması