2. Algoritma, Kompleksitas dan Teori Bilangan

dokumen-dokumen yang mirip
CHAPTER 3 ALGORITHMS 3.1 ALGORITHMS

Matematika Diskrit. Reza Pulungan. March 31, Jurusan Ilmu Komputer Universitas Gadjah Mada Yogyakarta

R. Rosnawati Jurusan Pendidikan Matematika FMIPA UNY

II. TINJAUAN PUSTAKA. Pada bab ini akan dibahas konsep-konsep yang mendasari konsep representasi

II. TINJAUAN PUSTAKA. bilangan yang mendukung proses penelitian. Dalam penyelesaian bilangan

II. TINJAUAN PUSTAKA. Pada bab ini akan diberikan konsep dasar (pengertian) tentang bilangan sempurna,

BAB 2 LANDASAN TEORI

TINJAUAN PUSTAKA. Pada bab ini akan diberikan beberapa definisi teori pendukung dalam proses

Teori Bilangan (Number Theory)

LANDASAN TEORI. bilangan coprima, bilangan kuadrat sempurna (perfect square), kuadrat bebas

2 BILANGAN PRIMA. 2.1 Teorema Fundamental Aritmatika

Pengantar Teori Bilangan

II. TINJAUAN PUSTAKA. Pada bab ini akan diberikan konsep dasar (pengertian) tentang bilangan sempurna,

ALGORITMA DAN BILANGAN BULAT

Pendahuluan. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien.

8 MATRIKS DAN DETERMINAN

Bab 2. Teori Dasar. 2.1 Definisi Graf

Penyelesaian Persamaan Linear Dalam Bentuk Kongruen

BAB 2 LANDASAN TEORI

BAB II KETERBAGIAN. 1. Mahasiswa bisa memahami pengertian keterbagian. 2. Mahasiswa bisa mengidentifikasi bilangan prima

Bilangan Prima dan Teorema Fundamental Aritmatika

Kompleksitas Algoritma

II. TINJAUAN PUSTAKA. Pada bagian ini diterangkan materi yang berkaitan dengan penelitian, diantaranya konsep

BAB I INDUKSI MATEMATIKA

1 TEORI KETERBAGIAN. Jadi himpunan bilangan asli dapat disajikan secara eksplisit N = { 1, 2, 3, }. Himpunan bilangan bulat Z didenisikan sebagai

STRATEGI DIVIDE AND CONQUER

Manusia itu seperti pensil Pensil setiap hari diraut sehingga yang tersisa tinggal catatan yang dituliskannya. Manusia setiap hari diraut oleh rautan

Lembar Kerja Mahasiswa 1: Teori Bilangan

II. M A T R I K S ... A... Contoh II.1 : Macam-macam ukuran matriks 2 A. 1 3 Matrik A berukuran 3 x 1. Matriks B berukuran 1 x 3

n suku Jadi himpunan bilangan asli dapat disajikan secara eksplisit N = { 1, 2, 3, }. Himpunan bilangan bulat Z didenisikan sebagai

TEORI BILANGAN Setelah mempelajari modul ini diharapakan kamu bisa :

Bundel Soal. Elektroteknik. Semester 3 Tahun 2013/2014. tambahan Matematika Diskrit (ET 2012)

PEMBINAAN TAHAP I CALON SISWA INVITATIONAL WORLD YOUTH MATHEMATICS INTERCITY COMPETITION (IWYMIC) 2010 MODUL BILANGAN

Matematika Diskrit Kompleksitas Algoritma. Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

BAB III PENGEMBANGAN TEOREMA DAN PERANCANGAN PROGRAM

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

Kompleksitas Algoritma

TEORI BILANGAN. Bilangan Bulat Bilangan bulat adalah bilangan yang tidak mempunyai pecahan desimal, misalnya 8, 21, 8765, -34, 0.

GLOSSARIUM. A Akar kuadrat

Nama Mata Kuliah : Teori Bilangan Kode Mata Kuliah/SKS : MAT- / 2 SKS

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

G a a = e = a a. b. Berdasarkan Contoh 1.2 bagian b diperoleh himpunan semua bilangan bulat Z. merupakan grup terhadap penjumlahan bilangan.

STRUKTUR ALJABAR: GRUP

Diktat Kuliah. Oleh:

II. TINJAUAN PUSTAKA. terkait dengan pokok bahasan. Berikut ini diberikan pengertian-pengertian dasar

BAB 2 LANDASAN TEORI. Universitas Sumatera Utara

MODUL PERSIAPAN OLIMPIADE. Oleh: MUSTHOFA

Algoritma Brute Force

BAB VII ALGORITMA DIVIDE AND CONQUER

Kompleksitas Algoritma

JURUSAN PENDIDIKAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS NEGERI YOGYAKARTA

Matriks. Matriks adalah adalah susunan skalar elemen-elemen dalam bentuk baris dan kolom.

Pertemuan 2 Matriks, part 2

BAB III HASIL DAN PEMBAHASAN

Materi Pembinaan Olimpiade SMA I MAGELANG TEORI BILANGAN

Disajikan pada Pelatihan TOT untuk guru-guru SMA di Kabupaten Bantul

BAB II TEORI DASAR. untuk setiap e G. 4. G mengandung balikan. Untuk setiap a G, terdapat b G sehingga a b =

BAB II TINJAUAN PUSTAKA

BAB 2 LANDASAN TEORI

Pemfaktoran prima (2)

BAB III ANALISIS KOMPLEKSITAS ALGORITMA

Setelah mengikuti materi Bab ini mahasiswa diharapkan mampu: 2. Mendefinisikan factor persekutuan, kelipatan persekutuan, FPB, dan KPK.

WORKSHOP DAN PELATIHAN MATLAB : PENUNJANG PEMBELAJARAN MATEMATIKA DI SMU DALAM RANGKA IMPLEMENTASI CONTEXTUAL TEACHING LEARNING ABSTRAK

SEKILAS TENTANG KONSEP. dengan grup faktor, dan masih banyak lagi. Oleh karenanya sebelum

SISTEM PERSAMAAN LINEAR

Pertemuan Ke 2 SISTEM PERSAMAAN LINEAR (SPL) By SUTOYO,ST.,MT

BAB MATRIKS. Tujuan Pembelajaran. Pengantar

BAB 4 : SISTEM PERSAMAAN LINIER

Part II SPL Homogen Matriks

ALJABAR LINIER MAYDA WARUNI K, ST, MT ALJABAR LINIER (I)

MAKALAH KRIPTOGRAFI CHINESE REMAINDER

Sieve of Eratosthenes dan Aplikasinya Dalam Problem Solving

Arief Ikhwan Wicaksono, S.Kom, M.Cs

DIKTAT KULIAH (2 sks) MX 127 Teori Bilangan

PENYELESAIAN SISTEM PERSAMAAN LINEAR DUA SISI DALAM ALJABAR MAX-PLUS BILANGAN FUZZY

II. TINJAUAN PUSTAKA. negatifnya. Yang termasuk dalam bilangan cacah yaitu 0,1,2,3,4, sehingga

Kompleksitas Algoritma

BAB 2 : DETERMINAN. 2. Tentukan banyaknya permutasi dari himpunan bilangan bulat {1, 2, 3, 4}

Matriks - 1: Beberapa Definisi Dasar Latihan Aljabar Matriks

BAB I PENDAHULUAN. Penyampaian pesan dapat dilakukan dengan media telephone, handphone,

ARSITEKTUR SISTEM KOMPUTER. Wayan Suparta, PhD April 2018

BAB 2 LANDASAN TEORI. Pada bab ini dibahas landasan teori yang akan digunakan untuk menentukan ciri-ciri dari polinomial permutasi atas finite field.

Matriks. Modul 1 PENDAHULUAN

Software yang digunakan yaitu: 1. Sistem Operasi Windows 7 2. Bloodshed Dev-C Notepad++ 4. Winmerge

Operasi Pada Matriks a. Penjumlahan pada Matriks ( berlaku untuk matriks matriks yang berukuran sama ). Jika A = a ij. maka matriks A = ( a ij)

DAFTAR ISI 3 TEORI KONGRUENSI 39 4 TEOREMA FERMAT DAN WILSON 40

BILANGAN CACAH. b. Langkah 1: Jumlahkan angka satuan (4 + 1 = 5). tulis 5. Langkah 2: Jumlahkan angka puluhan (3 + 5 = 8), tulis 8.

Aljabar Linier Elementer. Kuliah 1 dan 2

Bagian 2 Matriks dan Determinan

3 TEORI KONGRUENSI. Contoh 3.1. Misalkan hari ini adalah Sabtu, hari apa setelah 100 hari dari sekarang?

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

ALJABAR ABSTRAK ( TEORI GRUP DAN TEORI RING ) Dr. Adi Setiawan, M. Sc

TEORI BILANGAN (3 SKS)

BAB 1. PENDAHULUAN KALKULUS

ALJABAR LINIER DAN MATRIKS

MATRIKS. Notasi yang digunakan NOTASI MATRIKS

Relasi dan Fungsi. Program Studi Teknik Informatika FTI-ITP

Analisis Algoritm. Fundamentals of the Anlysis of Algorithm Efficiency

LEMBAR AKTIVITAS SISWA MATRIKS

Pengantar Teori Bilangan

Transkripsi:

2. Algoritma, Kompleksitas dan Teori Bilangan 2.1 Algoritma dan Fungsi Kompleksitas Algoritma adalah sekumpulan berhingga dari instruksi-instruksi untuk melakukan perhitungan/ komputasi atau memecahkan suatu masalah. Suatu algoritma yang baik harus memiliki sifat-sifat berikut ini: Masukan (input) dari himpunan tertentu Keluaran (output) pada himpunan tertentu (solusi) Definiteness dari setiap langkah perhitungan Kebenaran (correctness) dari keluaran untuk setiap masukan yang mungkin Keberhinggaan (finiteness) dari banyaknya langkah perhitungan Kefektifan (effectiveness) dari setiap langkah perhitungan dan Keterumuman (generality) dalam suatu kelompok permasalahan yang dipecahkan Kita akan memakai pseudocode untuk menuliskan algoritma, yang mirip dengan bahasa Pascal. Sebagai contoh pertama, tinjau algoritma mencari nilai maksimum dari suatu barisan yang panjangnya berhingga berikut ini. procedure max(a 1, a 2,, a n : integers) max := a 1 for i := 2 to n if max < a i then max := a i {max adalah elemen terbesar dalam barisan} Dari masukan barisan a 1, a 2,..., pertama-tama variabel max di-inisiasi dengan suku pertama barisan. Selanjutnya suku-suku berikutnya diambil dan dibandingkan dengan max, jika lebih besar maka nila lama max diganti dengan nilai baru yaitu suku sekarang, sedangkan jika (sama atau lebih kecil), algoritma mengambil suku berikutnya demikian seterusnya. Diakhir proses, suku terbesar dari barisan akan tertampung di dalam max. 2. Algoritma, Kompleksitas dan Teori Bilangan - 1

Contoh kedua adalah algoritma pencarian linier (linear search), yaitu algoritma yang mencari elemen tertentu dari barisan berhingga secara linier. procedure linear_search(x: integer; a 1, a 2,, a n : integers) i := 1 while (i n and x a i ) i := i + 1 if i n then location := i else location := 0 {letak dari elemen yang dicari adalah subscript dari suku yang sama dengan x, atau nol jika tidak ditemukan.} Pada algoritma pencarian linier, pertama-tama pencacah indeks i di-inisiasi ke harga 1. Selanjutnya suku barisan diambil satu persatu secara ber-urutan dan dibandingkan dengan bilangan yang dicari, yaitu x. Jika ditemukan, maka variable location di-assign dengan indeks dari suku tersebut, sedangkan jika tidak ditemukan, maka variable tersebut diberi harga nol. Eksekusi berakhir setelah ujung barisan dicapai, dengan variable location berisi indeks suku barisan yang dicari atau berisi nol jika tidak ditemukan. Pencarian yang demikian tentu saja akan memakan waktu yang sebanding dengan panjangnya barisan sehingga tidak efisien atau disebut bahwa kompleksitas algoritma ini besar. Interval-2 Interval-3 Interval-1 a c d f g h j l m o p r s u v x z pusat kedua pusat pertama pusat ketiga, KETEMU! Gb. 2.1 Ilustrai algoritma pencarian biner 2. Algoritma, Kompleksitas dan Teori Bilangan - 2

Kompleksitas bisa diturunkan jika dipakai teknik pencarian biner (binary search), akan tetapi masukannya harus terlebih dahulu diurutkan (ordered). Dalam pencarian biner, algoritma secara iteratif membatasi interval pencarian yang relevan hingga mendekati posisi suku barisan yang dicari. Berikut ini ilustrasi pencarian biner untuk huruf j Algoritma dalam bentuk pseudocode dari pencarian biner adalah sebagai berikut. procedure binary_search(x: integer; a 1, a 2,, a n : integers) i := 1 {i is left endpoint of search interval} j := n {j is right endpoint of search interval} while (i < j) begin m := (i + j)/2 if x > am then i := m + 1 else j := m end if x = ai then location := i else location := 0 {letak dari elemen yang dicari adalah subscript dari suku yang sama dengan x, atau nol jika tidak ditemukan.} Jelas bahwa dalam barisan yang terurut, pencarian biner lebih efisien daripada pencarian liniar. Selanjutnya muncul pertanyaan bagaimana cara menganalisa efisiensi dari suatu algoritma? Kita dapat mengukur efisiensi ini dengan Waktu (time): yakni banyaknya komputasi elementer dalam algoritma Ruang (space): adalah banyaknya sel memori yang dibutuhkan oleh algoritma. Ukuran ini secara berturut-turut disebut sebagai kompleksitas komputasi (computational complexity) dan kompleklsitas ruang (space complexity). Berapakah kompleksitas waktu dari algoritma pencarian linier? Kita akan menentukan banyaknya proses perbandingan pada kasus terburuk (worst-case) sebagai fungsi dari panjang barisan n. Kasus terburuk dari algoritma pencarian linier muncul ketika elemen yang dicari 2. Algoritma, Kompleksitas dan Teori Bilangan - 3

ternyata tidak ada didalam barisan masukan. Pada kasus tersebut, setiap suku dalam barisan akan dibandingkan dengan elemen yang dicari. Sehingga, untuk n buah elemen, loop while (i n and x ai) i := i + 1 dilaksanakan n kali, sehingga memerlukan 2n buah proses perbandingan. Saat memasuki loop ke (n+1) kalinya, yang dieksekusi hanyalah perbandingan i n dan loop diakhiri. Akhirnya perbandingan if i n then location := i dieksekusi, sehingga pada kasus terburuk kompleksitas waktu adalah 2n + 2. Ini adalah nilai kompleksitas dari algoritma pencarian linier. Selanjutnya, berapakah kompleksitas waktu dari algoritma pencarian biner? Sekali lagi kita akan menentukan jumlah perbandingan pada kondisi terburuk sebagai fungsi dari banyaknya suku dalam deretan n. Kita asumsikan terdapat n=2k buah elemen di dalam barisan yang berarti bahwa k = log(n). Jika n bukan pangkat 2 dari suatu bilangan, barisan tersebut dapat dianggap sebagai bagian dari barisan lain yang lebih besar, dimana 2k<n<2k+1. Pada siklus pertama dari loop while (i < j) begin m := (i + j)/2 if x > am then i := m + 1 else j := m end interval pencarian dibatasi pada (2 k 1) buah elemen, menggunakan dua operasi perbandingan. Pada siklus kedua, interval pencarian dibatasi pada sejumlah 2 k-2 elemen, sekali lagi dengan dua buah perbandingan. Proses ini diulangi terus hingga terdapat hanya satu buah (=2 0 ) 2. Algoritma, Kompleksitas dan Teori Bilangan - 4

elemen tersisa dalam interval pencarian. Pada kondisi ini, sejumlah 2k perbandingan telah dilakukan. Kemudian, dilakukan perbandingan: while (i < j). Setelah itu keluar dari loop dan perbandingan akhir adalah if x = a i then location := i Menentukan apakah elemen yang dicari sudah ketemu. Dengan demikian, total dari kompleksitas waktu untuk algoritma pencarian biner adalah 2k + 2 = 2 log(n) + 2. (NB: kita selalu mengasumsikan logaritma basis dua). Pada umumnya, untuk input yang kecil, kita tidak tertarik pada kompleksitas ruang maupun waktu. Perbedaan kompleksitas waktu untuk pencarian linier dengan pencarian biner tidak begitu berarti untuk n=10, tetapi sangat signifikan untuk n = 2 30. Misalkan, ada dua buah algoritma, sebut sebagai algoritma A dan algoritma B yang dapat memecahkan suatu kelas permasalahan. Kompleksitas waktu dari algoritma A adalah 5000n sedangkan kompleksitas dari algoritm B adalah 1.1 n untuk masukan n buah elemen (barisan). Sekarang kita perhatikan perbandingan kompleksitas waktu dari algoritma A dan B sebagai berikut: Besarnya masukan Kompleksitas algoritma-a Kompleksitas algoritma-b n 5000n 1.1 n 10 50.000 3 100 500.000 13.781 1.000 5.000.000 2.5 10 41 1000.000 5 10 9 4,8 10 41392 Ini berarti bahwa algoritma B tidak dapat dipakai untuk masukan dengan elemen yang besar, sedangkan dengan algoritma A, hal ini masih bisa diatasi. Jadi, yang paling penting dalam menghitung kompleksitas suatu algoritma adalah pertumbuhan dari fungsi kompleksitas. Pertumbuhan dari kompleksitas dengan meningkatnya besarnya masukan, n, adalah ukuran yang sesuai untuk membandingkan algoritma. Pertumbuhan fungsi kompleksitas dilambangkan dengan notasi O (dibaca big-o). Perhatikan definisi berikut ini. 2. Algoritma, Kompleksitas dan Teori Bilangan - 5

Definisi: Misalkan f dan g adalah dua buah fungsi dari bilangan bulat ke bilangan riil. Kita katakan bahwa f(x) adalah O(g(x)) jika ada suatu konstanta C dan k sedemikian hingga f(x) C g(x), saat x > k. Saat menganalisa perumbuhan dari fungsi kompleksitas, f(x) dan g(x) selalu positif. Oleh karena itu, kita dapat menyederhanakan persyaratan big-o menjadi f(x) C g(x) saat x > k. Jika kita ingin menunjukkan bahwa f(x) adalah O(g(x)), kita hanya perlu menentukan satu buah pasangan (C, k) (yang tidak pernah unik). Ide dibelakang notasi big-o adalah penentuan batas atas (upper boundary) dari perumbuhan suatu fungsi f(x) untuk x besar. Batas ini diberikan oleh fungsi g(x) yang biasanya jauh lebih sederhana daripada f(x). Kita menerima konstanta C dalam persyaratan f(x) C g(x) saat x > k. karena C tidak pernah tumbuh sejalan dengan tumbuhnya x. Kita hanya tertarik pada x besar, sehingga jika f(x) > C g(x) untuk x k, bukanlah suatu masalah. Perhatikan contoh soal berikut. Soal: Tunjukkan bahwa f(x) = x 2 + 2x + 1 adalah O(x 2 ). Jawab: Untuk x > 1: x 2 + 2x + 1 x 2 + 2x 2 + x 2 x 2 + 2x + 1 4 x 2 Karena itu, untuk C = 4 dan k = 1: f(x) C x 2 ketika x > k. f(x) adalah O(x 2 ). Selanjutnya mungkin timbul pertanyaan: jika f(x) adalah O(x 2 ), apakah f(x) juga O(x 3 )?. Jawabnya adalah ya, karena x 3 tumbuh lebih cepat daripada x 2, sehingga x 3 juga tumbuh lebih cepat dibandingkan dengan f(x). Karena itu, kita selalu harus menemukan fungsi sederhana terkecil g(x) dimana f(x) adalah O(g(x)). 2. Algoritma, Kompleksitas dan Teori Bilangan - 6

Fungsi-fungsi g(n) yang populer adalah: n log(n), 1, 2 n, n 2, n!, n, n 3, log(n). Jika diurutkan dari yang pertumbuhannya paling lambat ke paling cepat, kita dapatkan daftar berikut: 1 log(n) n n log(n) n 2 n 3 2 n n! Permasalahan yang dapat dipecahkan dengan kompleksitas pada kondisi-terburuk berbentuk polinomial (polynomial worst-case) disebut sebagai permasalahan yang tractable. Permasalahan dengan kompleksitas yang lebih tinggi dari bentuk fungsi polynomial disebut sebagai intractable. Sedangkan permasalahan yang tidak dapat dipecahkan dengan algoritma apapun disebut sebagai unsolvable. Berikut ini beberapa aturan yang berguna untuk big-o. Untuk sebarang polinomial f(x) = a n x n + a n-1 x n-1 + + a 0, dimana a 0, a 1,, a n bilangan riil, maka f(x) adalah O(x n ). Jika f 1 (x) adalah O(g 1 (x)) dan f 2 (x) adalah O(g 2 (x)), maka (f 1 +f 2 )(x) adalah O(max(g 1 (x), g 2 (x))) Jika f 1 (x) adalah O(g(x)) dan f 2 (x) adalah O(g(x)), maka (f 1 + f 2 )(x) adalah O(g(x)). Jika f 1 (x) adalah O(g 1 (x)) dan f 2 (x) adalah O(g 2 (x)), maka (f 1 f 2 )(x) adalah O(g 1 (x)g 2 (x)). Perhatikan contoh permasalahan kompleksitas berikut ini. Apakah yang dikerjakan algoritma berikut ini? procedure who_knows(a 1, a 2,, a n : integers) m := 0 for i := 1 to n-1 for j := i + 1 to n if a i a j > m then m := a i a j 2. Algoritma, Kompleksitas dan Teori Bilangan - 7

{m adalah beda maksimum sebarang dua bilangan dari deretan masukan} Proses perbandingan dalam algoritma ini dilakukan sebanyak: n-1 + n-2 + n-3 + + 1= (n 1)n/2 = 0.5n 2 0.5n Dengan demikian, besarnya kompleksitas waktu dari algoritma ini adalah O(n 2 ). Selanjutnya bandingkan dengan algoritma berikut ini yang juga memecahkan masalah yang sama! procedure max_diff(a 1, a 2,, a n : integers) min := a 1 max := a 1 for i := 2 to n if a i < min then min := a i else if a i > max then max := a i m := max min Dalam algoritma ini, proses perbandingan dilakukan sebanyak 2n 2. Dengan demikian, besarnya kompleksitas waktu dari algoritma ini adalah O(n). Terlihat bahwa untuk mengerjakan hal yang sama, dua buah algoritma berbeda bisa memiliki kompleksitas yang jauh berbeda. 2.2 Teori Bilangan Yang dimaksud dengan teori bilangan dalam Matematika Diskrit adalah teori mengenai bilangan bulat dan sifat-sifatnya. Pada bagian ini akan dijelaskan prinsip-prinsip teori bilangan, meliputi : Keterbagian (divisibility) Pembagi persekutuan terbesar (greatest common divisors/gcd) Kelipatan persekutuan terkecil (least common multiples/lcm), dan Aritmetika modular (modular arithmetics) 2. Algoritma, Kompleksitas dan Teori Bilangan - 8

dan beberapa algoritma terkait. Jika a dan b bilangan bulat dimana a 0, dikatakan a membagi b (a divides b) jika ada bilangan bulat c sedemikian hingga b = ac. Jika a membagi b, maka a disebut sebagai faktor (factor) dari b, dan b adalah kelipatan (multiple) dari a. Penulisan a b dibaca sebagai a membagi b, dan notasi a / bilangan-bilangan bulat a, b, dan c akan berlaku hal hal berikut ini: jika a b dan a c, maka a (b + c). Contoh: 3 6 dan 3 9, maka 3 15. b berarti a tidak membagi b. Untuk jika a b, maka a bc untuk sebarang bilangan bulat c. Contoh: 5 10, jadi 5 20, 5 30, jika a b dan b c, maka a c. Contoh: 4 8 dan 8 24, maka 4 24. Suatu bilangan bulat positif p yang lebih besar dari satu disebut sebagai bilangan prima jika faktor positif dari p hanyalah 1 dan p. Bilangan bulat positif lebih besar dari 1 yang bukan bilangan prima disebut sebagai bilangan komposit. Teorema Fundamental Aritmetika. Setiap bilangan bulat positif bisa dituliskan secara unik sebagai hasil perkalian dari bilangan-bilangan prima, yang actor primanya bisa dituliskan secara meningkat berurutan. Berikut ini contoh dari teorema tersebut: 15 = 3 5 48 = 2 2 2 2 3 = 2 4 3 17 = 17 100 = 2 2 5 5 = 2 2 5 5 512 = 2 2 2 2 2 2 2 2 2 = 2 9 515 = 5 103 28 = 2 2 7 = 2 2 7 Jika n sebuah bilangan bulat komposit, maka n memiliki pembagi prima yang kurang dari atau sama dengan n. Pemikiran: jika n komposit, maka n memiliki dua buah pembagi p 1 dan p 2 sedemikian hingga p 1 p 2 = n dan p 1 2 dan p 2 2. Tetapi p 1 dan p 2 tidak dapat sekaligus lebih besar dari n sebab jika demikian maka p 1 p 2 akan menjadi lebih besar dari n. Jika bilangan p 1 dan p 2 sendiri bukan bilangan prima, maka kedua bilangan tersebut dapat diuraikan kedalam faktor prima yang lebih kecil dari dirinya sendiri tetapi 2. 2. Algoritma, Kompleksitas dan Teori Bilangan - 9

Andaikan a suatu bilangan bulat dan d suatu bilangan bulat positif. Maka ada bilangan bulat q dan r yang unik, dimana 0 r < d, sedemikian hingga a = d q + r. Dalam persamaan ini : d disebut sebagai pembagi (divisor) a disebut sebagai deviden(dividend) q disebut sebagai kosien (quotient) dan r disebut sebagai sisa pembagian (remainder). Contoh: Jika 17 dibagi dengan 5, maka akan diperoleh 17 = 5 3 + 2. Dengan demikian, maka: 17 adalah deviden (dividend) 5 adalah pembagi (divisor), 3 adalah kosien (quotient), dan 2 adalah sisa pembagian (remainder). Contoh lain: Bagaimana jika -11 dibagi dengan 3? Catat bahwa remainder tidak bisa bernilai negative, maka -11 = 3 (-4) + 1. Dengan demikian, maka: -11 adalah deviden 3 adalah pembagi -4 adalah kosien, dan 1 adalah sisa pembagian. Andaikan a dan b adalah bilangan bulat yang tidak sekaligus keduanya berharga nol. Bilangan bulat terbesar d sedemikian hingga d a dan d b disebut sebagai pembagai persekutuan terbesar (greatest common diviso/gcd)r dari a dan b, dan dituliskan gcd(a, b). Contoh: Berapakah gcd(48, 72)? Pembagi bersama yang bernilai positif dari 48 dan 72 adalah 1, 2, 3, 4, 6, 8, 12, 16, dan 24, sehingga gcd(48, 72) = 24. 2. Algoritma, Kompleksitas dan Teori Bilangan - 10

Contoh: Berapakah gcd(19, 72)? Satu-satunya pembagi bersama yang positif dari 19 dan 72 adalah 1, sehingga gcd(19, 72) =1. Nilai gcd dapat ditentukan dengan faktorisasi prima: a = p 1 a 1 p 2 a 2 p n a n, b = p 1 b 1 p 2 b 2 p n b n, dimana p 1 < p 2 < < p n dan a i, b i N untuk 1 i n maka: gcd(a, b) = p 1 min(a 1, b 1 ) p 2 min(a 2, b 2 ) p n min(a n, b n ) Contoh: a = 60 = 2 2 3 1 5 1, b = 54 = 2 1 3 3 5 0 maka gcd(a, b) = 2 1 3 1 5 0 = 6 Definisi. Dua bilangan bulat, a dan b adalah prima relatif jika gcd(a,b)=1. Contoh: Apakah 15 dan 28 prima relatif? Ya, karena gcd(15, 28) = 1. Apakah 55 dan 28 prima relatif? Ya, karena gcd(55, 28) = 1. Apakah 35 dan 28 prima relatif? Tidak, karena gcd(35, 28) = 7. Definisi. Bilangan-bilangan a 1, a 2,, a n adalah prima-relatif-berpasangan (pairwise relatively prime) jika gcd(a i, a j ) = 1 untuk 1 i < j n. Dengan demikian, sekumpulan bilangan bisa ditunjukkan apakah prima-relatif-berpasangan atau tidak dengan mengevaluasi gcd dari semua pasangan bilangan yang mungkin. Jika gcd pasangan-pasangan tersebut semuanya bernilai 1, maka syarat prima-relatif-berpasangan dipenuhi. Sebaliknya, jika salah satu gcd dari pasangan bilangan tersebut tidak sama dengan satu, maka kumpulan bilangan tersebut bukan prima-relatif-berpasangan. Perhatikan contoh berikut ini : Bilangan-bilangan 15, 17, dan 27 adalah bukan prima relatif berpasangan karena gcd(15, 27) = 3. Bilangan-bilangan 15, 17, dan 28 adalah prima relatif berpasangan karena gcd(15, 17) = 1, gcd(15, 28) = 1 dan gcd(17, 28) = 1. 2. Algoritma, Kompleksitas dan Teori Bilangan - 11

Definisi. Kelipatan persekutuan terkecil (least common multiple) dari bilangan bulat positif a dan b adalah bilangan bulat positif terkecil yang dapat dibagi oleh a maupun oleh b. Kelipatan persekutuan terkecil dari a dan b dituliskan sebagai lcm(a, b). Contoh: lcm(3, 7) = 21, lcm(4, 6) = 12, dan lcm(5, 10) = 10 Seperti halnya gcd, nilai lcm dapat dihitung melalui faktorisasi prima sebagai berikut. a = pa 1 1 p2a2... pnan, b= pb 1 1 p2b2... pnbn dimana p1 < p2 <... pn 1 < p n dan a i, b i N untuk 1 i n, maka lcm( a, b) p max ( a, b ) p max ( a, b )... p max ( a, b ) = 1 1 1 2 2 2 n n n Contoh: a = 60 = 2 2 3 1 5 1, b = 54 = 2 1 3 3 5 0 maka lcm(a, b) =2 2 3 3 5 1 = 4 27 5 = 540 sedangkan gcd(a, b) =2 1 3 1 5 0 = 2 3 1 = 6 Teorema. a b = gcd(a, b) lcm(a, b) Andaikan a bilangan bulat dan m bilangan bulat positif. Notasi a mod m menyatakan sisa pembagian (remainder) dari a dibagi dengan m. Contoh: 9 mod 4 = 1, 9 mod 3 = 0, 9 mod 10 = 10, dan -13 mod 4 = 3 Andaikan a dan b adalah bilangan-bilangan bulat dan m suatu bilangan bulat positif. Maka, a disebut kongruen dengan b modulo m jika m membagi a b dan dituliskan a b (mod m). Dengan kata lain a b (mod m) jika dan hanya jika a mod m = b mod m. Perhatikan contohcontoh berikut ini: Apakah 46 68 (mod 11)? Ya, karena 11 (46 68) = 11-22. Apakah 46 68 (mod 22)? Ya, karena 22 (46 68) = 22 22. Tentukan bilangan bulat z sehingga berlaku z 12 (mod 10)? Jawab: z {,-28, -18, -8, 2, 12, 22, 32, } 2. Algoritma, Kompleksitas dan Teori Bilangan - 12

Teorema. Andaikan m suatu bilangan bulat positif. Bilangan bulat a dan b adalah kongruen modulo m jika dan hanya jika ada bilangn bulat k sedemikian hingga a = b + k m. Teorema. Andaikan m suatu bilangan bulat positif. Jika a b (mod m) dan c d (mod m), maka a + c b + d (mod m) dan a c b d (mod m). Algoritma Euklid adalah algoritma untuk mencari gcd dari dua buah bilangan bulat a dan b. Penjelasan diberikan oleh contoh berikut ini: untuk menentukan gcd(287, 91), bilangan 287 (yang lebih besar) dibagai dengan 91 (yang lebih kecil) : 287 = 91 3 + 14 287-91 3 = 14 287 + 91 (-3) = 14 Berdasarkan teorema di atas, kita tahu bahwa untuk sebarang bilangan bulat a, b dan c; jika a b, maka a b c untuk semua bilangan bulat c. Oleh karena itu, sebarang pembagi 91 adalah juga pembagi 91 (-3). Maka 287 + 91 (-3) = 14 Berdasarkan teorema, kita juga tahu bahwa untuk bilangan bulat a, b dan c, jika a b dan a c, maka a (b + c). Oleh karena itu, sebarang pembagi dari 287 dan 91 haruslah juga pembagi dari 287 + 91 (-3), yaitu 14. Dengan demikian, gcd dari 287 dan 91 haruslah juga sama dengan gcd dari 14 dan 91: gcd(287, 91) = gcd(14, 91). Pada langkah berikutnya, kita bagi 91 dengan 14: 91 = 14 6 + 7. Ini berarti bahwa gcd(14, 91) = gcd(14, 7). Selanjutnya 14 dibagi 7: 14 = 7 2 + 0. Ditemukan bahwa 7 14, sehingga gcd(14, 7) = 7. Oleh karena itu diperoleh 2. Algoritma, Kompleksitas dan Teori Bilangan - 13

gcd(287, 91) = 7. Dari ilustrasi diatas, algoritma Euklid dapat diterjemahkan ke dalam pseudocode berikut ini. procedure gcd(a, b: positive integers) x := a y := b while y 0 begin r := x mod y x := y y := r end {x adalah gcd(a, b)} Andaikan b sebagai suatu bilangan bulat positif yang lebih besar dari 1. Jika n bilangan bulat positif, n dapat dinyatakan secara unik dalam bentuk: k n= a b + a b +... a b + a 0 k k 1 1 k 1 1 dimana k adalah bilangan bulat tak negatif, dan a 0, a 1,, a k adalah bilangan bulat tak negatif yang kurang dari b, dan a k 0. Contoh: untuk b =10 kita peroleh ekspresi desimal: 859 = 8 10 2 + 5 10 1 + 9 10 0 untuk b = 2 (ekspansi biner): (10110) 2 = 1 2 4 + 1 2 2 + 1 2 1 = (22) 10 untuk b =16 (ekspansi heksadecimal): (kita gunakan lambing bilangan A hingga F utk angka 10 sampai 15) (3A0F) 16 = 3 16 3 + 10 16 2 + 15 16 0 = (14863) 10 Untuk membuat ekspansi basis b dari suatu bilangan bulat n kita lakukan hal berikut. Pertama-tama, bagi n dengan b untuk mendapatkan kosien q 0 dan sisa a 0, yaitu, n = b q 0 + a 0, dimana 0 a 0 < b. 2. Algoritma, Kompleksitas dan Teori Bilangan - 14

Sisa a 0 menempati dijit paling kanan didalam basis b dari ekspansi n. Berikutnya, bagi q 0 dengan b untuk memperoleh: q 0 = b q 1 + a 1, dimana 0 a 1 < b. a 1 adalah dijit kedua paling kanan pada basis b untuk ekspansi n. Proses ini diteruskan hingga nilai kosien sama dengan nol. Perhatikan contoh berikut ini. Ekspansikan (12345) 10 ke basis 8 dari! Dengan cara yang diuraikan di atas, maka diperoleh 12345 = 8 1543 + 1 1543 = 8 192 + 7 192 = 8 24 + 0 24 = 8 3 + 0 3 = 8 0 + 3 Hasilnya adalah: (12345) 10 = (30071) 8. Ekspansi suatu bilangan decimal ke basis b dapat dilakukan dengan algoritma berikut ini. procedure base_b_expansion(n, b: positive integers) q := n k := 0 while q 0 begin ak := q mod b q := q/b k := k + 1 end {ekspansi basis b dari n adalah (a k-1 a 1 a 0 ) b } Berikutnya kita tinjau operasi penjumlahan bilangan. Operasi ini bias dijelaskan dengan contoh berikut: 2. Algoritma, Kompleksitas dan Teori Bilangan - 15

Desimal: 111 carry 7583 4932 12515 + Biner 1 1 carry ( 1011) ( 1010) ( ) 2 2 10101 + 2 Tinjau dua bilangan biner a = (a n-1 a n-2 a 1 a 0 ) 2, b = (b n-1 b n-2 b 1 b 0 ) 2. Bagaimana sebenarnya penambahan kedua bilangan biner ini dilakukan? Pertama-tama, jumlahkan bit paling kanan: a 0 + b 0 = c 0 2 + s 0, dimana s 0 adalah bit paling kanan dalam ekspansi biner a + b, dan c 0 adalah nilai carry. Lalu, tambahkan pasangan berikutnya bersama-sama dengan carry: a 1 + b 1 + c 0 = c 1 2 + s 1, dimana s 1 adalah bit berikutnya dalam ekspansi biner dari a + b, dan c 1 adalah carry. Proses ini dilanjutkan hingga didapatkan c n-1. Bit terdepan (ter-kiri) dari hasil penjumlahan adalah s n = c n-1. Sehingga hasilnya adalah: a + b = (s n s n-1 s 1 s 0 ) 2. Selanjutnya perhatikan contoh berikut ini: jumlahkan a = (1110) 2 dan b = (1011) 2. Maka dilakukan tahap-tahap berikut ini: a 0 + b 0 = 0 + 1 = 0 2 + 1, shg c 0 = 0 dan s 0 = 1. a1+ b 1 + c 0 = 1 + 1 + 0 = 1 2 + 0, shg c 1 = 1 dan s 1 = 0. a 2 + b 2 + c 1 = 1 + 0 + 1 = 1 2 + 0, shg c 2 = 1 dan s 2 = 0. a 3 + b 3 + c 2 = 1 + 1 + 1 = 1 2 + 1, shg c 3 = 1 dan s 3 = 1. s 4 = c 3 = 1. 2. Algoritma, Kompleksitas dan Teori Bilangan - 16

Oleh karena itu, s = a + b = (11001) 2. Prosedur penjumlahan bilangan basis dua memiliki algoritma berikut ini. procedure add(a, b: positive integers) c := 0 for j := 0 to n-1 begin d := (a j + b j + c)/2 s j := a j + b j + c 2d c := d end sn := c {ekspansi biner dari hasil penjumlahan adalah: s(s n s n- 1 s 1 s 0 ) 2 } Matriks adalah susunan bilangan berbentuk persegiempat. Matriks yang memiliki m buah baris dan n buah kolom disebut sebagai matriks m n. Contoh: 1 1 A = 2.5 0.3 8 0 adalah matriks 3 2 Sebuah matriks yang jumlah baris dan kolomnya sama disebut sebagai matriks bujursangkar. Dua buah matriks disebut sama jika keduanya memilliki jumlah baris dan jumlah kolom yang sama dan elemen-elemen yang bersesuaian bernilai sama. Suatu matriks m n, A = [a ij ], dapat dituliskan sebagai: a a... a a a... a......... a a... a 11 12 1n 21 22 2n m1 m2 mn a1 j a 2 j. kolom ke-j dari A.. a mj 2. Algoritma, Kompleksitas dan Teori Bilangan - 17

[ a, a,..., a ] i1 i2 in baris ke-i dari A Tinjau dua buah matriks A = [a ij ] dan B = [b ij ] berukuran m n. Penjumlahan A dan B, dituliskan sbg A + B, adalah matriks m n dengan elemen ke (i, j) adalah a ij + b ij, dengan kata lain, A+B = [a ij + b ij ]. Contoh: 2 1 5 9 2+ 5 1+ 9 3 10 4 8 + 3 6 = 4 3 8+ 6 = 1 14 3 0 4 1 3 4 0+ 1 7 1 Andaikan A sebuah matriks m k dan B matriks k n. Hasil kali A dan B, dituliskan sebagai AB, adalah sebuah matriks dengan elemen ke-(i,j) nya sama dengan penjumlahan dari hasil perkalian baris ke-i dari A dan kolom ke-j dari B. Dengan kata lain, jika AB = [c ij ], maka c = a b + a b +... + a b = a b ij i1 1j i2 2 j ik kj it tj t= 1 k Perkalian dua buah matriks dapat dilukiskan sebagia berikut: 3 0 1 2 1 4 A = 0 0 5 1 1 0 2 1 B = 0 1 3 4 Ambil baris pertama dari A, putar 90 o dan pasangkan dengan kolom pertama dari B. Kalikan elemen-elemen yang bersesuaian dari A dan B, kemudian jumlahkan hasil kalinya 3 2 + 0 0 + 1 3 = 9 Masukkan hasilnya kedalam posisi paling kiri atas dari C. Lanjutkan dengan perkalian baris pertama A dengan kolom ke-dua, ketiga... dst dari B untuk mendapatkan elemen-elemen pada baris pertama C. Ulangi proses ini untuk baris ke-dua, 2. Algoritma, Kompleksitas dan Teori Bilangan - 18

tiga,..dst dari A menghasilkan elemen pada kolom C sisa-nya. Setelah proses ini selesai, matriks C berisi akan berisi hasil kali AB. Contoh 3 0 1 2 1 4 A = 0 0 5 1 1 0 9 7 2 1 B = 0 1 8 15, maka AB = C = 15 20 3 4 2 2 Matriks identitas order-n adalah matriks n n, I n =[δ ij ], dimana δ ij =1 jika i=j dan δ ij =0 jika i j: 1 0... 0 0 1... 0 A =........... 0... 1 0 0... 0 1 Perkalian sebarang matriks A berukuran m n dengan matriks identitas (dengan dimensi yang sesuai) tidak mengubah matriks tsb: AI n = I m A = A Berikut ini kita tinjau kuasa (power) dari suatu matriks. Fungsi kuasa hanya terdefinisi untuk matriks bujursangkar. Jika A sebuah matriks n n, maka: A 0 = I n, A r = AAA A (r-buah A) Transpose dari suatu matriks m n, A = [a ij ], dituliskan sbg A t, adalah matriks n m yang diperoleh dengan menukarkan baris dengan kolom dari matriks A. Dengan kata lain, jika A t = B = [b ij ], maka b ij = a ji untuk i = 1, 2,, n dan j = 1, 2,, m. Contoh: 2. Algoritma, Kompleksitas dan Teori Bilangan - 19

2 1 A = 0 1 t 2 0 3, maka A = 1 1 4 3 4 Suatu matriks bujursangkar A disebut simetrik jika A = A t. Jadi A = [a ij ] adalah simetrik jika a ij = a ji untuk semua i = 1, 2,, n dan j = 1, 2,, m. Tinjau dua buah matriks berikut 5 1 3 A = 1 2 9, 3 9 4 1 3 1 B = 1 3 1 1 3 1 Maka, A adalah matriks simetrik sedangkan B bukanlah matriks simetrik. Sebuah matriks dengan elemen yang berharga 0 atau 1 disebut sebagai matriks Boolean (matriks zero-one). Matriks biner ini sering dipakai sebagai tabel untuk me-representasikan suatu struktur diskrit. Kita dapat mendefinisikan operasi Boolean pada elemen-elemen matriks Boolean sebagai berikut a b a b a b a b 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 Misalkan A=[a ij ] dan B=[b ij ] adalah matriks Boolean berukuran m n. Maka, join (gabungan) dari A dan B adalah sebuah matriks Boolean yang elemen ke-(i,j)-nya adalah a ij b ij. Join dari A dan B dituliskan sebagai A B. Meet (pertemuan) dari A dan B adalah sebuah matriks Boolean dengan elemen ke-(i,j)-nya a ij b ij. Meet dari A dan B dituliskan sebagai A B. Contoh: tinjau matriks-matriks berikut 1 1 0 1 A = 0 1, dan B = 1 1 maka 1 0 0 0 2. Algoritma, Kompleksitas dan Teori Bilangan - 20

1 0 1 1 1 1 1 0 1 1 0 1 A B= 0 1 1 1 = 1 1 dan A B = 0 1 1 1 0 1 = 1 0 0 0 1 0 1 0 0 0 0 0 Misalkan A = [a ij ] adalah suatu matriks Boolean yang berukuran m k dan B = [b ij ] adalah matriks Boolean yang berukuran k n. Perkalian Boolean dari A dan B, dituliskan sebagai Ao B, adalah sebuah matriks m n yang elemen ke-(i, j)-nya, [cij], ditentukan sebagai berikut ( 1 1 ) ( 2 2 )... ( ) c = a b a b a b ij i j i j ik kj Pada dasarnya perkalian Boolean dilakukan seperti perkalian matriks biasa, tetapi operasi perkalian bilangan digantikan dengan konjungsi, sedangkan operasi penjumlahan bilangan digantikan dengan disjungsi. Andaikan A sebuah matriks Boolean bujursangkar dan r adalah bilangan bulat positif. Kuasa Boolean (boolean power) ke-r dari A adalah perkalian Boolean sebanyak r-buah dari matriks A. Kuasa Boolean ke-r dari A dituliskan sebagai A [r], dengan kurung kotak pada operasi perpangkatannya. Dengan demikian A [ 0] [ r] = I n A = AoAoA... oa ( r kali) 2. Algoritma, Kompleksitas dan Teori Bilangan - 21