Array dalam JavaScript sangat mudah dimodifikasi dengan menambah dan menghapus item. Ini agak menutupi fakta bahwa kebanyakan array bahasa berukuran tetap, dan membutuhkan operasi kompleks untuk mengubah ukurannya. Tampaknya JavaScript mempermudah penulisan kode array yang berperforma buruk. Ini mengarah pada pertanyaan:
Kinerja apa (dalam hal kompleksitas waktu O besar) yang dapat saya harapkan dari implementasi JavaScript terkait dengan kinerja array?
Saya berasumsi bahwa semua implementasi JavaScript yang masuk akal memiliki paling banyak O besar berikut.
- Akses - O (1)
- Menambahkan - O (n)
- Mempersiapkan - O (n)
- Penyisipan - O (n)
- Penghapusan - O (n)
- Swapping - O (1)
JavaScript memungkinkan Anda mengisi array ke ukuran tertentu, menggunakan new Array(length)
sintaks. (Pertanyaan bonus: Apakah membuat larik dengan cara ini O (1) atau O (n)) Ini lebih seperti larik konvensional, dan jika digunakan sebagai larik berukuran sebelumnya, dapat memungkinkan O (1) menambahkan. Jika logika buffer melingkar ditambahkan, Anda dapat mencapai O (1) prepending. Jika array yang berkembang secara dinamis digunakan, O (log n) akan menjadi kasus rata-rata untuk keduanya.
Dapatkah saya mengharapkan kinerja yang lebih baik untuk beberapa hal daripada asumsi saya di sini? Saya tidak berharap ada yang diuraikan dalam spesifikasi apa pun, tetapi dalam praktiknya, bisa jadi semua implementasi utama menggunakan array yang dioptimalkan di belakang layar. Apakah ada larik yang berkembang secara dinamis atau beberapa algoritme peningkatan kinerja lainnya yang bekerja?
PS
Alasan saya bertanya-tanya ini adalah karena saya sedang meneliti beberapa algoritme pengurutan, yang sebagian besar berasumsi bahwa menambahkan dan menghapus adalah operasi O (1) saat menjelaskan O besar mereka secara keseluruhan.
length
properti dan ruang pra-alokasi adalah dua hal yang sangat berbeda.
array[5]
pada a new Array(10)
is O (1)?
.length
tetapi hanya itu saja.) Array sebenarnya tidak jauh berbeda dari instance Object biasa.