Top Banner
PENGANTAR ALGORITMA A. PENGERTIAN ALGORITMA Algoritma adalah cara kerja komputasi yang baik, dimana memiliki nilai input dan output. Algoritma digunakan untuk menyelesaikan masalah komputasional yang mana hasil penyelesainnya ini dimengerti dan sesuai dengan masalah yang disediakan. Gambaran algoritma dapat dilihat dari ilustrasi dibawah ini : B. Desain dan Analisis Algoritma - Pseucodocode Kode yang digunakan dalam menerapkan suatu algoritma yang bisa dijalankan oleh berbagai bahasa pemograman. - Kompleksitas algoritma Untuk mengetahui hal-hal yang dibutuhkan suatu algoritma, seperti waktu komputasi dan kapasitas memory. - Strategi algoritma - Struktur data Menyimpan data dan mengatur data untuk dimodifikasi. - Masalah NP-lenkap Hal ini akan muncul jika masalah yang ada tidak memiliki solusi yang efisien input output masalah Algoritma
14

Resume Algoritma & Struktur Data

Nov 21, 2015

Download

Documents

Karmiluun

algoritma
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • PENGANTAR ALGORITMA

    A. PENGERTIAN ALGORITMA Algoritma adalah cara kerja komputasi yang baik, dimana memiliki nilai

    input dan output. Algoritma digunakan untuk menyelesaikan masalah

    komputasional yang mana hasil penyelesainnya ini dimengerti dan

    sesuai dengan masalah yang disediakan. Gambaran algoritma dapat

    dilihat dari ilustrasi dibawah ini :

    B. Desain dan Analisis Algoritma

    - Pseucodocode Kode yang digunakan dalam menerapkan suatu algoritma yang bisa

    dijalankan oleh berbagai bahasa pemograman.

    - Kompleksitas algoritma

    Untuk mengetahui hal-hal yang dibutuhkan suatu algoritma, seperti

    waktu komputasi dan kapasitas memory.

    - Strategi algoritma

    - Struktur data

    Menyimpan data dan mengatur data untuk dimodifikasi.

    - Masalah NP-lenkap

    Hal ini akan muncul jika masalah yang ada tidak memiliki solusi

    yang efisien

    input output

    masalah

    Algoritma

  • C. Contoh Masalah Komputasional

    Masalah pencarian data (searching problem) Kita akan menginput barisan n yang bilangan asli di dalam larik A,

    dan sebuah bilangan yang dicari (key). Dan hasilnya key berada

    dalam larik A, tetapi jika key tidak ditemukan dalam larik A makan

    akan ditambahkan pada barisan terakhir sebagai unsur terakhir.

    Algoritmanya :

    1. Mengecek satu persatu dari setiap unsur yang terdapat dalam

    larik A, apakah ada yang mirip dengan key.

    2. Jika terdapat unsur yang mirip dengan key, maka pencarian

    berhenti. Tetapi jika tidak ditemukan, maka key ditambahkan

    sebagai unsur terakhir dalam larik A.

    3. Algoritma berhenti dan kembalikan nilai indeksnya.

    Pada algoritma ini, dibutuhkan perulangan (looping) dan

    penyeleksian kondisi (selection condition).

    Pseudocode algoritma

    Linear-Search (A, key)

    1. indeks 1 ;

    2. ada False;

    3. Mengecek key dalam A[1..length[A]]

    4. While indeks length [A] and ada = False

    5. If A[indeks] = key;

    6. Then ada = True;

    7. Indeks indeks + 1;

    8. If ada = False

    9. Then indeks length[A]+1;

    10. Return indeks

  • Contohnya :

    27 36 15 2 31

    Key = 7

    Solusinya :

    1. Indeks = 1;

    2. Ada False;

    3. Mengecek key dalam A[1..length[A]]

    4. While indeks length [5] and ada = false

    5. If A [1] = 7

    27 = 7

    Indeks+1 = 1+1=2

    If A [2] = 7

    36 = 7

    Indeks+1 = 2+1=3

    If A [3] = 7

    15 = 7

    Indeks+1 = 3+1=4

    If A [4] = 7

    2 = 7

    Indeks+1 = 4+1=5

    If A [5] = 7

    31 = 7

    Then indeks length[[5]+1]

    If A [6] = 7

    7= 7

    Return indeks

    Proses diatas akan mengeluarkan output seperti ini :

    27 36 15 2 31 7

    Jika key yang ditentukan sama dengan salah satu unsur dalam larik A, maka proses hanya akan sampai pada langkah 5 dan kembali padproses awal.

    A =

    Salah, maka akan

    dilanjutkan ke langkah berikutnya

    Masih salah, lanjut!

    Masih salah, lanjut!

    Masih salah, lanjut!

    Masih salah, lanjut!

    Karena unsur yang disediakan sudah

    habis sedangkan key belelum

    ditemukan makan length (kotaknya)

    ditambahkan. Seperti langkah 9. Key dijadikan unsur

    terakhir..

  • Masalah Pengurutan Data (Sorting Problem)

    Kita akan menginput barisan n bilangan (a1, a2,..,an), dan outputnya

    adalah barisan bilangan yang sudah diurutkan (a1, a2,..,an), dimana

    a1a2.an.

    Algoritmanya:

    1. Menscanning semua kartu.

    2. Memilih satu kartu sebagai patokan untuk dijadikan perbandingan

    dengan kartu lain.

    3. Menukar kartu yang ter-scanning jika ternyata lebih kecil daripada

    kartu yang dijadikan patokan tadi.

    Pseudo codenya:

    Insertion-Sort(A)

    0 perulangan untuk patokan

    1 for j 2 to length[A]

    2 key A[j]

    3 Sisip A[j] kedalam barisan terurut A[1.. j 1]

    4 i j 1

    5 while (i > 0 A[i] > key)

    6 A[i + 1] A[i]

    7 i i 1

    8 A[i + 1] key

    Contohnya : Urutkan data tersebut dari terkecil ke terbesar:

    27 36 15 2

    Solusinya : o For j = 2 , key = A[2] = 36 , i = j-1 = 1

    While (1 > 0 27 > 36 ) Karena, salah satu persyaratan salah maka lanjut j = 3. Urutan sekarang : (masih seperti awal)

    27 36 15 2

    I > 0 , berfungsi untuk menghetikan

    proses jika unsur telah habis

    diseleksi.

    A[i] > key, berfungsi untuk

    membandingkan key dengan angka

    sebelumnya.

    (i > 0 A[i] > key) T F

  • o For j = 3, key = A[3] = 15 , i = j-1 = 2

    While (1 > 0 36 > 15 ) A [i+1] = 36 urutan sekarang :

    27 36 36 2

    i = i-1= 2-1 = 1

    While (1 > 0 27 > 15) A [i+1] = 27 urutan sekarang :

    27 27 36 2

    i = i-1= 1-1 = 0

    While (0 > 0 . > 15) A[i] = key = 15 Karena, salah satu persyaratan salah maka lanjut j = 4. Urutan sekarang : (masih seperti awal)

    15 27 36 2

    o For j = 4, key = A[4] = 2 , i = 4-1 = 3

    While (3 > 0 36 > 2 ) A [i+1] = 36 urutan sekarang :

    15 27 36 36

    i = i-1= 3-1 = 2

    While (2 > 0 27 > 2) A [i+1] = 27

    T

    (i > 0 A[i] > key) T

    36 bertukar posisi 15 pada A[3]

    T T

    27 bertukar posisi 15 pada A[2]

    15 sebetulnya sudah berada

    A[2], tapi nilainya < 36.

    15 sebetulnya sudah berada

    A[1], tapi nilainya < 27.

    F

    T

    (i > 0 A[i] > key) T

    36 bertukar posisi 2 pada A[4]

    T T

    27 bertukar posisi 2 pada A[3]

    2 sebetulnya sudah berada

    A[3], tapi nilainya < 36.

  • n

    j jt

    2

    urutan sekarang :

    15 27 27 36

    i = i-1= 2-1 = 1

    While (1 > 0 15 > 2) A [i+1] = 15 urutan sekarang :

    15 15 27 36

    i = i-1= 1-1 = 0

    While (0 > 0 . > 2) A[i] = key = 2 Urutan akhir : ( karena j hanya sampai 5)

    2 15 27 36

    Analisis Algorima : Insertion-Sort(A)

    1 for j 2 to length[A]

    2 key A[j]

    3 Sisip A[j] kedalam barisan terurut A[1.. j 1]

    4 i j 1

    5 while (i > 0 A[i] > key)

    6 A[i + 1] A[i]

    7 i i 1

    8 A[i + 1] key

    Total waktu dari algoritma ini (running time) :

    2 sebetulnya sudah berada

    A[2], tapi nilainya < 27.

    F

    T T

    15 bertukar posisi 2 pada A[3]

    2 sebetulnya sudah berada

    A[1], tapi nilainya < 15.

    cost times

    c1 n

    c2 n 1

    0 n 1 c

    4 n 1

    c5

    c

    6

    c

    7

    c

    8 n 1

    n

    j jt

    2)1(

    n

    j jt

    2)1(

  • Urutan data yang diinput juga mempengaruhi waktu komputasi. Pada urutan yang diinpu terdapat dua kasus yaitu :

    - Kasus terbaik (best case) yakni dimana data yang diiput sudah berurut, tj=1. Laju komputasi dalam fungsi linear.

    - Kasus terburuk (worst case) akni dimana data yang diiput terurut terbalik, tj=j. laju komputasi dalam fungsi kuadratik.

    )1()1()1()1()1()( 82

    7

    2

    6

    2

    5421

    nctctctcncncncnTn

    j

    j

    n

    j

    j

    n

    j

    j

    )()(1)( 1321322

    1 kknkkknkknTn

    j

    )()(2

    )( 13212121

    32

    2

    1 kknkknk

    knkjknTn

    j

  • PERANCANGAN ALGORITMA DAN STRUKTUR DATA

    Masalah pencarian data (searching problem)

    Kita menginput barisan n bilangan asli (a1, a2,..,an) dalam larik A dan akan terdapat sebuah key yang akan dicari. Maka outputnya adalah lokasi key dalam larik A atau jika tidak ditemukan maka akan ditambahkan sebagai unsur terakhir dalam larik A.

    Pencarian Linier Linear-Search(A, key)

    1 ada False

    2 for i 1 to length[A]

    3 if A[i] = key then

    4 posisi i

    5 ada True

    6 if not(ada) then

    7 posisi length[A] + 1

    8 A[posisi] data

    Jika unsur dalam larik A semuanya sama dengan key, maka hal ini akan menjadi kasus terburuknya.

    Times

    1

    n + 1

    n

    1

    s

    s

    n

    i it

    1

    n

    i it

    1

    )32(22)(1

    stnnTn

    i

    i

    34)32(22)(1

    nstnnTn

    i

    i

  • Sebaliknya, akan terjadi kasus terbaik jika tidak ada sama seklai unsur dalam larik A sama dengan key.

    Pencarian Biseksi Pencarian ini merupakan ide ilmiah dalam menyelesaikan masalah ini,

    yaitu dengan cara membagi dua data. Sehingga pencarian dua kali lebih cepat. Kasus terburuk dan kasus terbaik dari cara ini akan mengalami pengurangan n, sehinggan waktu komputasionalis kasus terburuknya akan menjadi 7/2n+3 dan waktu komputasionalis kasus terbaiknya menjadi 3/2n+5.

    Binary Search Tree (BST) Sebuah pohon yang digunakan dalam prosedur penyimpana dalam

    berbagai bentuk sehingga operasi algoritma menjadi lebih optimal. Susunan data dalam BST itu adalah bagian kiri pohon lebih kecil daripada rootnya sedangkan bagian kanan pohon lebih besar dari rootnya.

    simpul kiri < root < simpul kanan

    Contohnya:

    52)32(22)(1

    nstnnTn

    i

    i

  • N = jumlah data , k = jumlah langkah

    N = 2k-1 = 24-1 = 16-1 = 15

    k = log2 (N+1) = 0,3(15+1) = 0,3(16) = 4

    Bentuk penyimpanannya :

    31

    26 41

    11 28 36

    50

    52

    49

    48

    34

    32

    27

    13

    5

    1 data

    3 data

    7 data

    15 data

    1 langkah

    2 langkah

    3 langkah

    4 langkah

    1

    2 3

    4 5 6

    7

    15

    14

    13

    12

    11

    10

    9

    8

  • Merge Sort Merge sort adalah metode mengurutkan data dengan menggunkan

    divide and conquer, yaitu dengan cara memecahkan masalah kemudian

    menyelesaikannya dan menggabungkannya kembali.

    Divide and conquer memiliki tiga langkah yaitu :

    - Divide

    Membagi-bagi data menjadi beberapa bagian.

    - Conquer

    Menyelesaikan masalah data yang telah dibagi-bagi.

    - Combine

    Menggabungkan kembali data yag telah diselesaikan.

    Contoh :

    Urutkan data tersebut dari terkecil ke terbesar

    21 5 10 8 25 16

    Solusi :

    Data ke-

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    Data kiri

    2 4 6 8 10 12 14 Tidak memiliki data kiri (data paling bawah)

    Data kanan

    3 5 7 9 11 13 15 Tidak memiliki data kanan (data paling bawah)

    Nilai 31 26 41 11 28 36 50 5 13 27 32 34 48 29 50

  • Kotak dan panah warna kuning menunjukkan terjadinya prose divide,

    sedangkan kotak dan panah warna biru menunjukka terjadinya proses

    conquer dan combine.

    21 5 10

    8 25 16

    5 10

    25 16

    21 8 5 10 16

    6

    25

    21 5 10

    16 25

    8

    5 10 21

    8 16 25

    21 5 10 8 25 16

    5 8 10 16 21 25

  • KOMPLEKSITAS ALGORITMA Kompleksitas algoritma adalah perubahan data yang diiput terhadap hasilnya(output) yakni menghitung waktu/ruang yang dibutuhkan suatu

    algoritma dalam menyelesaikan satu masalah (running time). Kompleksitas

    algoritma bisa dipengaruhi oleh kondisi data yang diinput, seperti urutan data

    yang tidak terurut atau terurut terbalik.

    Batas Atas (Upper Bound)

    O(g(n)) = {f(n) : terdapat konstanta c dan n0

    sedemikian sehingga 0 f(n) cg(n), n n0}

    O(g(n)) (dibaca : big oh g(n)) menyatakan batas atas kompleksitas algoritma.

    Cocok digunakan untuk kondisi terburuk.

    Batas Bawah (Lower Bound)

    n0

    f(n) = O(g(n))

    cg(n)

    n0

    f(n) = (g(n))

    cg(n)

    n

  • (g(n)) = {f(n) : terdapat konstanta c dan n0

    sedemikian sehingga 0 cg(n) f(n), n n0}

    (g(n)) (dibaca : big omega g(n)) menyatakan batas bawah kompleksitas

    suatu algoritma. Cocok digunakan untuk kondisi terbaik.

    Batas Ketat (Tight Bound)

    (g(n)) = {f(n) : terdapat konstanta c1, c2, dan n0 sedemikian sehingga 0

    c1g(n) f(n) c2g(n) , n n0}

    (g(n)) (dibaca : big theta g(n)) menyatakan batas ketat suatu kompleksitas

    algoritma. Cocok digunakan untuk kasus rata-rata.

    Diantara ketiga batas diatas, yang paling efisien digunakan adalah batas atas

    (upper bound), karena dengan menentukan batas atas suatu algoritma maka kita

    tidak perlu khawatir akan adanya suatu kemungkinan terjadi kebutuhan

    ruang/waktu yang besar.

    n0

    f(n) = (g(n))

    c1g(n)

    n

    c2g(n)