2012-10-17 21 views
8

JavaScript kullanarak rasgele oluşturulmuş bir dizi noktadaki en yakın puan çiftini bulmak için bir böl ve yönet algoritması uygulamaya çalışıyorum. Bu algoritma O (n log n) zamanında çalışmalıdır, ancak O (n^2) olması gereken basit bir kaba kuvvet algoritmasından daha uzun sürmektedir.JavaScript'te En Yakın Eşlik Algoritması

İki jsfiddles o zaman oluşturduk 16000 noktaları dizisi için algoritmalar:

Varsayımım bölmek ve fethetmek çünkü çok yavaş olmasıdır JavaScript dizileri aslında karma tablolarıdır. JavaScript'teki algoritmayı önemli ölçüde hızlandırmak mümkün mü? Eğer öyleyse, bunu yapmanın en iyi yolu ne olurdu?

+2

değil yapmaya çalışıyorum: //mrale.ph/blog/2011/11/05/the-trap-of-the-performance-sweet-spot.html) javascript performansı hakkında bilgi sahibidir – ElderMael

cevap

2

Bir bakışta, birleştirme işleviniz çok fazla bellek ayırıyor (yaklaşık olarak O (n^2)). Bu here ölçmek için hacky bir yol yaptım. Temel fikir, sadece küresel kapsamda bir sayacım var ve her çağrıldığında birleştirme tarafından oluşturulan dizinin boyutunu ekliyorum. Umarım bu sizin düzeltmeniz için yeterli bilgi, daha fazla sorunla karşılaşırsanız birkaç ek işaretçi sunmaktan mutluluk duyarım.

Ayrıca, sadece rakamlarla oynayarak bir hash tablosu sorunu olduğunu göz ardı etmek oldukça kolaydır * - karma tablosu tarafından yavaşlatılan bir algoritma O (n log n) 'den daha hızlı bir büyüme oranı göstermez, sadece yavaş başlar ve aynı hatlar boyunca büyürler. Bir dizi değeri denerseniz, bundan daha hızlı büyüdüğü ve farklı bir sorun olduğu ortaya çıkacaktır.

* javascript Dizilerin iç uygulama biraz daha karmaşık onlardan daha adil olmak nesneler, ama noktası için bu gerçekten olursa olsun [bu post] (http inanıyoruz

İlgili konular