Algoritma dan Kompleksitas
Dalam masalah komputasi, ada banyak persoalan yang harus dicari penyelesaiannya. Misalnya, diketahui suatu barisan integer, masalah yang mungkin terjadi misalnya adalah bagaimana mencari nilai terbesarnya, mengurutkan dengan aturan tertentu atau mugkin mencari nilai tertentu pada barisan tersebut. Hal demikian memerlukan prosedur yang meliputi serangkaian langkah yang akan memandu pada jawaban persoalan tersebut.Contoh 1
Gambarkan suatu algoritma untuk mencari nilai terbesar dalam suatu barisan berhingga bilangan integer.- Tetapkan suku pertama barisan tersebut sebagai maksimum sementara.
- Bandingkan integer berikutnya dalam barisan tersebut dengan maksimum sementara. Jika suku tersebut lebih besar dari maksimum sementara, tetapkan suku tersebut sebagai maksimum sementara.
- Ulangi langkah sebelumnya jika masih ada integer pada barisan tersebut.
- Hentikan jika tidak ada lagi integer pada barisan tersebut. Maksimum sementara pada langkah ini merupakan nilai terbesar dalam barisan tersebut.
- Input. Setiap algoritma memiliki nilai input tertentu.
- Output. Dari setiap nilai input, algoritma menghasilkan nilai output. Output ini merupakan penyelesaian masalah.
- Ketertentuan. Langkah-langkah dalam suatu algoritma harus ditentukan secara teliti.
- Correctness. Suatu algoritma harus menghasilkan output yang benar untuk setiap nilai input.
- Keberhinggaan. Suatu algoritma harus menghasilan output yang diinginkan setelah sejumlah berhingga langkah.
- Keefektifan. Setiap langkah dalam algoritma harus mungkin untuk dijalankan dalam jangka waktu berhingga.
- Perumuman. Prosedur seharusnya dapat diterapkan pada semua persoalan yang dikehendaki, bukan hanya pada nilai input tertentu saja.
Pencarian
Persoalan mencari elemen dalam daftar terurut terjadi dalam banyak hal. Persoalan pencarian secara umum dapat dideskripsikan sebagai berikut: Mencari elemen $x$ di dalam suatu daftar elemen-elemen berbeda $a_1, a_2, \cdots,a_n$, atau menetapkan bahwa elemen $x$ tersebut tidak ada di dalam daftar. Penyelesaian untuk persoalan ini adalah lokasi suku di dalam daftar tersebut yang sama dengan $x$ (yaitu $i$ adalah penyelesaian jika $x=a_i$), dan menetapkan $0$ jika $x$ tidak terdapat di dalam daftar tersebut.Algortima pencarian linear
Algoritma pencarian linear dimulai dengan membandingkan $x$ dan $a_1$. Jika $x=a_1$, maka penyelesaiannya adalah lokasi $a_1$, yaitu $1$. Jika $x\neq a_1$, bandingkan $x$ dengan $a_2$. Jika $x=a_2$, penyelesainnya adalah lokasi $a_2$ yaitu $2$. Jika $x \neq a_2$, bandingkan $x$ dengan $a_3$. Lanjutkan proses pembandingan $x$ dengan suku selanjutnya sampai kesamaan dicapai. Jika semua daftar telah dibandingkan nemun tidak ada yang sama dengan $x$, penyelesainnya adalah $0$.
Algoritma pencarian biner
Algoritma pencarian biner dimulai dengan membandingkan unsur yang lokasinya di tengah daftar. Daftar tersebut dibelah menjadi dua subdaftar yang lebih kecil berukuran sama, atau salah satu subdaftar lebih sedikit elemennya dari subdaftar lainnya. Pencarian dibatasi pada sub daftar yang sesuai berdasarkan hasil pembandingan suku yang berlikasi di tengah.Contoh 2
Akan dicari nilai $19$ pada daftar berikut: \[ 1\quad 2 \quad 3 \quad 5 \quad 6 \quad 7 \quad 8 \quad 10 \quad 12 \quad 13 \quad 15 \quad 16 \quad 18 \quad 19 \quad 20 \quad 22.\] Daftar di atas terlebih dahulu dijadikan dua kelompok masing-masing delapan suku, yaitu \[ 1\quad 2 \quad 3 \quad 5 \quad 6 \quad 7 \quad 8 \quad 10 \qquad \text{dan} \qquad 12 \quad 13 \quad 15 \quad 16 \quad 18 \quad 19 \quad 20 \quad 22.\] Kemudian bandingkan $19$ dan suku terbesar di dalam daftar pertama. Karena $10 < 19$, pencarian $19$ dapat dibatasi pada daftar yanag berisi suku ke-$9$ sampai dengan ke-$16$. Selanjutnya kelompokan daftar ini menjadi dua masing-masing memuat empat suku, yaitu \[ 12 \quad 13 \quad 15 \quad 16 \qquad \text{dan} \qquad 18 \quad 19 \quad 20 \quad 22.\] Karena $16 < 19$, pencarian dibatasi pada dafar kedua yang berisi suku ke-$13$ sampai dengan ke-$16$. Selanjutnya daftar ini dikelompokan menjadi dua, yaitu \[ 18 \quad 19 \qquad \text{dan} \qquad 20 \quad 22.\] Karena $19$ tidak lebih besar dibanding suku terbesar pada daftar pertama, (yang juga $19$), pencarian dibatasi pada daftar $18 \quad 19$, yang memuat suku ke-$13$ dan ke-$14$ dari daftar asli. Selanjutnya daftar terakhir dibagi dua, yaitu \[ 18 \quad \text{dan} \quad 19.\] Karena $18< 19$, pencarian dibatasi pada daftar kedua yang memat suku ke-$14$ dari daftar asli, yaitu $19$. Sekarang pencarian telah menyempit menjadi satu suku. Selanjutnya dilakukan pembandingan dan $19$ berlokasi pada suku ke-$14$ dari daftar asli.
Pengurutan
Misalkan suatu daftar elemen akan diurutkan. Pengurutan ( sorting) adalah meletakan elemen-elemen sehingga menjadi daftar yang elemen-elemen dalam urutan naik. Misalnya $7,2,8,3,5$ menjadi $2,3,5,7,8$, daftar $c,f,e,d,a$ menjadi $a,c,d,e,f$.
Contoh 3
Gunakan bubble sort untuk mengurutkan daftar $3,2,4,1,5$.|
Langkah-1:
$\overleftrightarrow{3 \quad 2} \quad 4 \quad 1 \quad 5$ $2\quad \overline{3 \quad 4} \quad1 \quad 5$ $2\quad 3 \quad \overleftrightarrow{4 \quad 1}\quad 5$ $2 \quad 3 \quad 1 \quad \overline{4 \quad 5} \quad$ |
Langkah-2:
$\overline{2 \quad 3} \quad 1 \quad 4 \quad 5$ $2 \quad \overleftrightarrow{3 \quad 1} \quad 4 \quad 5$ $2 \quad 1 \quad 3\quad \overline{4 \quad 5} \quad$ |
Langkah-3:
$\overleftrightarrow{2 \quad 1} \quad 3 \quad 4 \quad 5$ $1 \quad \overline{2 \quad 3}\quad 4 \quad 5 \quad$ |
Langkah-4:
$\overline{1 \quad 2} \quad 3 \quad 4 \quad 5$ |
Contoh 4
Urutkan daftar $3 \quad 2 \quad 4 \quad 1 \quad 5$ dalam urutan naik.Pertumbuhan fungsi dan kompleksitas algoritma
Suatu persoalan seringkali memiliki lebih dari satu cara pnyelesaian. Pilihan algoritma untuk memperoleh output jawaban suatu persoalan tergantung pada "efisiensi" dan "kompleksitas" algoritma.Diberikan fungsi $f$ dan $g$. Fungsi $f(x)$ adalah $O(g(x))$ jika terdapat konstanta $C$ dan $k$ sehingga \[ |f(x)|\le C|g(x)| \] jika $x>k$.
Contoh 5
Tunjukkan bahwa $f(x)=x^2+2x+1$ adalah $O(x^2)$.Diberikan fungsi $f$ dan $g$. Fungsi $f(x) \in \Omega(g(x))$ jika terdapat konstanta $C$ dan $k$ sehingga \[ |f(x)|\ge C|g(x)| \] dimana $x>k$.
Contoh 6
Fungsi $f(x)=8x^3+5x^2+7$ adalah $\Omega(g(x))$ dengan $g(x)=x^3$. Hal ini karena $f(x)=8x^3+5x^2+7\ge 8x^3$ untuk semua $x>0$.Diberikan fungsi $f$ dan $g$. Dikatakan $f(x)$ adalah $\Theta(g(x))$ jika $f(x)$ adalah $O(g(x))$ dan $f(x)$ adalah $\Omega(g(x))$. Jika $f(x)$ adalah $\Theta(g(x))$ maka $f(x)$ dan $g(x)$ dikatakan berorde sama.
Contoh 7
Tunjukkan bahwa fungsi $f(n)=1+2+3+\cdots + n$ adalah $\Theta(n^2)$.Contoh 8
Di dalam algoritma sorting dan searching, dilakukan penghitungan banyaknya pembandingan. Di dalam algoritma aritmetika, dihitung perkalian dan penjumlahan.- Kasus terburuk, yaitu nilai maksimum $f (n)$ untuk setiap input yang mungkin.
- Kasus rata-rata, yaitu nilai yang diharapkan dari $f (n)$.
| $n$ | $\log{n}$ | $n$ | $n\log{n}$ | $n^2$ | $n^3$ | $2^n$ |
|---|---|---|---|---|---|---|
| 5 | 3 | 5 | 15 | 25 | 125 | 32 |
| 10 | 4 | 10 | 40 | 100 | $10^3$ | $10^3$ |
| 100 | 7 | 100 | 700 | $10^4$ | $10^6$ | $10^{30}$ |
| 1000 | 10 | $10^3$ | $10^4$ | $10^6$ | $10^9$ | $10^{300}$ |
Contoh 9
Gambarkan bagaimana kompleksitas algoritma untuk mencari nilai maksimum dari sejumlah berhingga integer.Terminologi
| Kompleksitas | Terminologi |
|---|---|
| $\Theta(1)$ | Kompleksitas konstan |
| $\Theta(\log{n})$ | Kompleksitas logaritma |
| $\Theta(n)$ | Kompleksitas linear |
| $\Theta(n\log{n})$ | Kompleksitas lineararitmetik |
| $\Theta(n^b)$ | Kompleksitas Polinomial |
| $\Theta(n^b), \; b>1$ | Kompleksitas eksponensial |
| $\Theta(n!)$ | Kompleksitas faktorial |