Anda di halaman 1dari 5

3.

5 Analisis Algoritma
Pertama-tama kami membuat perbedaan antara “masalah” dan “contoh masalah”.
Misalnya, mencari hasil perkalian dua bilangan bulat adalah masalah sedangkan menemukan
hasil kali dari dua bilangan bulat yang diberikan adalah turunan dari masalah. Jika
masalahnya mencari produk dari dua matriks n x n adalah contoh dari soal. Di optimasi
jaringan, masalah jarak terpendek adalah masalah menemukan jarak terpendek dari sebuah
simpul ke simpul lainnya dimana simpul dalam jaringan. Contoh masalah ini adalah mencari
jarak terpendek dari simpul ke sisa simpul dalam jaringan tertentu dengan n simpul dan sisi.
Dalam arti in formal dan intuitif, algoritma untuk masalah, seperti yang kita tahu adalah
prosedur, langkah demi langkah yang melibatkan urutan intruksi terbatas yang dapat
digunakan untuk menyelesaikan setiap contoh masalah.
Dalam banyak kasus, adalah mungkin untuk membagi masalah menjadi beberapa
submasalah nonoverlapping yang lebih kecil menyamakan ukuran, selesaikan submasalah
ini, dan gabungkan solusinya untuk mendapatkan solusi dari masalah aslinya. Strategi ini
memecahkan masalah, yang dikenal sebagai teknik bagi-dan-taklukkan, seringkali lebih
efisien dari pada cara langsung biasa metode. Jika f (A, n) adalah kompleksitas komputasi
dari algoritme divide-and-conquer (di mana n adalah ukuran input dari Contoh masalah) kita
memiliki relasi pengulangan yang mengekspresikan f (A, n) dalam istilah f (A, m), di mana m
adalah ukuran input dari sebuah contoh dari submasalah. Dalam menyelesaikan hubungan
perulangan ini menggunakan kondisi awal, kami memperoleh kompleksitas fungsi algoritma.
Sekarang kita mengalihkan perhatian kita pada analisis dari beberapa relasi pengulangan
yang dihasilkan dari hal tersebut algoritma divide-and-conquer.
Contoh: 3.5.1
Jika a dan b adalah dua angka digit n untuk mendapatkan hasil kali ab, kita harus
melakukan paling banyak n2 perkalian satu digit. Dengan kata lain, jika kita menggunakan
algoritma perkalian biasa, kompleksitas komputasinya adalah n2 jika kita mengabaikan nomor
tersebut penjumlahan dan hanya memperhitungkan jumlah perkalian. Kita dapat
menggunakan algoritma divide-andconquer yang lebih efisien untuk mengalikan dua
bilangan sebagai berikut.
Asumsikan n genap. Kemudian a dan b dapat dibagi lagi menjadi dua bagian:
a= a1(10)n/2 + a2
b= a1b1(10)n/2 + b2
dimana bagian-bagiannya a1, a2, b1 dan b2 untuk semua (n/2)-nomor digit. Kemudian
ab= a1b1(10)n + [a1b2+a2b1](10)n/2 + a2b2
Ekspresi di sebelah kanan melibatkan perkalian empat (n / 2) digit. Kita dapat mereduksi ini
menjadi tiga perkalian jika kita gunakan rumusnya
(a1b2 + a2b1 ) = (a1+a2)( b1+b2)-a1b1-a2b2
Jadi kita memiliki relasi perulangan f(n) = 3f(n/2) dengan f(l) = 1. Tentu saja, ada
kemungkinan bahwa (a1 + a2) atau (b1+ b2) mungkin (n/2+1) digit angka, tetapi ini tidak
mempengaruhi pertimbangan kompleksitas. Jika kita menulis n = 2k dalam hubungan
pengulangan, kita dapatkan:
n n
() ( )
f(n) = 3f = 32f 2 =.....=3kf(1) = 3logn= nlog3
2 2
Dengan demikian kompleksitas dari algoritma rekursif ini nlog3, yang kurang dari n2 untuk n≥
1.
Contoh 3.5.2
Selesaikan f(n) = af(n b) + c, f(l) = d, di mana a dan b adalah bilangan bulat yang setidaknya
2, n = bk, dan c adalah konstanta.
Solusi

f(n) = af ( nb )+c = a [ af ( bn )+ c] + c
2

= a2f ( bn )+ c[1+a]
2

.
.
.

= akf( bn ) + c[1+a+a +.....+a


k
2 k-1
]

(a ¿¿ k−1)
= akd + c ¿
a−1
= Aak+B
Dimana A = (ad - d + c)/(a - 1) dan B = (–c)/(a - 1). Karena n = bk, kami memiliki k = logbn
dan ak = nr , dengan r = logba. Jadi f(n) = Anr + B.
Contoh 3.5.3
Selesaikan f(n) = af (n / b) + cn dengan kondisi yang sama seperti pada Contoh 3.5.2.
Solusi dengan iterasi yang kita miliki
a a 2 k−1
a
[ ()
f(n)= akf(1) + cn 1+ +
b b
+… .+
b () ]
Kasus (1): a = b
f(n) = akd + cnk = nd + cn logbn
Jadi f (n) = c (n log n) + d (n) f (n) = c (n log n) + d (n).
Kasus (2): a <b atau a> b. Setelah beberapa penyederhanaan kita mendapatkan f (n) = An r +
Bn, di mana A = (bd - ad - bc) / (b - a) dan B = bc / (b - a) dan r = logba. Jika a <b, maka r <
1, jadi Bn adalah suku yang mendominasi di f (n). Jika a> b, maka r > 1, maka Sebuah r
adalah istilah yang mendominasi di f(n).
Perkalian Matriks
Kami selanjutnya mempertimbangkan efisiensi algoritma perkalian matriks. Seperti
yang kita ketahui sebelumnya, jika A dan B adalah dua matriks 2 × 2, kami biasanya
melakukan setidaknya delapan (23 = 8) perkalian untuk mendapatkan matriks hasil kali C =
AB. Dengan aljabar yang cerdas manipulasi, dimungkinkan untuk mengurangi jumlah
perkalian dari delapan menjadi tujuh. Misalkan a (i, j) menunjukkan elemen dalam A at baris
ke-i dan kolom ke-j; demikian pula untuk B dan C
Sekarang tentukan tujuh produk berikut:
x1 = [a(1, 1) + a(2, 2)] · [b(1, 1) + b(2, 2)]
x2 = [a(2, 1) + a(2, 2)] · b(1, 1)
x3 = a(1, 1) · [b(1, 2) – b(2, 2)]
x4 = a(2, 2) · [b(2, 1) – a(2, 1)]
x5 = [a(1, 1) + a(1, 2)] · b(2, 2)
x6 = [a(2, 1) – a(1, 1)] · [b(1, 1) + b(1, 2)]
x7 = [a(1, 2) – a(2, 2)] · [b(2, 1) + b(2, 2)]
Maka mudah untuk memverifikasi bahwa setiap elemen c (i, j) dari matriks hasil
kali dapat dinyatakan sebagai jumlah atau perbedaan dari beberapa ketujuh angka tersebut
sebagai berikut:
c(1, 1) = x1 + x4 – x5 + x7 c(1, 2) = x3 + x5
c(2, 1) = x2 + x4 c(2, 2) = x1 + x3 – x2 + x6
Jadi kita mendapatkan matriks hasil kali dengan melakukan paling banyak tujuh
perkalian, bukan delapan. Kami menggunakan informasi ini untuk mendefinisikan algoritme
bagi-dan-taklukkan untuk perkalian matriks dan selesaikan relasi pengulangan terkait untuk
mendapatkan kompleksitas komputasi algoritma ini pada contoh berikutnya.
Contoh 3.5.4
Misalkan A dan B adalah dua matriks n × n di mana n = 2 k. Dapatkan algoritme bagi-dan-
taklukkan untuk mendapatkan matriks hasil kali AB dan temukan kompleksitas dari
algoritma ini.
Solusi
Kami mempartisi setiap matriks menjadi empat submatrices dimana setiap
submatrix adalah matriks (n / 2) × (n / 2). Lihat Gambar3.5.1.
Keempat submatrices A adalah: (1) A(l, 1) diperoleh dengan mempertimbangkan n/2 baris
pertama dan n/2 kolom pertama dari A; (2) A (l, 2) diperoleh dengan mempertimbangkan n/2
baris pertama dan n/2 kolom terakhir; (3) A (2, 1) diperoleh dengan mempertimbangkan n/2
baris terakhir dan n/2 kolom pertama; dan (4) A (2, 2) diperoleh dengan mempertimbangkan
n/2 baris terakhir dan n/2 terakhir kolom A; demikian pula untuk B dan C.
Kami sekarang mendefinisikan tujuh submatriks berikut:
X1 = [A(1, 1) + A(2, 2)] · [B(1, 1) + B(2, 2)]
X2 = [A(2, 1) + A(2, 2)] · B(1, 1)
X3 = A(1, 1) · [B(1, 2) – B(2, 2)]
X4 = A(2, 2) · [B(2, 1) – B(1, 1)]
X5 = [A(1, 1) + A(1, 2)] · B(2, 2)
X6 = [A(2, 1) – A(1, 1)] · [B(1, 1) + B(1, 2)]
X7 = [A(1, 2) – A(2, 2)] · [B(2, 1) + B(2, 2)]
Evaluasi Polinomial pada Titik Tertentu
Kami menyimpulkan analisis algoritme kami dengan diskusi tentang jumlah
perkalian dan penambahan yang terlibat untuk mengevaluasi nilai polinomial p (x) untuk nilai
x tertentu. Jika derajat dari p (x) adalah n, mudah untuk melihat bahwa a langsung Evaluasi
nonrecursive dari p (x) pada x = t akan melibatkan (2n - 1) perkalian dan n penjumlahan.
Misalnya, untuk mengevaluasi p (x) =5x3 + 8x2 + 4x + 7 pada x = 27, kami melakukan lima
perkalian (1) a = 27 · 27, (2) b = a · 27, (3) c = 4 · 27, (4) 8 · a, dan (5) 5 · b dan kemudian
tiga penambahan. Metode yang lebih efisien (rekursif) yang dikenal sebagai metode Horner
(atau Newton metode) hanya membutuhkan n perkalian dan n penambahan. Jika kita menulis
polinomial dalam bentuk teleskop sebagai p (x) = (((5 · x +)8) · x) + 4) · x + 7, jumlah
perkaliannya hanya 3.
Contoh 3.5.5 (metode horner)

(a) Jika f (n) adalah jumlah perkalian yang diperlukan untuk mengevaluasi polinomial
derajat n pada suatu titik, dapatkan nilai rekursif hubungan untuk f (n).

(b) Jika g (n) adalah jumlah total perkalian dan penjumlahan, carilah hubungan rekursif
yang melibatkan g (n)

Solusi Jika p (x) adalah polinomial berderajat n, maka p (x) = xq (x) + a, di mana a
adalah konstanta q (x) adalah polinomial dari derajat (n - 1). (a) Evaluasi q (x) pada suatu
titik akan melibatkan perkalian f (n - 1). Jadi f (n) = f (n - 1) + 1, dengan kondisi awal f (0) =
0. Jadi f (n) = n. (b) Jelasnya, g (n) = g (n - 1) + 2 dengan g (0) = 0. Solusinya adalah g (n) =
2n.

Terakhir, kami membahas algoritme rekursif lain untuk evaluasi polinomial, yang
lebih efisien daripada milik Horner metode. [Metode ini dijelaskan secara rinci dalam Baase
(1978).] Pertama definisi dan beberapa sifat polinomial. Sebuah polinomial p (x) disebut
polinomial monik jika koefisien suku utamanya adalah 1. Kita juga mengasumsikan bahwa
derajat n dari p (x) sama dengan 2k - 1. Banyaknya perkalian yang dibutuhkan untuk evaluasi
polinomial untuk p (x) adalah (n - 1) = 2k - 2 kali Metode Horner.

Bisakah kita melakukan lebih baik tentang jumlah perkalian? Sekarang dapat
ditunjukkan bahwa jika p (x) = x n + an-1xn-1 + ·.....+a 1x + a0 adalah sebuah polinomial monik
derajat 2k -1, kita dapat menulis p (x) sebagai p (x) = (x j + b) · q (x) + r (x) di mana (1) baik q
(x) dan r (x) adalah polinomial monik derajat (n - 1) / 2 dan j = (n + 1) / 2, (2) b = aj – 1 - 1,
dan (3) koefisien dari q (x) adalah koefisien pertama (n + 1) / 2 dari p (x), dimulai dari suku
tertinggi. Jika pangkat x hilang, korespondensinya koefisien diambil sebagai nol. Misalnya:

p(x) = x7+ 2x6+2x5+3x4+9x3+9x2+18x+9

Di sini 2k - 1 = 7. Jadi k = 3 dan j = 4. Selain itu, b = a 3 - 1 = 9 - 1 = 8. Jadi p (x) = (x 4 + 8)


q(x) + r (x), di mana q (x) adalah a polinomial derajat 3 yang koefisiennya 1, 2, 2, 3 dimulai
dari suku tertinggi. Dengan kata lain, q(x) = x3 + 2x2 +2x + 3 dan

r(x)=p(x)-(x4+8)q(x)=x3-7x2+2x-15

selanjutnya q(x)=(x2+1)(x+2)+(x+1) dan r(x)=(x2+1)(x-7)+(x-8)

maka didapat p(x)= (x4+8).[ (x2+1).(x+2).(x+1)]+ (x2+1).(x-7)+(x-8)

Yang melibatkan lima perkalian di semua (tiga seperti yang ditunjukkan dengan tanda kurung
dan dua untuk menghitung x2 dan x4). Di sisi lain sebaliknya, jika kita menggunakan metode
Horner, jumlah perkaliannya akan menjadi enam, bukan lima. Pengamatan ini
digeneralisasikan.

Teorema 3.5.1
Misalkan p (x) adalah polinomial monik berderajat n, di mana n = 2k - 1. Maka
jumlah perkalian yang dibutuhkan untuk mengevaluasi p (x) pada suatu titik paling banyak (n
- 3)/2 + log(n+1), dan jumlah penambahan atau substraksi yang dibutuhkan paling banyak
(3n - 1) /2

bukti:

Misalkan n = 2k - 1. Juga misalkan f (k) adalah jumlah perkalian yang diperlukan


untuk mengevaluasi p (x) (tanpa memperhitungkan jumlah perkalian yang diperlukan untuk
menghitung berbagai pangkat x pada titik tertentu), dan misalkan g(k) adalah jumlah
tambahan yang dibutuhkan. Karena p(x) = (xj + b) q(x) + r(x), kita memiliki hubungan
perulangan f (k) = 2f (k - 1) + 1 dengan inisialbersyarat f (1) = 0 dan relasi g (k) = 2g (k - 1)
+ 2 dengan g(1) = 1.

Dalam memecahkan hubungan pengulangan ini, kami punya

n−1 3 n−1
f(k)=2k-1-1= dan g(k)= 3.2k-1-2=
2 2

Selanjutnya kita pertimbangkan jumlah perkalian yang terlibat untuk menghitung


berbagai pangkat x. Kita harus menghitung x2, kemudian x4, lalu x8, dan seterusnya, hingga
kita mencapai pangkat ke-j dari x, di mana j = (n + 1) / 2 = 2 k-1, dan proses ini akan
melibatkan (k- 1) perkalian. Tapi k = log (n + 1). Jadi algoritma ini membutuhkan paling
banyak (n - 1) / 2 + log (n + 1) - 1 = (n / 2) + log (n + 1) -(3/2) perkalian dan (3n - 1) / 2
penjumlahan, sedangkan metode Horner paling banyak membutuhkan (n - 1) perkalian dan n
tambahan.

Anda mungkin juga menyukai