Kemungkinan-kemungkinan
rujukan:
Objektif
topik: Pelajar harus
memahami
struktur data yang asas, dan beberapa algoritma utama. Konsep kekompleksan
algortimaan juga harus difahami, dan anggaran kekompleksan bagi kes-kes mudah
harus dapat dibuat.
|
Struktur data – bentuk-bentuk organisasi data, biasanya berkaitan dengan jenis data Algoritma – satu tatacara yang dispesifikasikan secara tepat, bagi menyelesaikan suatu masalah |
perlu cara
formal membina aturcara secara cekap dan boleharap.
- boleh
dilakukan dgn memecahkan suatu aturcara kpd modul-modul kecil yg bersesuaian,
yg tiap-tiapnya boleh ditulis dan diuji sebelum dimasukkan ke dalam modul yg
lebih besar, yg seterusnya dibina dan diuji
kod
spageti –
panjang dan berlingkar-lingkar
Peniskalaan
pandangan
aras tinggi bagi objek atau fungsi di mana butiran aras rendah boleh diabaikan.
-
membolehkan telatah utama objek atau fungsi dipertimbangkan dalam menyelesaikan
masalah tanpa dirumitkan butiran-butiran.
Peniskalaan
fungsi –
spesifikasikan fungsi bagi suatu modul
Peniskalaan
struktur (orientasi
objek - OO) – bina model perisian untuk telatah barang-barang dunia
sebenar
Jenis
data – struktur
data dan himpunan fungsi atau tatacara yang mengolah struktur data tersebut
Jenis
data niskala –
jenis data yg hanya boleh dicapai menerusi suatu antaramuka
Aturcara yg
menggunakan suatu jenis data niskala: pelanggan
Aturcara yg
menspesifikasikan jenis data niskala tersebut: implementasi
|
Pengaturcaraan OO: “kaedah” – fungsi dan tatacara “kelas” – struktur data dan kaedahnya (yakni, jenis data niskala) + ciri tambahan: pewarisan, polimorfisme “objek” – suatu penseketikaan kelas; mewakili objek dalam dunia sebenar; pembolehubah berjenis spt diberikan kelas |
Beberapa
struktur data asas dan beberapa operasi berkaitan:
|
vektor set teratur unsur-unsur data |
pengindeksan hasiltambah vektor, dsb |
|
rentetan vektor dgn panjang yg bolehubah |
penjeraitan |
|
tatasusunan tatasusunan berdimensi n ialah vektor dgn unsur-unsurnya tatasusunan berdimensi n-1 dgn set-set indeks yg sepadan (tatasusunan berdimensi 0 adalah skalar) |
pelinearan (menulis unsur-unsur sebagai aturan linear
dimensi 1) |
|
pepohon suatu unsur data sebagai akar dan beberapa (mungkin 0) ranting yang terdiri dari (sub)pepohon
|
tuding ke akar ranting anak pertama kembalian unsur akar ranting anak pertama tuding ke akar ranting seterusnya kembalian unsur akar ranting seterusnya |
senarai berpaut ke hadapanunsur-unsur setiapnya dgn pautan kpd unsur seterusnya, diakhiri pautan nol
|
awalkan tuding ke unsur pertama kembalian unsur pertama tuding ke unsur seterusnya kembalian unsur seterusnya kembalian unsur terakhir masukkan unsur hapuskan unsur ujian samada senarai kosong |
|
senarai berpaut dwiarah spt senarai berpaut ke hadapan tapi dgn pautan ke belakang juga
|
tuding ke unsur sebelumnya kembalian unsur sebelumnya |
|
senarai membulat senarai berpaut ke hadapan dgn unsur terakhir terpaut ke unsur pertama
|
kembalian saiz senarai |
|
baris gilir senarai unsur-unsur data utk mana masukan unsur di buat di satu hujung dan penghapusan di satu lagi (senarai FIFO)
|
masukan unsur baru keluaran (kembalian & penghapusan) unsur ujian samada baris gilir kosong |
|
tindan spt baris gilir, tapi masukan dan penghapusan di buat di hujung yang sama (senarai LIFO)
|
tolak (masukan unsur baru) pop (keluaran unsur) ujian kekosongan |
|
graf struktur spt pepohon tetapi lebih am: suatu unsur mungkin komponen lebih dari satu substruktur - terarah: setiap unsur punyai kepala (kecuali akar) dan ekor (mungkin nol) - terakar: satu unsur akar yg tak berkepala - tersambung: mana dua unsur punyai sekurangnya satu pendahulu bersama - tak membulat: tiada unsur yg mendahului dirinya
|
|
|
gelang struktur berhierarki di mana set komponen suatu unsur dipaut sbg senarai membulat
|
|
|
timbunan baris gilir di atas pepohon dedua lengkap di mana unsur di suatu nod adalah lebih terkemudian menurut tertib berbanding unsur-unsur di nod ranting; masukan ialah pada sebelah paling kiri di aras ranting terbawah
|
masukan unsur
(tertib perlu diabadikan dgn cara tukarganti, jika perlu, nod anak dan
ibu berkenaan ke atas sehingga ke akar)
penghapusan unsur akar (pengabadian tertib dgn
tukarganti ke bawah ke ranting terendah; pertimbangkan nod anak yg lebih
terkemudian menurut tertib)
|
-
utk
membandingkan algoritma berlainan utk
tugasan sama
-
utk
meramalkan prestasi algoritma dlm persekitaran baharu
-
utk
menetapkan nilai parameter-parameter algoritma
-
dll
kekompleksan – anggaran (peringkat)
bilangan pengiraan yg perlu dibuat terhadap suatu parameter utama N
apabila N besar
beberapa algoritma biasa:
pengisihan
♠ isihan gelembung – unsur-unsur dalam suatu vektor: bandingkan
dua unsur berjiranan; tukarganti jika perlu, menurut tertib; imbas seluruh
vektor – kalau ada N unsur, setiap imbasan perlukan N
operasi bandingan, dan dlm kes terburuk perlukan N pusingan
imbasan ⇒ kekompleksan ~ N×N ataupun O(N2)
♠ isihan timbunan – unsur-unsur
dimasukkan ke dalam timbunan dan dikeluarkan dari akar – pengabadian
tertib dalam timbunan memerlukan ~ log2 N operasi ⇒ kekompleksan O(log N)
♠ isihan cepat – unsur-unsur dalam suatu vektor: gunakan rekursi:
bahagikan vektor asal kpd 2 bahagian yg diatur semula unsurnya, dan isih
bahagian-bahagian ini secara rekursi; pembahagian dibuat spt berikut: pilih
suatu unsur, imbas dari satu hujung vektor sehingga bertemu unsur yg tertibnya
terkemudian dari unsur pilihan dan dari hujung yg satu lagi sehingga bertemu
unsur yg tertibnya terdahulu dari unsur pilihan, tukarganti unsur yg ditemui
ini, dan teruskan imbasan sebegini sehingga bertemu, di pertemuan itulah
letakkan unsur pilihan tadi – kes terburuk bila vektor sudah tertertib
& pembahagian dibuat N kali & bilangan bandingan = N+(N-1)+(N-2)+…+2+1
= (N+1)N/2; secara purata, pembahagian ialah kpd 2 bahagian
bersaiz lebih-kurang sama, jadi kekompleksan CN = 2CN/2+N ~ O(N log N)
♠ isih-cantum – unsur-unsur dalam suatu vektor: gunakan rekursi:
bahagikan vektor asal kpd 2 bahagian yg setiapnya dikenakan isih-cantum berasingan,
kemudian dicantum semula, dengan cantuman menghormati tertib – pembahagian dibuat
log N kali & pada cantuman memerlukan N operasi kesemuanya pada aras
ke-α (α cantuman setiapnya dengan vektor panjang
N/α),
jadi kekompleksan ~ O(N log N)
♠ dll
penggelintaran
♠ berjujukan – unsur-unsur
dalam suatu vektor: cari unsur yg dikehendaki dgn meneliti unsur-unsur satu-persatu
– kekompleksan O(N)
♠ deduaan – unsur-unsur dalam
suatu vektor secara bertertib: bahagikan vektor kpd 2; tentukan di bahagian
mana unsur dicari patut berada; bahagikan pula bahagian ini; dan seterusnya,
hingga ditemui – vektor panjang N boleh dibahagi sebegitu log2
N kali ⇒ kekompleksan O(log N)
♠ pepohonan – gunakan pepohon
dedua gelintaran (pepohon dedua tertertib: subpepohon kiri mempunyai akar
terdahulu dalam tertib kepada nod akar dan subpepohon kanan punyai akar tertib
terkemudian, dan setiap subpepohon juga tertertib); gelintar dalam subpepohon
berkenaan – kekompleksan O(log N)
♠ fungsi cincangan / jadual cincangan
– tertib unsur diwakilkan oleh kunci; cincangan mentransformasikan kunci
ini kepada alamat lokasi dalam jadual – kekompleksan O(1)
♠ dll
masalah grafan:
pepohon rentang minimum (sambung N pulau secara
termurah), jurujual jalanan (lawat N tempat dgn perjalanan
terpendek)
Ο algoritma tamak – gerakan dibuat berdasarkan
hanya maklumat yg ada ketika gerakan itu hendak dibuat; biasanya suboptimum
♠ algoritma Kruskal – utk
pepohon rentang minimum: tambah tepi termurah jika tidak hasilkan kitar
♠ algoritma Djikstra – utk
mencari jejak terpendek dari satu bucu ke bucu-bucu lain: jika S set
bucu yg telah didapati jejak terdekat dan V-S bagi yg baki, isih
bucu dlm V-S menurut anggaran terbaik semasa bagi panjang jejak,
tambahkan bucu dgn jejak terdekat u, dan kemaskini kos semua bucu v
yg tersambung kpd u jika anggaran terbaik jejak terpendek ke v
boleh diperbaiki dgn memasukkan tepi (u,v) dlm jejak ke v.
♠ dll