Topoligal Sort Algoritma
Topoligal Sort Algoritma
TOPOLOGICAL SORT
Deskripsi persoalan :
Diberikan urutan partial dari elemen suatu himpunan, dikehendaki agar elemen
yang terurut partial tersebut mempunyai keterurutan linier.
Contoh dari keterurutan partial banyak dijumpai dalam kehidupan sehari-hari,
misalnya:
1. Dalam suatu kurikulum, suatu mata pelajaran mempunyai prerequisit mata
pelajaran lain. Urutan linier adalah urutan untuk seluruh mata pelajaran dalam
kurikulum
2. Dalam suatu proyek, suatu pekerjaan harus dikerjakan lebih dulu dari pekerjaan
lain (misalnya membuat fondasi harus sebelum dinding, membuat dinding harus
sebelum pintu. Namun pintu dapat dikerjakan bersamaan dengan jendela. dsb
3. Dalam sebuah program Pascal, pemanggilan prosedur harus sedemikian rupa,
sehingga peletakan prosedur pada teks program harus seuai dengan urutan
(partial) pemanggilan.
Dalam pembuatan tabel pada basis data, tabel yang di-refer oleh tabel lain harus
dideklarasikan terlebih dulu. Jika suatu aplikasi terdiri dari banyak tabel, maka urutan
pembuatan tabel harus sesuai dengan definisinya
Jika X < Y adalah simbol untuk X sebelum Y, dan keterurutan partial
digambarkan sebagai graf, maka graf sebagai berikut :
2
6
10
4
9
8
3
10
Kenapa disebut salah satu urutan linier ? Karena suatu urutan partial akan
mempunyai banyak urutan linier yang mungkin dibentuk dari urutan partial tersebut.
Elemen yang membentuk urutan linier disebut sebagai list.
Proses yang dilakukan untuk mendapatkan urutan linier :
1. Andaikata item yang mempunyai keterurutan partial adalah anggota himpunan S.
2. Pilih salah satu item yang tidak mempunyai predesesor, misalnya X. Minimal ada
satu elemen semacam ini. Jika tidak, maka akan looping.
3. Hapus X dari himpunan S, dan insert ke dalam list
4. Sisa himpunan S masih merupakan himpunan terurut partial, maka proses 2-3
dapat dilakukan lagi terhadap sisa dari S
5. Lakukan sampai S menjadi kosong, dan list Hasil mempunyai elemen dengan
keterurutan linier
Solusi I :
Untuk melakukan hal ini, perlu ditentukan suatu representasi internal. Operasi yang
penting adalah memilih elemen tanpa predesesor (yaitu jumlah predesesor elemen
sama dengan nol). Maka setiap elemen mempunyai 3 karakteristik : identifikasi, list
suksesornya, dan banyaknya predesesor. Karena jumlah elemen bervariasi, maka
representasi yang paling cocok adalah list berkait dengan representasi dinamis
(pointer). List dari suksesor direpresentasi pula secara berkait. Ilustrasi struktur data
dan program dalam bahasa Pascal yang diadaptasi dari buku [Wirth86] diberikan
sebagai berikut.
Representasi yang dipilih untuk persoalan ini adalah multilist sebagai berikut :
1. List yang digambarkan horisontal adalah list dari banyaknya predesesor setiap
item, disebut list Leader, yang direpresentasi sebagai list yang dicatat alamat
elemen pertama dan terakhir (Head-Tail) serta elemen terurut menurut key. List ini
dibentuk dari pembacaan data. Untuk setiap data keterurutan partial X<Y :Jika X
dan/atau Y belum ada pada list leader, insert pada Tail dengan metoda search
dengan sentinel
2. List yang digambarkan vertical (ke bawah) adalah list yang merupakan indirect
adressing ke setiap predesesor, disebut sebagai Trailer. Untuk setiap elemen list
Leader X, list dari suksesornya disimpan sebagai elemen list Trailer yang setiap
elemennya berisi alamat dari suksesor. Penyisipan data suatu suksesor (X<Y),
dengan diketahui X, maka akan dilakukan dengan InsertFirst alamat Y sebagai
elemen list Trailer dengan key X
Algoritma secara keseluruhan terdiri dari dua pass :
1. Bentuk list leader dan Trailer dari data keterurutan partial : baca pasangan nilai
(X<Y). Temukan alamat X dan Y (jika belum ada sisipkan), kemudian dengan
mengetahui alamat X dan Y pada list Leader, InsertFirst alamat Y sebagai trailer X
2. Lakukan topological sort dengan melakukan search list Leader dengan jumlah
predesesor=0, kemudian insert sebagai elemen list linier hasil pengurutan.
Ilustrasi umum dari list LEADER dan TRAILER untuk representasi internal
persoalan topological sorting adalah sebagai berikut
HEAD
TAIL
Key
Count
Next
Trail
Id
Next