algoritma dan struktur data - E

advertisement
STRUKTUR DATA
Komting: ADITYA 08785523198 (E), SIGIT 085645119007
:: Fetty Tri Anggraeny ::
Tentang Mata Kuliah ini
• ISI3002 – Struktur Data
• 3 SKS: 3 x 50 menit = 2 jam 30 menit
• Prasyarat: tidak ada
• Nilai kelulusan: C
• Materi kuliah: http://elearning.upnjatim.ac.id 
Struktur Data
Tujuan Mata Kuliah
Mahasiswa dapat menjelaskan:
1. Struktur data komputer dan pengaruhnya terhadap
program
2. Algoritma dan struktur data fundamental
3. Pemilihan penggunaan struktur data dan algoritma yang
tepat untuk menyelesaikan masalah standar
4. Implementasi algoritma dan struktur data yang berorientasi
objek
Referensi
[1] Bruno R. Preiss, B.A.Sc., M.A.Sc.
Ph.D., P.Eng., Data Structures and
Algorithms with Object-Oriented
Design Patterns in Ruby, 2004.
[Online]
http://www.brpreiss.com/books/opus
8/index.html
[2] Dave Thomas, Chad Fowler, Andy
Hunt, Programming Ruby: The
Pragmatic Programmers’ Guide (2nd
edition), 2004.
[3] David Flanagan, Yukihiro
Matsumoto, The Ruby Programming
Language, O’Reilly, 2008
!!! No [2] dan [3] tersedia di elearning dalam bentuk e-book
KONTRAK KULIAH
• Toleransi keterlambatan 30 menit berlaku bagi dosen
dan mahasiswa
• Pakaian SOPAN, berkerah, bebas rapi dan bersepatu.
• Tugas dikumpulkan sesuai deadline masing-masing
tugas. Keterlambatan pengumpulan : minus 10% dari
nilai (per hari keterlambatan)
• NILAI :
NTS terdiri dari:
Absensi
Tugas
UTS
NAS terdiri dari:
Absensi
Tugas
Final Project
UAS
: 10%
: 40%
: 50%
:
:
:
:
10%
30%
30%
30%
MATERI KULIAH
•
•
•
•
•
•
•
Review materi AlPro
Sorting
Searching
Linked List
Stack
Queue
Graph dan Tree
Satuan Acara Perkuliahan
Minggu ke-
Topik Pokok Bahasan
1
Pendahuluan :
• Kontrak Perkuliahan
• Pengenalan algoritma dan struktur data:
• Review konsep variable, Tipe data, dan pengendali program, fungsi & prosedur, array
• Pengenalan konsep struktur data dan tipe data abstrak
• Pengenalan konsep pemrograman object oriented
2
Single Linked List :
• Linked List sebagai array yang dinamis
• Struktur data Linked List
• Operasi Insert new Node
• Operasi Search Node
• Operasi Delete Node
Implementasi Single Linked List dalam Ruby:
• Elemen List
• Class LinkedList
• Methods (initialize, purge, first, last, prepend, append, clone, extract, insertAfter,
insertBefore)
3
Stack:
• Definisi Stack
• Contoh implementasi stack
• Struktur data stack
• Operasi Push() dan Pop()
• Studi kasus: cek kurung, palindrome, evaluasi infix
Satuan Acara Perkuliahan
Minggu ke-
Topik Pokok Bahasan
4
Queue:
• Definisi Queue
• Contoh implementasi queue
• Struktur data queue
• Operasi Insert() dan Remove()
• Studi kasus: parkir mobil, proses CPU
5
Implementasi Stack dan Queue dengan array di Ruby
Implementasi Stack dan Queue dengan linked list di Ruby
Tree:
Definisi Tree
N-ary tree
Binary Tree
Tree traversal: Depth First Traversal (In order, Pre order, Post order), Breadth First Traversal
Contoh implementasi tree dalam Ruby
Contoh implementasi tree dalam Ruby
6
7
8
9
UTS
Searching :
• Sequential search
• Binary Search
Search Trees:
• Binary Search Tree
• AVL Search Tree
Satuan Acara Perkuliahan
Minggu ke-
Topik Pokok Bahasan
10
Sorting:
• Bubble sort
• Selection sort
• Insertion sort
• Quick sort, Merge sort, shell sort (dipelajari secara mandiri)
11
Contoh implementasi sorting dan searching dalam Ruby
12
13
Graph:
• Definisi Graph
• Contoh implementasi graph
• Struktur data graph
• Graph Traversing: Depth First, Breadth First
• Shortest Path and Minimum Spanning Trees
Demo final project
14
UAS
What is programming?
• PROGRAM = ALGORITMA + STRUKTUR DATA
• ALGORITMA :
• SEQUENTIAL
• BRANCHING
• LOOPING/ REKURSI
• STRUKTUR DATA :
• ARRAY
• LINKED LIST
• ADT : STACK, QUEUE, GRAPH, TREE, DLL
Review Materi AlPro
•
•
•
•
Variabel dan tipe data
Kontrol Alur
Fungsi/Method
Array
Variabel dan tipe data Ruby
• Numeric class
• Integer
• Fixnum
• Bignum
•
•
•
•
•
Float
Complex (standard library)
BigDecimal (standard library)
Rational (standard library)
Contoh operasi aritmetika pada number:
•
•
•
•
x=5/2
y=5.0/2
z=5/2.0
x=5%2
Variabel dan tipe data Ruby
• String class
• Single-quoted string literals:
• S=‘Ini string sederhana dalam Ruby’
• Double-quoted string literals:
• Lebih fleksibel
• S="360 degrees=#{2*Math::PI} radians“
output: S="360 degrees=6.283185307179586 radians”
• String.new  membuat tipe data string baru dan kosong
(empty string)
• Append operator (<<):
greeting=“Hello”
greeting<<“ “<<“World”
puts greeting
Variabel dan tipe data Ruby
• Concat operator (+):
planet=“Earth”
“Hello”+” “+planet
• Array class
• Array di Ruby tidak memiliki tipe dan resizable
• Contoh:
•
•
•
•
•
[1, 2, 3]
[[1,2],[3,4],[5]]
empty=Array.new
zeros=Array.new(4,0)
count=Array.new(3) {|i| i+1}
• More on Array in resource [3] chapter 9.5.2
Variabel dan tipe data Ruby
• Object class
• Ruby adalah bahasa pemrograman berorientasi objek all
values are objects
• Semua objek diturunkan dari class Object.
• Untuk mengetahui class dari object, gunakan perintah
.class
• Contoh:
o=“test”
o.class #returns an object with String class
CONTROL STRUCTURES
• SEQUENTIAL/ URUTAN
Program dijalankan mulai dari perintah
paling atas/ awal sampai paling akhir
secara berurutan/ sekuensial.
• BRANCHING/ PERCABANGAN
Penyeleksian kondisi (TRUE/ FALSE) untuk
menentukan statemen selanjutnya
• LOOPING/ PERULANGAN
Mengulangi proses selama syarat/ kondisi
tertentu masih terpenuhi
Sequential/Urutan
Entry
Action 1
Action 2
Action 3
Exit
Branching
Entry
Condition 1
TRUE
FALSE
Action 1
Condition 2
FALSE
TRUE
Action 2
Action 3
Exit
IF - ELSE
•
•
•
•
Biasa digunakan untuk seleksi nilai/ data
Kondisi jamak  ((kondisi_1) &&/ || (kondisi_2))
if (kondisi=TRUE) jalankan_statement_ini
if (kondisi=TRUE) statement_1
else statement_2
// if kondisi=FALSE
• if (kondisi=TRUE) statement_1
else if (kondisi=TRUE) statement_2
else statement_3
// if kondisi=FALSE
• if (kondisi=TRUE)
if (kondisi=TRUE) nested_statement
If - else
• If syntax
• if var == 10
print “Variable is 10″
end
• If Else Syntax
• if var == 10
print “Variable is 10″
else
print “Variable is something else”
end
• If Else If Syntax
• Here’s the key difference between Ruby and most other languages. Note that
“else if” is actually spelled “elsif” without the e.
• if var == 10
print “Variable is 10″
elsif var == “20″
print “Variable is 20″
else
print “Variable is something else”
end
SWITCH - CASE
• Biasa digunakan untuk membuat menu dalam program
switch (variabel_pilihan) {
case nilai_1 : statemen_1; break;
case nilai_2 : statemen_2; break;
case nilai_3 : statemen_3; break;
…
default: statemen_default;
}
• Bisa berbentuk nested/ bersarang
Switch case
Switch Case syntax
[variable = ] case
when bool_condition
statements
when bool_condition
statements
else # the else clause is optional\
statements
end
Looping
Entry
Action 1
Action 2
Looping 1
Y
Y
T
if 1
if 2
Looping 2
T
Action 3
Exit
Looping dengan “while”
x=10
#initialize a loop counter variable
while x>= 0 do #Loop while x is greater than/equal to 0
puts x
#Print out the value of x
x=x-1
#Subtract 1 from x
end
#The loop ends here
Looping dengan “until”
#Count back up to 10
x=0
until x>10 do
puts x
x=x+1
end
Looping dengan “for in”
array=[1,2,3,4,5]
for element in array
puts element
end
Function or Method
• Sekelompok blok kode yang memiliki parameter dan
berasosiasi dengan 1 atau lebih objek
• Contoh method:
# Define a method named 'factorial' with a single
# parameter 'n'
def factorial(n)
if n < 1 # Test the argument value for validity
raise "argument must be > 0"
elsif n == 1
# If the argument is 1
1 # then the value of the method invocation is 1
else # Otherwise, the factorial of n is n times
n * factorial(n-1) # the factorial of n-1
end
end
Method with return value
def factorial(n)
raise "bad argument" if n < 1
return 1 if n == 1
n * factorial(n-1)
end
Method with more than 1 return values
#Convert the Cartesian point (x,y) to
#polar (magnitude, angle) coordinates
def polar(x,y)
return Math.hypot(y,x), Math.atan2(y,x)
end
Contoh lain:
# Convert polar coordinates to Cartesian coordinates
def cartesian(magnitude, angle)
[magnitude*Math.cos(angle), magnitude*Math.sin(angle)]
end
Cara pemanggilan method:
distance,theta=polar(x,y)
x,y=cartesian(distance,theta)
Tipe Data Abstrak (Abstract
Data Type – ADT)
• ADT adalah model formal dari struktur data yang
menspesifikasikan:
• Tipe data yang disimpan
• Operasi yang dapat dilakukan
• Tipe parameter dari operasi tersebut
• ADT menspesifikasikan operasi apa yang dapat dilakukan,
bukan bagaimana melakukan operasi tersebut
ADT
• Objek pada Ruby adalah sebuah abstraksi.
• Tingkat abstraksi meliputi: atribut (nama, alamat, nilai, masa
hidup, cakupan, tipe, dan ukuran)
• Contoh ADT: Fixnum
• Jika kita membuat objek, x, bertipe Fixnum, kita tahu bahwa x
dapat merepresentasikan integer dalam range [-231, 231-1] dan
kita dapat melakukan operasi penambahan, pengurangan,
perkalian, dan pembagian
• Kita tidak perlu tahu bagaimana cara yang dilakukan Fixnum
untuk melakukan operasi tersebut, hanya perlu tahu operasi
apa yg ada pada Fixnum
Cakupan ADT
• Struktur linier:
•
•
•
•
Stack
Queue
Deque
List
• Tree
• Heap
• Priority Queue
• Hash-table
• Set
• String
• Graph
Hirarki class di Ruby
Larger Image
Hirarki class
• Dua jenis class dalam Ruby: Abstract dan Concrete
• Abstract class:
• Class yg mendefinisikan sebagian dari implementasinya
• Kita tidak dapat membuat objek dari abstract class
• Digunakan sebagai base class darimana sebuah class
diturunkan
• Class turunan meng-override abstract methods
• Concrete Class:
• Kita dapat membuat objek dari concrete class  dengan
.new method
Contoh abstract class
class Animal
def initialize
end
def move
end
end
class Cheetah < Animal
def initialize
@type = :Cheetah
end
def move
"Running!"
end
end
puts Cheetah.new.move
# => "Running!"
Contoh concrete class
class Die
def roll
1+rand(6);
end # akhir method roll
end # akhir class Die
dice=Die.new;
puts dice.roll
]
Next Week
• Struktur data linked list dan implementasinya dalam Ruby
TERIMA KASIH
Download