SORU
28 AĞUSTOS 2009, Cuma


Sayıların sıralanmış bir diziye eklemek için etkili bir yolu, bir numara?

JavaScript sıralanmış bir dizi var, ve bu elde edilen dizinin sıralanmış kalır dizi içine bir parça daha eklemek istiyorum. Kesinlikle quicksort tarzı basit bir ekleme işlevi uygulamak olabilir:

var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
  array.splice(locationOf(element, array)   1, 0, element);
  return array;
}

function locationOf(element, array, start, end) {
  start = start || 0;
  end = end || array.length;
  var pivot = parseInt(start   (end - start) / 2, 10);
  if (end-start <= 1 || array[pivot] === element) return pivot;
  if (array[pivot] < element) {
    return locationOf(element, array, pivot, end);
  } else {
    return locationOf(element, array, start, pivot);
  }
}

console.log(insert(element, array));

Ancak Dizinin bu uygulamaları fark ettim.sıralama fonksiyonu potansiyel olarak benim için, ve doğal olarak bu olabilir

var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
  array.push(element);
  array.sort(function(a, b) {
    return a - b;
  });
  return array;
}

console.log(insert(element, array));

İkinci ilk uygulama seçmek için iyi bir neden var mı?

EditNot : bu genel durum, O(log(n)) ekleme (uygulanan ilk örnek) daha hızlı daha genel bir sıralama algoritması; ancak bu mutlaka böyle JavaScript özellikle. Not:

  • En iyi ihtimalle birkaç ekleme algoritmaları O(n), hangi hala önemli ölçüde farklı O(log(n)), ama değil oldukça kötü olarak O(n log(n)) olarak belirtilen aşağıda. Belirli bir sıralama algoritması kullanılır (Javascript Array.sort implementation?)
  • Sıralama yöntemi JavaScript yerel bir işlevi, yani potansiyel fark çok büyük Faydaları -- O(log(n)) ile büyük bir katsayısı hala olmak çok daha kötü O(n) için makul boyutta veri setleri.

CEVAP
19 Kasım 2010, Cuma


Sadece tek bir veri noktası olarak, önceden sıralanmış 100,000 sayıları iki yöntem Windows üzerinde Chrome 7 kullanarak bir diziye 1000 rasgele öğeler ekleme bu test başladı:

First Method:
~54 milliseconds
Second Method:
~57 seconds

Yani, en azından bu Kur, yerel yöntemi telafi etmiyor. Bu bile küçük veri setleri için doğru, 1000 dizisine 100 öğeleri ekleme

First Method:
1 milliseconds
Second Method:
34 milliseconds

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FullMag

    FullMag

    15 ŞUBAT 2007
  • Fuse

    Fuse

    21 Kasım 2005
  • guau . .

    guau . .

    25 Ocak 2008