Algoritma seleksi: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
update |
k Hysocc memindahkan halaman Algoritme seleksi ke Algoritma seleksi dengan menimpa pengalihan lama |
||
(17 revisi perantara oleh 13 pengguna tidak ditampilkan) | |||
Baris 1:
Dalam [[ilmu komputer]], sebuah '''
== Seleksi dengan
Satu
==
Kasus terburuk
▲Kasus terburuk algoritma linear untuk menemukan minimum atau maksimum adalah sangat jelas; kita menyimpan dua peubah, satu mengacu ke indeks dari elemen minimum/maksimum yang didapatkan sementara, dan satu lagi menyimpan nilainya. Bersamaan dengan kita memindai list tersebut, kita perbarui kedua peubah tersebut jika kita menemukan sebuah elemen yang sesuai:
'''function''' minimum(a[1..n])
minIndex
minValue
'''for''' i '''from''' 2 '''to''' n
'''if''' a[i] < minValue
minIndex
minValue
'''return''' minValue
'''function''' maximum(a[1..n])
maxIndex
maxValue
'''for''' i '''from''' 2 '''to''' n
'''if''' a[i] > maxValue
maxIndex
maxValue
'''return''' maxValue
Sebagai catatan, kemungkinan akan terdapat banyak elemen minimum atau maksimum. Oleh karena pembandingan di atas adalah kaku (''strict''),
Jika kita ingin menemukan kedua elemen minimum dan maksimuam bersamaan, perbaikan kecil dapat dilakukan dengan sepasang pembandingan, yaitu membandingkan elemen ganjil dan genap pada setiap pasang dan membandingkannya dengan elemen maksimum dan minimum.
== Algoritme seleksi umum nonlinear ==
Dengan memakai ide yang sama yang digunakan dalam algoritme minimum/maksimum, kita dapat mengkonstruksi sebuah algoritme sederhana tapi tidak efisien untuk menemukan item terkecil ke-''k'' atau terbesar ke-''k'', yang membutuhkan waktu O(''kn''), yang efektif untuk ''k'' yang kecil. Untuk memperolehnya, kita cukup menemukan nilai paling ekstrem dan memindahnya ke bagian awal sampai kita mendapatkan indeks yang diinginkan. Hal ini dapat dilihat sebagai [[pengurutan seleksi]] yang tidak lengkap. Berikut ini adalah algoritme berbasis minimum:
'''function''' select(a[1..n], k)
'''for''' i '''from''' 1 '''to''' k
minIndex = i
minValue = a[i]
for j = i+1 to n
if a[j] < minValue
minIndex = j
minValue = a[j]
swap a[i] and a[minIndex]
'''return''' a[k]
Keuntungan lain dari metode ini adalah:
* Setelah mengetahui lokasi elemen terkecil ke-''j'', waktu yang dibutuhkan hanya O(''j'' + (''k''-''j'')<sup>2</sup>) untuk menemukan elemen terkecil ke-''k'', atau hanya O(''k'') untuk ''k'' ≤ ''j''.
* Metode ini dapat dilakukan dengan struktur data [[list berkait]], di mana list terbut berbasis partisi yang membutuhkan [[pengaksesan acak]].
{{algoritme-stub}}
[[Kategori:Algoritma]]▼
[[Kategori:Algoritma Pencarian]]▼
|