My first Magazine pemrograman-kompetitif-dasar | Page 91
8.1 Dynamic Array
II Sekilas Info JJ
Pada implementasinya, array A perlu dibuat menggunakan konsep pointer dan alokasi
memori.
Dengan cara ini, dynamic array dapat memperbesar ukurannya sesuai dengan banyaknya
elemen yang disimpan. Memori yang dibutuhkan paling banyak sebesar dua kali banyaknya
elemen yang disimpan.
Perhatikan bahwa operasi push kadang-kadang memerlukan proses yang tidak O(1). Hal ini
tidak seburuk kelihatannya. Sebab ketika dirata-rata, kompleksitas operasi push dapat dianggap
O(1).
Untuk lebih memahaminya, misalkan kita akan menyimpan N data pada sebuah dynamic array
kosong dengan melakukan N kali push . Dengan nilai awal maxSize = 1, diperlukan lipat ganda
ukuran array pada operasi push yang ke-2, 4, 8, 16, dan seterusnya sampai lebih besar atau
sama dengan N. Secara matematis, banyaknya operasi lipat ganda yang diperlukan adalah M,
dengan M = blog 2 Nc. Operasi lipat ganda ini dilakukan pada push yang ke-2 1 , 2 2 , 2 3 , ..., dan 2 M .
Untuk setiap lipat ganda pada push yang ke-x, diperlukan penyalinan data sebanyak x/2 elemen.
kan:
Banyaknya elemen yang disalin pada seluruh lipat ganda dapat dihitung dengan menjumlah-
2 1 2 2 2 3
2 M
+ + + ... +
2
2
2
2
Yang mana jumlahan ini dapat disederhanakan menjadi:
2 0 + 2 1 + 2 2 + ... + 2 M−1
Dengan rumus deret aritmetika, hasil jumlahan dari deret tersebut adalah 2 M − 1.
Perhatikan pula bahwa dipenuhi:
2 blog 2 Nc ≤ N
Mengingat M = blog 2 Nc, dipastikan 2 M − 1 tidak lebih dari N − 1.
Kini kita mengetahui bahwa total elemen yang disalin secara keseluruhan untuk push se-
banyak N kali tidak lebih dari N − 1. Selain penyalinan elemen, dilakukan pula penyimpanan
data pada setiap push . Misalkan setiap penyalinan elemen atau penyimpanan data pada push
dianggap membutuhkan 1 operasi. Artinya, banyaknya operasi maksimum untuk penyalinan
elemen ditambah penyimpanan data adalah N + N − 1 operasi. Ketika diambil rata-ratanya, setiap
push membutuhkan N+N−1
≈ 2 operasi. Dengan demikian, secara rata-rata push dapat dianggap
N
O(1).
81