JavaScript'teki dizilerin öğe ekleyip çıkararak değiştirilmesi çok kolaydır. Bir şekilde çoğu dil dizisinin sabit boyutlu olduğu ve yeniden boyutlandırmak için karmaşık işlemler gerektirdiği gerçeğini maskeliyor. Görünüşe göre JavaScript, düşük performanslı dizi kodu yazmayı kolaylaştırıyor. Bu soruya yol açar:
Dizi performansı açısından JavaScript uygulamalarından (büyük O zamanı karmaşıklığı açısından) ne tür bir performans bekleyebilirim?
Tüm makul JavaScript uygulamalarının en fazla aşağıdaki büyük O'lara sahip olduğunu varsayıyorum.
- Erişim - O (1)
- Ekleniyor - O (n)
- Başa eklenen - O (n)
- Ekleme - O (n)
- Silme - O (n)
- Değiştirme - O (1)
JavaScript, new Array(length)
sözdizimini kullanarak bir diziyi belirli bir boyuta kadar önceden doldurmanıza olanak tanır . (Bonus soru: Bu şekilde bir dizi oluşturmak mı O (1) veya O (n)) Bu daha çok geleneksel bir dizi gibidir ve önceden boyutlandırılmış bir dizi olarak kullanılırsa, O (1) eklemeye izin verebilir. Dairesel arabellek mantığı eklenirse, önceden O (1) eklemeyi başarabilirsiniz. Dinamik olarak genişleyen bir dizi kullanılırsa, O (log n) her ikisi için de ortalama durum olacaktır.
Bazı şeyler için buradaki varsayımlarımdan daha iyi performans bekleyebilir miyim? Herhangi bir spesifikasyonda hiçbir şeyin ana hatlarıyla belirtilmesini beklemiyorum, ancak pratikte, tüm büyük uygulamaların perde arkasında optimize edilmiş diziler kullanması olabilir. Dinamik olarak genişleyen diziler veya başka performans artırıcı algoritmalar var mı?
PS
Bunu merak etmemin nedeni, bazı sıralama algoritmalarını araştırıyor olmam, bunların çoğu ekleme ve silme işlemlerinin genel olarak büyük O (O) işlemlerini açıklarken O (1) işlemleri olduğunu varsayıyor olmam.
length
ve alanı önceden tahsis etmek tamamen farklı iki şeydir.
array[5]
a ayarının new Array(10)
O (1) olmasını beklediğimde çok fazla şey mi bekliyorum ?
.length
ama bununla ilgili.) Diziler, düz Object örneklerinden pek de farklı değil.