2011-09-15 29 views
5

Bir öğe ve bir dizi verildiğinde, Ruby # indeks yöntemi, dizideki öğenin konumunu döndürür. Kendi indeks yöntemimi kullanarak, mayının yerleşik olanı geride bırakması beklenen ikili arama yöntemini kullanarak yaptım. Sürprizime göre, yerleşik bir deneyde benimki kadar hızlı üç kat çalıştı.Ruby # index Yöntem VS İkili Arama

Herhangi bir Rubyist nedenini biliyor mu?

+2

Ruby '# index' yönteminin ikili arama ile zaten uygulanmadığını kim söyledi? Ve ayrıca, bu yöntemin Ruby'de uygulandığını kim söyledi? :-) –

+0

@Platinum Azure Gördüğünüz gibi, C ile ikili aramada uygulanabilir. Çok teşekkürler! –

+0

Anladın! :-) –

cevap

10

Dahili #index is not a binary search, yalnızca basit bir yineleme aramasıdır. Bununla birlikte, Ruby yerine C dilinde uygulanır, dolayısıyla doğal olarak birkaç kat daha hızlı olabilir.

+0

Teşekkürler. Gerçi bu gerçekten tuhaf. İkili arama yaklaşımını benimsemedikleri için bir neden var mıydı? –

+1

İkili bir arama, iki öğenin eşit olup olmadığını görebilmenin aksine, iki öğeyi karşılaştırabilmeyi içerir. Ayrıca, belgelerin * ilk * nesnesinin argümana eşit olduğunu söyleyen dökümanlara dikkat edin - ikili arama her zaman bu öğeyi döndürmez. Ayrıca, #bsearch (dizinin sıralandığı varsayılmaktadır) sürümüm #index'den daha yavaş görünmüyor: https://gist.github.com/1220440 –

+0

#bsearch uygulamanızın Ruby ile arasındaki farkı yenebileceğini varsayalım C ile ikili arama ve sıralı arama arasında? –