Professional Documents
Culture Documents
SALING LEPAS
Andrew Pratomo Budianto - NIM : 13505046
Abstrak
Dalam menyelesaikan suatu permasalahan, sering kali diperlukan struktur data himpunan yang tidak saling
tumpuk (suatu elemen hanya terdapat pada sebuah himpunan, sering disebut sebagai himpunan saling lepas).
Disamping itu, struktur data himpunan saling lepas seringkali dibutuhkan untuk menjawab pertanyaan: apakah
elemen a dan b berada pada sebuah himpunan yang sama?, dan juga harus dapat menggabungkan isi dari
beberapa himpunan menjadi sebuah himpunan (union) dalam waktu yang singkat. Makalah ini menjelaskan
bagaimana graf dapat digunakan untuk menyelesaikan masalah struktur data himpunan seperti yang disebutkan
di atas (himpunan saling lepas).
Kata-kata kunci: Graf, struktur data, himpunan saling lepas, disjoint set, union, find.
1
lokasi, maka himpunan dari simpul-simpul tersebut redudansi pada graf tak berarah, sebagai contoh
adalah himpunan lokasi-lokasi yang ada. Dengan apabila simpul A dan B bertetangga, maka list
analogi ini, maka sisi merepresentasikan jalan yang ketetanggaan dari A akan mengandung B,
menghubungkan pasangan lokasi-lokasi tersebut. demikian pula sebaiknya, list ketetanggaan dari
Himpunan E merupakan semua jalan diantara lokasi- B akan mengandung A. Struktur data ini
lokasi tersebut [3]. cenderung lebih cepat daripada incidence list,
namun dibayar dengan ukuran memori yang
Graf pada umumnya direpresentasikan sebagai lebih besar.
berikut: nodenya digambarkan dengan titik atau Berbeda dengan list, varian struktur data graf dengan
lingkaran, dan sisinya digambarkan dengan garis matriks lebih banyak, yaitu:
yang menghubungkannya. • Incidence matriks: Graf direpresentasikan
dengan matriks sisi dengan simpul, dimana
[sisi, simpul] mengandung informasi sisi
tersebut (kasus termudah: 1 – terhubung, 0 – tak
terhubung).
• Matriks ketetanggaan: Struktur data ini
merupakan struktur data yang cukup banyak
digunakan dalam merepresentasikan sebuah
graf, apabila terdapat sebuah sisi yang
menghubungkan simpul x dan y, maka Mi,j
berisi 1, selain itu 0, representasi demikian
Gambar 1. Contoh representasi graf memberikan kemudahan untuk mencari subgraf
Pada gambar 1 terlihat bahwa: dan membalik (reverse) graf jika dibutuhkan.
• V = {1, 2, 3, 4, 5, 6} • Matriks Laplacian: Didefinisikan sebagai
• E = {(1,3),(1,6),(2,5),(3,4),(3,6)}. matriks derajat - matriks ketetanggaan,
Tiap simpul merupakan anggota dari himpunan V, terkandung didalamnya informasi ketetanggaan
dan tiap sisi merupakan anggota dari himpunan E, dan informasi derajat sebuah simpul.
perhatikan bahwa terdapat simpul yang bukan • Matriks jarak: Berupa matriks n x n, dimana Mi,j
merupakan ujung dari sisi manapun, simpul yang berisi informasi jarak terdekat antara i dan j,
demikian disebut “terisolasi” [3]. jika tidak terdapat jalur yang menghubungkan i
dan j maka Mi,j = ~.
2.2 Representasi Graf Dalam Sistim Komputer
3. STRUKTUR DATA
Terdapat berbagai macam cara untuk menyimpan Pada tiap algoritma, terdapat kebutuhan untuk
graf dalam sistim komputer. Data struktur yang menyimpan data. Mulai dari menyimpan sebuah
digunakan bergantung pada struktur graf dan nilai pada sebuah variable, sampai pada struktur data
algoritma yang digunakan untuk memanipulasi graf yang lebih kompleks. Dalam lomba pemrograman,
tersebut. Secara teoritis, dapat terlihat dengan jelas terdapat berbagai macam aspek yang harus diteliti
perbedaan antara representasi graf dengan struktur dari struktur data ketika akan memilih struktur data
data list dan matriks, namun dalam aplikasi konkret, yang akan digunakan dalam merepresentasikan data
struktur data terbaik adalah gabungan dari keduanya. dari sebuah permasalahan [5].
Struktur data list sering digunakan pada sparse graf
(graf dengan jumlah simpul yang jarang) karena Dalam istilah ilmu komputer, sebuah struktur data
struktur data ini membutuhkan memori dalam adalah cara penyimpanan, pengorganisasian dan
jumlah yang lebih sedikit. Struktur data matriks di pengaturan data di dalam media penyimpanan
sisi lain menjajikan akses yang lebih cepat dalam komputer sehingga data tersebut dapat digunakan
aplikasi tertentu namun memakan memori yang jauh secara mangkus [6].
lebih besar apabila grafnya sangat besar [4].
Dalam tehnik pemrograman, struktur data berarti
Terdapat dua buah cara yang umum diketahui dalam tata letak data yang berisi kolom-kolom data, baik
merepresentasikan list, yaitu: itu kolom yang tampak oleh pengguna (user)
• Incidence list: Sisi-sisi direpresentasikan ataupun kolom yang hanya digunakan untuk
dengan senarai yang mengandung pasangan keperluan pemrograman yang tidak tampak oleh
(terurut apabila grafnya berarah) simpul (yang pengguna. Setiap baris dari kumpulan kolom-kolom
dihubungkan oleh sisi yang bersangkutan), dan tersebut dinamakan catatan (record). Lebar kolom
bobot dari sisi jika sisinya memiliki bobot. untuk data dapat berubah dan bervariasi. Ada kolom
• Senarai ketetanggaan: Hampir sama dengan yang lebarnya berubah secara dinamis sesuai
incidence list, tiap simpul memiliki list dengan masukan dari pengguna, dan juga ada kolom yang
simpul tetangganya. Hal ini menimbulkan lebarnya tetap. Dengan sifatnya ini, sebuah struktur
2
data dapat diterapkan untuk pengolahan database singkat, himpunan merupakan salah satu konsep
(misalnya untuk keperluan data keuangan) atau yang sangat penting dan fundamental dalam
untuk pengolahan kata (word processor) yang matematika modern, dan studi tentang struktur
kolomnya berubah secara dinamis. Contoh struktur himpunan (set theory), merupakan studi yang
data dapat dilihat pada file-file spreadsheet, berkembang dengan sangat pesat akhir-akhir ini [9].
database, pengolahan kata, gambar yang dikompres,
juga pemampatan (kompres) file dengan teknik Studi tentang himpunan dimulai sejak akhir abad ke
tertentu yang memanfaatkan struktur data [6]. 19, yang sekarang menjadi bagian dari pendidikan
Berbagai macam stuktur data digunakan pada matematika, dan diajarkan sebagai pendidikan
berbagai macam aplikasi, dan beberapa jenis struktur elementer. Teori himpunan dapat dipandang sebagai
data sangat spesifik untuk masalah tertentu. Sebagai fondasi dari hampir seluruh ilmu matematika
contoh struktur data Pohon-B digunakan secara dibangun dan sumber dari hampir seluruh persamaan
spesifik pada implementasi database, dengan routing matematika.
tables bergantung pada jaringan mesin untuk dapat
berfungsi. Menurut kesepakatan, sebuah himpunan dapat
dibentuk dengan menuliskan isi dari elemen-elemen
Dalam mendesain bermacam macam program, himpunan tersebut dan ditulis di dalam kurung
pemilihan struktur data yang tepat merupakan kurawal, contoh: A = {3, 1, 2}, B = {merah, putih,
pertimbangan desain utama, pengalaman para ahli biru}, C = {1, 2, 3, …, 100}, D = {n2 + 1 : n
membangun sistem dalam skala besar membuktikan bilangan bulat; dan 0 ≤ n ≤ 100}.
bahwa tingkat kesulitan dalam inplementasi,
kualitas, dan performa dari sebuah sistem sangat Keanggotaan dari himpunan juga merupakan
bergantung pada struktur data yang digunakan. pertanyaan mendasar yang berkaitan dengan
Setelah struktur data yang tepat dipilih, algoritma himpunan. Apakah sebuah elemen merupakan atau
yang digunakan sering kali sudah dapat dilihat bukan merupakan anggota dari sebuah himpunan
dengan jelas [7]. tertentu dapat disimbolkan dengan ∈ dan ∉.
Karena alasan di atas, maka banyak metoda desain Jumlah anggota dari sebuah himpunan (kardinal)
dan bahasa pemrograman lebih menekankan yang dijelaskan di atas selalu terbatas, misalnya,
organisasi pada struktur data, bukan algoritmanya. himpunan A terdiri dari 4 anggota, himpunan B
Sebagian besar bahasa pemrograman memberikan terdiri dari 10 anggota. Himpunan juga dapat terdiri
fitur module system, yang memungkinkan struktur dari 0 anggota, yang sering disebut sebagai
data dapat digunakan pada aplikasi yang berbeda himpunan kosong, dan dinotasikan dengan symbol
dengan menyembunyikan detail implementasinya ∅, sebagai contoh, A = ∅. Namun, anggota dari
dibalik layar. Pemrograman berorientasi objek sebuah himpunan juga dapat tidak terbatas, misalnya
seperti C++ dan Java menggunakan classes untuk himpunan dari bilangan bulat.
menangani masalah ini [7].
4.2 Sub Himpunan
Beberapa contoh bentuk struktur data yang umum
dan berkaitan dengan graf antara lain [8]: Apabila tiap anggota himpunan A juga merupakan
• Senarai ketetangggaan anggota himpunan B, maka A dikatakan sub
• Struktur data himpunan saling lepas himpunan dari himpunan B, dituliskan sebagai A ⊆
• Graf-stack terstruktur B atau B ⊇ A. Himpunan kosong merupakan sub
• Scene Graph himpunan dari semua himpunan dan semua
• Struktur data pohon himpunan merupakan sub himpunan dari dirinya
• Pohon M-Way sendiri (∅ ⊆ A dan A ⊆ A).
• Pohon B
• Pohon Biner
• Trie
• Heap
• Parse tree
• Space partitioning
4. HIMPUNAN
4.1 Pengertian Himpunan
Dalam matematika, himpunan dapat didefinisikan Gambar 2. A merupakan sub himpunan dari B
sebagai kumpulan elemen-elemen yang unik,
meskipun diperoleh dari sebuah definisi yang sangat
3
4.3 Penjumlahan, Pengurangan, dan anggota dari A. Catatlah bahwa mengurangkan
Komplemen Himpunan elemen yang tidak terdapat dalam sebuah himpunan
adalah valid, contohnya, mengurangkan hijau dari
Terdapat berbagai macam cara untuk membentuk {1, 2, 3}, hasil dari perhitungan tersebut adalah {1,
himpunan baru dari himpunan yang sudah ada. Dua 2, 3}. Pada kasus tertentu, semua himpunan dapat
buah himpunan dapat “dijumlahkan” (union), yang dikatakan sebagai sub himpunan dari himpunan
dinotasikan dengan A ∪ B. Hasil dari penjumlahan universal U. U – A disebut komplemen absolute dari
ini berupa himpunan dari semua elemen yang A, dan dinotasikan dengan A’. Contohnya:
merupakan anggota A atau B. Contoh: • {1, 2} - {merah, putih} = {1, 2}
• {1, 2} ∪ {merah, putih} = {1, 2, merah, putih} • {1, 2, hijau} - {merah, putih, hijau} = {1, 2}
• {1, 2, hijau} ∪ {merah, putih, hijau} = {1, 2, • {1, 2} ∩ {1, 2} = ∅
merah, putih, hijau} Sifat-sifat dasar dari komplemen himpunan:
• {1, 2} ∪ {1, 2} = {1, 2} • A ∪ A’ = U
Sifat-sifat dasar dari penjumlahan himpunan: • A ∩ A’ = ∅
• A∪B=B∪A • (A’)’ = A
• A merupakan sub himpunan dari A ∪ B • A-A=∅
• A∪A=A • A - B = A ∩ B’
• A∪∅=A
Gambar 5. Himpunan B – A
4
menghasilkan himpunan kosong, yaitu bila A ∩ B = lepas ini semula ditemukan oleh Bernard A. Galler
∅. Definisi ini dapat diperluas untuk semua bentuk dan Michael J. Fisher pada tahun 1964, meskipun
himpunan. analisanya memakan waktu sampai bertahun-tahun
kemudian [10]
5. STRUKTUR DATA GRAF UNTUK
HIMPUNAN SALING LEPAS Untuk menggambarkan struktur data ini dengan
lebih jelas, akan dibahas penjelasannya dalam
Struktur data himpunan saling lepas, yang juga bahasa C.
dikenal dengan union-find set, adalah struktur data
yang terus menyimpan partisi dari himpunan Di bawah ini adalah representasi dari simpulnya
elemen selama selang waktu tertentu ketika dalam bahasa C, simpul tidak memiliki pointer ke
pemrosesan masalah dilakukan. Terdapat 3 operasi simpul anaknya namun memiliki pointer yang
utama yaitu [10]: menunjuk ke orang tuanya.
• MakeSet: Membuat sebuah partisi baru yang
berisi sebuah elemen. Algoritma 1. Simpul struktur data pohon himpunan
• Find: Mencari tahu pada partisi manakah saling lepas
sebuah elemen berada.
• Merge/Union: Menggabungkan dua buah partisi typedef struct
menjadi sebuah partisi. forest_node_simple_t {
void* value;
Terdapat beberapa solusi untuk masalah ini,
struct forest_node_simple_t*
menggunakan struktur data senarai berantai, atau parent;
struktur data pohon himpunan saling lepas. Sampai } forest_node_simple;
saat ini, solusi yang paling mangkus dan banyak
digunakan adalah struktur data pohon himpunan
saling lepas dengan path compression dan union Ketika menggunakan struktur data ini dalam aplikasi
rank heuristic, dengan performa O(α(n)), untuk α(n) sebenarnya, terdapat pilihan cara lain yaitu
merupakan fungsi yang bertumbuh sangat lambat memasukan properti dari simpul pohon langsung
dan pada aplikasinya hampir tidak pernah melebihi 5 pada struktur yang merepresentasikan tiap elemen
[10]. (biasa disebut dengan internal storage) [10].
5.1 Senarai Berantai Himpunan Saling Lepas Operasi find cukup singkat, diberikan simpul yang
terdapat pada sebuah pohon, maka akar pohon dapat
Mungkin cara termudah dalam membentuk struktur dicari dengan mengikuti pointer orang tuanya, akar
data himpunan saling lepas adalah dengan membuat dapat diasumsikan sebagai simpul yang
senarai berantai untuk tiap himpunan [1]. merepresentasikan seluruh partisi tersebut. Dalam
bahasa C, algoritma find dapat dituliskan sebagai
Algoritma MakeSet sudah cukup jelas, membuat berikut:
senarai dengan satu elemen. Union hanya
menggabungkan dua buah senarai. Sayangnya, Algoritma 2. Algoritma untuk mencari informasi
dengan implementasi demikian, Find memiliki pada himpunan mana sebuah elemen
kompleksitas O(n) (linear). berada
5
Algoritma 3. Algoritma menggabungkan dua buah Algoritma 6. Simpul pohon himpunan saling lepas
himpunan menjadi sebuah himpunan yang disempurnakan
<<declarations>>=
forest_node* MakeSet(void* value);
Pada akhirnya, MakeSet mengalokasikan tiap simpul
baru tanpa orang tua dan memasukkan nilai yang <<MakeSet operation>>=
diberikan pada simpul tersebut. Perlu diperhatikan forest_node* MakeSet(void* value) {
forest_node* node =
bahwa stdlib.h harus diinclude untuk menggunakan malloc(sizeof(forest_node));
fungsi malloc(). node->value = value;
node->parent = NULL;
Algoritma 4. Algoritma membentuk himpunan baru node->rank = 0;
berisi hanya sebuah elemen return node;
}
forest_node_simple*
MakeSetSimple(void* value) {
forest_node_simple* node = 5.3 Meningkatkan Efisiensifitas Struktur Data
malloc(sizeof(forest_node_simple)); Pohon Himpunan Saling Lepas
node->value = value;
node->parent = NULL; Meskipun sederhana, algoritma yang dijelaskan
return node; sejauh ini memiliki masalah sama seperti masalah
} yang dimiliki pohon pada umumnya, setelah
dilakukan banyak operasi penggabungan, ketinggian
Di bawah ini merupakan contoh penggunaan dari pohon menjadi bertambah besar. Karena operasi find
struktur data himpunan saling lepas seperti yang memakan waktu sebanding dengan ketinggian
telah dijelaskan di atas. pohon, maka hal ini dapat mengarah pada
kompleksitas linier. Pada penmasangan akar sebuah
Algoritma 5. Contoh penggunaan (mesin) dari pohon pada akar pohon yang lain, idealnya kita
struktur data himpunan saling lepas memasangkan pohon dengan ketinggian lebih
rendah pada pohon yang memiliki
#include <assert.h> ketinggian lebih tinggi. Sayangnya,
forest node simple ketinggian merupakan hal yang
simple MakeSet operation membutuhkan banyak kalkulasi
simple find operation dalam perhitungannya, terlebih
tanpa pointer anak. Oleh karena itu,
simple union operation
kita akan menggunakan
int main() {
int i1=1, i2=2, i3=3;
perhitungan kasar melalui tinggi
forest_node_simple* s1 = MakeSetSimple(&i1); kira-kira yang disebut dengan rank,
forest_node_simple* s2 = MakeSetSimple(&i2); yang disimpan pada akar pohon
forest_node_simple* s3 = MakeSetSimple(&i3); (Algoritma 6).
assert(FindSimple(s1) == s1); Rank dapat kita definisikan
UnionSimple(s1, s2); sebagai berikut [10]:
assert(FindSimple(s1) == FindSimple(s2)); • Prosedur MakeSet selalu
assert(FindSimple(s1) != FindSimple(s3));
menghasilkan pohon dengan rank 0
UnionSimple(s2, s3);
assert(FindSimple(s1) == FindSimple(s2) && (Algoritma 7).
FindSimple(s1) == FindSimple(s3)); • Jika rank(s) ≠ rank(t), maka
return 0; rank(Union(s, t)) merupakan rank
} terbesar antara rank(s) dan rank(t).
Dalam kasus ini, kita memasangkan akar pohon
6
dengan rank yang lebih kecil pada akar pohon Algoritma 10. Struktur data himpunan saling lepas
dengan rank yang lebih besar. secara keseluruhan
• Jika rank(s) = rank(t), maka rank(Union(s, t))
= rank(s) + 1 = rank(t) + 1 (Algoritma 8). <<union_find.h>>=
#ifndef _UNION_FIND_H_
Tehnik seperti yang dijelaskan di atas biasa dikenal #define _UNION_FIND_H_
dengan nama union find heuristic, menjamin
ketinggian logaritmik, yang tentu lebih mangkus. forest node
Namun kita bahkan dapat lebih mengefiseienkannya declarations
dengan tehnik yang dikenal dengan nama path
compression. Idenya adalah semua simpul yang #endif /* #ifndef _UNION_FIND_H_ */
dilewati ketika men-traverse dari sebuah simpul
sampai ke akar berada pada pohon yang sama, oleh <<union_find.c>>=
karena itu, simpul-simpul tersebut akan lebih baik header files
apabila langsung menunjuk (pointing) pada akar #include "union_find.h"
yang terdapat pada pohon yang sama. Kita membuat
kalang kedua dan memperbaharui pointer orang tua MakeSet operation
mereka, mempercepat pencarian berikutnya yang union operation
berkaitan dengan simpul yang bersangkutan dengan find operation
dramatis (Algoritma 9) [10].
Algoritma 8. rank(Union(s, t)) = rank(s) + 1 = Masih terdapat beragam algoritma lain yang tidak
rank(t) + 1 memerlukan kalang kedua, namun algoritma itu jauh
lebih rumit dan akan melenceng terlalu jauh dari
bahasan makalah ini.
<<declarations>>=
void Union(forest_node* node1, forest_node* node2);
<<union operation>>= Secara keseluruhan, struktur data di
void Union(forest_node* node1, forest_node* node2) { atas dapat digambarkan seperti
if (node1->rank > node2->rank) { pada Algoritma 10 di atas.
node2->parent = node1;
} else if (node2->rank > node1->rank) { Di bawah ini diberikan contoh
node1->parent = node2; penggunaan dari struktur data
} else { /* they are equal */
pohon himpunan saling lepas yang
node2->parent = node1;
node1->rank++; telah disempurnakan, kurang lebih
} tidak jauh berbeda dengan struktur
} data pohon himpunan saling lepas
yang belum disempurnakan:
Algoritma 9. Pointer tiap simpul diperbaharui ketika Algoritma 11. Struktur data himpunan saling lepas
melakukan traversal secara keseluruhan
<<declarations>>= <<union_find_example.c>>=
forest_node* Find(forest_node* node); #include <assert.h>
<<find operation>>= #include "union_find.h"
forest_node* Find(forest_node* node) {
/* Find the root */ int main() {
forest_node* root = node; int i1=1, i2=2, i3=3;
while (root->parent != NULL) { forest_node *s1=MakeSet(&i1),
root = root->parent; *s2=MakeSet(&i2),
} *s3=MakeSet(&i3);
/* Update the parent pointers */ assert(Find(s1) == s1);
forest_node* temp; Union(s1, s2);
while (node->parent != NULL) { assert(Find(s1) == Find(s2));
temp = node->parent; assert(Find(s1) != Find(s3));
node->parent = temp; Union(s2, s3);
node = temp; assert(Find(s1) == Find(s2) &&
} Find(s1) == Find(s3));
return root; return 0;
} }
7
6. APLIKASI STRUKTUR DATA berkaitan dengan koneksi antar komponen dari graf
HIMPUNAN SALING LEPAS tersebut seperti [1]:
• Apakah dua buah simpul dalam graf yang sama
6.1 Mengoptimalkan Algoritma Kruskal dalam
saling terkoneksi?
mencari Minimum Spanning Tree
• Tampilkan semua simpul dalam graf sesuai
Analisis membuktikan bahwa algoritma Kruskal dengan komponennya (keterhubungannya)
untuk Minimum Spanning Tree memiliki • Berapa banyak komponen yang saling
kompleksitas O(m log m) dengan m adalah jumlah terkoneksi?
sisi-sisinya. Algoritma ini membutuhkan cara yang
lebih cepat untuk mengetes apakah sisi yang Apabila grafnya statis (tidak berubah), maka kita
menghubungkan dua buah simpul berada pada dapat dengan singkat menggunakan breadth-first
komponen terkoneksi yang sama. search untuk mengasosiasikan sebuah komponen
dengan tiap simpul. Bagaimanapun, jika kita ingin
Untuk mencari tahu jawabannya, kita membutuhkan menelusuri komponen-komponen dalam graf selama
struktur data untuk memanipulasi himpunan- menambah simpul dan sisi ke dalamnya, struktur
himpunan yang dapat mengetes apakah dua buah data himpunan saling lepas akan sangat efisien [1].
elemen berada pada himpunan yang sama dan
menggabungkan dua buah himpunan tersebut. Asumsikan graf pada mulanya kosong. Setiap kali
Masalah ini dapat diimplementasikan dengan operasi kita menambahkan simpul, kita menggunakan
union dan find. MakeSet untuk membuat himpunan yang
mengandung hanya simpul tersebut. Setiap kali kita
Algoritma 11. Berikut di bawah ini adalah contoh menambahkan sebuah sisi, kita menggunakan Union
pseudocode dari implementasi union untuk menggabungkan himpunan dari dua simpul
find pada kruskal yang terhubung pada sisi tersebut. Sekarang, tiap
himpunan akan mengandung simpul dari komponen
Is si ≡ sj yang saling terkoneksi, dan kita dapat menggunakan
t = Find (si) Find untuk menentukan pada komponen terkoneksi
u = Find (sj) manakah sebuah simpul berada, atau apakah dua
Return (Is t=u?) buah simpul terdapat pada komponen yang sama [1].
Asumsikan kita memiliki graf yang tak berarah dan Contoh yang sangat bagus untuk aplikasi ini adalah
ingin secara efisien menjawab pertanyaan yang relasi ekivalen kongruen modulo 5. Dalam masalah
ini, elemen {0, 5, 10, ...} berada pada kelas
8
ekivalensi yang sama. Representasi umum dari kelas 6.5 Menghitung Garis Pantai Sebuah Daratan
adalah 0. Elemen 7 tidak berada pada himpunan
yang memiliki representasi 0. Ketika menghitung kontur permukaan 3-dimensi,
salah satu langkah pertama yang harus dilakukan
Gambar di bawah adalah contoh lain dari relasi adalah menghitung “garis pantai”. Bayangkan kita
ekivalen yang mengasumsikan pixel sebagai elemen. sedang men-sweeping sebuah model daratan,
menggunakan bidang yang sejajar dengan
“permukaan air laut”, mulai dari dasar daratan
hingga ke puncaknya. Kita akan mendapatkan
sekumpulan garis kontur seiring bergerak ke puncak
daratan tersebut, dilabelkan dengan solusi lokal yang
dimiliki tiap kontur (ketinggian). Pada akhirnya, kita
akan mendapatkan sebuah kontur yang mengandung
seluruh solusi lokal.
Gambar 10. Pewarnaan film tua Dalam perhitungan kimia, tabrakan yang
menyangkut pecahan dari molekul berukuran besar
9
dapat disimulasikan dengan molecular dynamics. menggunakan ekstensi library dari bahasa
Hasil dari tabrakan ini berupa data atom-atom pemrograman modern seperti Standard Template
beserta posisinya. Pada analisisnya, algoritma union- Library milik C++, Java API, dan Microsoft .NET
find dapat digunakan untuk mengklasifikasikan Framework.
atom-atom ini dalam fragmen-fragmen. Tiap atom
diinisialisasi sebagai bagian dari fragmen dirinya Bahan yang paling fundamental dalam pembuatan
sendiri. Pada algoritma Find umumnya akan sebagian besar struktur data adalah larik, records,
mengandung pengecekan jarak antara sepasang discriminated unions, dan references. Sebagai
atom, meskipun kriteria lain seperti electronic contoh nullable reference, merupakan reference
charge yang terjadi antara atom-atom dapat yang dapat berupa null, merupakan kombinasi dari
digunakan. Union menggabungkan dua buah references, dan discriminated unions, dan senarai
fragmen bersama-sama. Pada akhirnya, ukuran dan berantai yang kita kenal, dibangun dari records dan
karakteristik tiap fragmen dapat dianalisis. nullable references.
10