Algoritma Dan Struktur Data Dengan Python 3
Algoritma Dan Struktur Data Dengan Python 3
Penulis:
Khoirudin.
ISBN:
978-602-9019-87-2
Desain Grafis:
Desi Eka Sari
Tata Letak:
Diyah Kartika Sari
Sahesti Ningtyas.
Penerbit:
Redaksi:
Jl. Soekarno-Hatta Pedurungan Semarang. 50196 Indonesia
Telp: 024-6702757, Fax: 024-6702272
e-mail: [email protected]
http://www.usmpress.usm.ac.id
ii
KATA PENGANTAR
Khoirudin
iii
DAFTAR ISI
iv
BAB 5 NUMBER, STRING, TANGGAL DAN WAKTU .. 19
A. Number.................................................................. 19
B. String ..................................................................... 22
C. Tanggal dan Waktu ............................................... 25
v
BAB 11 TREE DAN ALGORITMANYA ............................ 69
A. Definisi Tree ......................................................... 69
B. Implementasi Binary Tree dengan menggunakan
Class...................................................................... 70
C. Tree Traversal....................................................... 71
D. Istilah dalam Tree ................................................. 72
vi
BAB 1 PENGENALAN PYTHON
A. Pengenalan Python
Python adalah bahasa pemrograman interpretatif yang
multiplatform dan multiguna, Python termasuk di dalam bahasa
pemrograman tingkat tinggi karya Guido van Rossum. Python
sendiri telah banyak digunakan untuk membuat berbagai macam
aplikasi dan program, seperti: Program GUI (desktop), Aplikasi
Mobile, Web, IoT, Game, bahkan Program untuk Hacking.
B. Instalasi Python
Sebelum kita menggunakan Python, kita harus menginstal-nya
terlebih dahulu di sistem operasi komputer Anda. Saat ini Python
memiliki 2 versi yang berbeda, yaitu Python versi 3 dan Python
versi 2, dimana versi terbaru dari Python 2 adalah Python 2.7.17
dan untuk versi 3 adalah Python 3.8.0 untuk versi stablenya. Untuk
1
mendapatkan file instalasi Python kita dapat mengunjungi laman
berikut
https://www.Python.org/downloads/,
dalam buku ini kita akan belajar bahasa pemrograman Python
menggunakan versi terbaru 3.8.0. Halaman IDE Python 3.8 dapat
kita lihat seperti gambar berikut
2
Beberapa IDE untuk Python yang cukup populer adalah :
3
Tabel 1. Tipe Data Python
i
Supaya lebih paham, mari kita coba tipe data dalam Python
4
E. Variabel Python
Variabel ialah lokasi memori yang dicadangkan guna untuk
menyimpan nilai-nilai. Hal ini berarti bahwa saat kita membuat
sebuah variabel kita memesan beberapa ruang kosong di dalam
memori. Variabel menyimpan data yang proses selama program
dieksekusi, yang nantinya isi dari variabel tersebut dapat diubah
oleh operasi - operasi tertentu pada program yang menggunakan
variable tersebut.
5
6
BAB 2 OPERATOR
A. Operator Aritmatika
7
B. Operator Perbandingan (Comparison Operators)
Operator perbandingan (comparison operators) digunakan
untuk membandingkan suatu nilai dari masing-masing operan.
9
E. Sample Program
10
11
BAB 3 SELEKSI KONDISI
A. Kondisi If
Seleksi kondisi (kondisi if) digunakan untuk mengantisi-pasi
kondisi yang terjadi saat program dijalankan dan me-nentukan
tindakan atau eksekusi apa yang akan diambil sesuai dengan
kondisi yang ada. Pada Python ada beberapa statement/ kondisi
diantaranya adalah if, else dan elif, kondisi if digunakan untuk
mengeksekusi kode jika kondisi bernilai benar. Jika kondisi
bernilai salah maka statement/kondisi if tidak akan di-eksekusi.
Sample If 1:
nilai = 9
#jika kondisi benar/TRUE maka program akan
mengeksekusi perintah dibawahnya
if(nilai > 7):
print("Selamat kita Lulus")
#jika kondisi salah/FALSE maka program tidak akan
mengeksekusi perintah dibawahnya
if(nilai > 10):
print("Selamat kita Lulus")
B. Kondisi If Else
Kondisi if else adalah kondisi dimana jika pernyataan benar
(true) maka kode dalam if akan dieksekusi, tetapi jika bernilai
salah (false) maka akan mengeksekusi kode di dalam else.
12
#Sample If Else 1, if.py:
nilai = 3
#Jika pernyataan pada if bernilai TRUE maka if
akan dieksekusi, tetapi jika FALSE kode pada else
yang akan dieksekusi.
if(nilai > 7):
print("Selamat kita Lulus")
else:
print("Maaf kita Tidak Lulus")
13
C. Kondisi Elif
Seleksi kondisi (kondisi if …. elif) merupakan lanjutan/
percabangan logika dari "if". Dengan elif kita dapat membuat kode
program yang akan menyeleksi beberapa kemungkinan yang dapat
terjadi. Hal ini hampir sama dengan kondisi "else", bedanya
kondisi "elif" dapat mempunyai banyak kemungkinan tidak hanya
satu.
if(hari_ini == "Senin"):
print("Saya akan
kuliah")
elif(hari_ini ==
"Selasa"):
print("Saya akan
kuliah")
x = input ("Masukan
elif(hari_ini == "Rabu"):
angka = ")
print("Saya akan
if x<"5":
kuliah")
print (x,"lebih
elif(hari_ini ==
kecil dari 5")
"Kamis"):
elif x=="5":
print("Saya akan
print (x,"sama
kuliah")
dengan 5")
elif(hari_ini ==
else:
"Jumat"):
print (x,"lebih
print("Saya akan
besar dari 5")
kuliah")
elif(hari_ini ==
"Sabtu"):
print("Saya akan
kuliah")
elif(hari_ini ==
"Minggu"):
print("Saya akan
libur")
14
BAB 4 PERULANGAN
A. While
Perulangan While Loop di dalam bahasa pemrograman Python
dieksesusi berkali-kali selama kondisi bernilai benar atau True.
15
B. For
Perulangan For pada Python memiliki kemampuan untuk
mengulangi item dari urutan apapun, seperti list atau string.
angka = [1,2,3,4,5]
for x in angka:
print(x)
Hasil
Hasil
C. Nested
Bahasa pemrograman Python memungkinkan penggunaan satu
lingkaran di dalam loop lain. Bagian berikut menunjukkan
beberapa contoh untuk menggambarkan konsep tersebut.
16
#Contoh penggunaan Nested Loop, while.py
i = 2
while(i < 100):
j = 2
while(j <= (i/j)):
if not(i%j): break
j = j + 1
if (j > i/j) : print(i, " FTIK USM")
i = i + 1
Hasil
17
D. Sampel Program
Contoh 1, whileIf.py:
nama = "rudin"
kunci = "ndeso"
a=0
while a!=3 :
username = input ("masukan username : ")
password = input ("masukan password : ")
if username == nama and password == kunci :
print ("password benar")
break
elif username == nama or password == kunci:
print ("user or password error")
else :
print ("password salah")
a=a+1
if a==3:
print ("sudah 3x input")
Hasil
Contoh 2:
#Contoh math.py
import math
r=float(input("jari-jari lingkaran="))
luas=math.pi*r*r
print ("Luas lingkaran=",luas)
18
BAB 5 NUMBER, STRING, TANGGAL
DAN WAKTU
A. Number
Number merupakan tipe data dalam Python yang menyimpan
nilai berupa angka atau numerik, number juga tipe data yang tidak
berubah, ini berarti mengedit nilai dari sejumlah tipe data akan
menghasilkan objek yang baru dialokasikan.
19
- int(x)= untuk meng-konversi x menjadi plain integer.
- long(x)= untuk meng-konversi x menjadi long integer.
- float(x)= untuk meng-konversi x menjadi floating
point number.
- complex(x)= untuk meng-konversi x menjadi complex
number dengan real part x dan imaginary part zero.
- complex(x, y)= untuk meng-konversi x dan y menjadi
complex number dengan real part x dan imaginary part y. x
dan numeric expressions y.
2. Fungsi Matematika
20
3. Fungsi Nomor Acak
4. Fungsi Trigonometri
21
5. Konstanta Matematika
B. String
Hasil
2. Mengupdate String
22
Hasil
a = "Belajar"
b = "Python"
Salah satu fitur Python yang paling keren adalah format string
operator %. Operator ini unik untuk string dan membuat paket
23
memiliki fungsi dari keluarga printf C () C. berikut adalah
contoh sederhananya :
Sintaks untuk triple quotes terdiri dari tiga tanda kutip tunggal atau
ditulis berturut-turut :
24
hanya NEWLINE di dalam penugasan variabel juga
akan muncul."""
print (kutipantiga)
ticks = time.time()
print ("Berjalan sejak 1.00am, 1 Desember 2019:",
ticks)
25
Fungsi Tupel di atas sama dengan struktur struct_time. Struktur ini
memiliki atribut sebagai berikut:
26
#waktu Saat ini
import time;
localtime = time.localtime(time.time())
print ("Waktu Kita saat ini adalah :", localtime)
localtime =
time.asctime( time.localtime(time.time()) )
print ("Waktu Kita saat ini adalah :", localtime)
# Kalender Sebulan
import calendar
4. Modul time
27
28
Modul waktu mempunyai dua atribut penting yaitu :
5. Modul calendar
29
30
BAB 6 FUNGSI DAN MODUL
A. Fungsi
Fungsi adalah blok kode terorganisir yang dapat digunakan
kembali untuk melakukan sebuah tindakan/action. Fungsi
menghasilkan modularitas yang lebih baik untuk aplikasi kita
dengan tingkat penggunaan kode yang lebih tinggi.
1. Mendefinisikan Fungsi
31
Untuk contoh yang lebih jelas silahkan anda coba program berikut;
B. Modul
Modul berfungsi untuk memungkinkan kita mengatur kode
Python secara logis, yaitu dengan mengelompokkan kode terkait ke
dalam modul dan membuat kode lebih mudah dipahami dan
digunakan. Modul adalah objek didalam Python dengan atribut
yang diberi nama yang bisa kita bind dan dijadikan secara referensi.
32
dan variabel. Modul juga bisa menyertakan kode yang bisa
dijalankan secara "runable".
1. Import Statement
33
BAB 7 LIST, TUPLE, DICTIONARY,
OBJECK, DAN CLASS
A. List
1. Membuat List
List adalah tipe data yang paling serbaguna yang terdapat pada
bahasa Python, yang dapat ditulis sebagai daftar nilai yang
dipisahkan koma (item) antara tanda kurung siku. Hal penting
tentang daftar adalah item dalam list tidak boleh sama jenisnya.
34
2. Akses Nilai dalam List
35
4. Hapus Nilai dalam List
36
6. Indexing, Slicing dan Matrix pada List
37
B. Tuple
Tupel adalah sebuah urutan objek Python yang tidak dapat
berubah, Tupel adalah urutan seperti daftar. Perbedaan utama
antara Tupel dan List adalah bahwa data yang ada pada Tupel tidak
dapat diubah, tidak seperti List Python. Tupel mengguna-kan
symbol tanda kurung, sedangkan List Python menggunakan tanda
kurung siku.
38
2. Update Nilai dalam Tuple
39
Sebenarnya, Tuple merespons semua operasi urutan umum yang
kita gunakan pada String di bab sebelumnya. Dibawah ini adalah
tabel daftar operasi dasar pada Tuple Python.
40
C. Dictonary
Dictionary Python sendiri berbeda dengan List ataupun Tuple,
hal ini dikarenakan setiap urutannya berisi key dan value. Setiap
key dipisahkan dari value-nya dengan titik dua (:), item dipisahkan
oleh koma, dan semuanya tertutup dalam kurung kurawal.
Dictionary juga dapat kosong tanpa isi, caranya ditulis hanya
dengan dua kurung kurawal, seperti ini: {}.
Nilai dictionary dapat berupa tipe apa pun, namun key harus
berupa tipe data yang tidak berubah seperti string, angka, atau tupel.
41
3. Hapus Elemen Dictionary
42
5. Method Build-in pada Dictionary
1. Membuat Class
43
class ClassNama:
'Optional class documentation string'
class_suite
2. Mengakses Atribut
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
44
45
BAB 8 STACK DAN QUEUE
A. Stack
Stack adalah tipe data yang bersifat LIFO (Last In First Out),
dimana data yang terakhir masuk akan menjadi data yang pertama
kali dapat dikeluarkan. Struktur data stack mempunyai beberapa
operasi antara lain adalah:
46
B. Queue
Struktur data Queue ini kebalikan dari Stack yaitu seperti
sistem antrian, sistem queue menganut konsep FIFO (First In First
Out). Jenis operasi dalam QUEUE:
47
48
BAB 9 SEARCHING
>>> 15 in [3,5,2,4,1]
False
>>> 3 in [3,5,2,4,1]
True
>>>
A. Sequential Search
49
Di dalam Python posisi relatif tersebut merupakan index dari setiap
item data, karena index dari sebuah item data adalah berupa urutan
angka yang dimulai dari angka terkecil (0,1 ,2, ….) maka sangat
dimungkinkan untuk membaca setiap data dalam list secara
berurutan (sequential), yang kemudian disebut dengan pencarian
secara sequential. Seperti ilustrasi pada gambar di bawah ini:
50
B. Binary Search
Jika data kita adalah data yang telah diurutkan terlebih dahulu
maka Binary search dapat melakukan pencarian lebih cepat jika
dibanding dengan sequential search, dimana proses pencarian data
dalam binary search akan dimulai dari bagian tengah list. Jika item
yang dicari berada di tengah pencarian maka pencarian akan
berakhir, tetapi jika item tidak ditemukan di tengah, pencarian
berikutnya dapat dilakukan di setengah bagian atas atau setengah
bagian bawah, hal ini tergantung pada besar atau kecilnya item data
yang dicari. Proses ini akan diulang terus sampai data yang dicari
ditemukan atau mencapai batas akhir list/ item (tidak ditemukan).
51
Algoritma binary search merupakan contoh yang sangat bagus dari
strategi pencarian data yang disebut divide and conquer, yaitu
dengan cara membagi kasus menjadi bagian yang lebih kecil.
52
BAB 10 SORTING
53
sebuah koleksi data, dibutuhkan beberapa cara yang sistematik
untuk membandingkan nilainya untuk melihat apakah sebuah item
keluar dari urutan. Jumlah operasi perbandingan umumnya
merupakan cara yang paling banyak digunakan untuk mengukur
proses pengurutan. Kedua, jika nilai sebuah item berada dalam
posisi yang tidak benar, relatif terhadap posisi data yang lain,
mungkin diperlukan untuk menukar posisi dari item tersebut.
Menukar posisi sebuah item merupakan operasi yang memerlukan
waktu dan resource dan jumlah operasi pertukaran seperti ini juga
perlu dievaluasi untuk mendapatkan efisiensi keseluruhan dari
sebuah algoritma.
A. Bubble Sort
54
dibandingkan, maka angka ini akan selalu dipindahkan ke samping
kanan hingga ke posisi paling akhir.
55
modifikasi dengan cara menukar posisi item data dalam list jika
diperlukan.
temp = alist[i]
alist[i] = alist[j]
alist[j] = temp
Kode di atas akan menukar isi item i dan j dalam list. Di dalam
Python sedikit berbeda, operasi penukaran data seperti di atas dapat
dilakukan dengan operasi assigment secara simultan, contoh 'a, b
= b, a' perintah ini akan menukar isi data pada variabel a ke
variabel b.
56
B. Selection Sort
57
Gambar di bawah menunjukkan ilustrasi bagaimana algoritma
selection sort berjalan.
58
C. Insertion Sort
59
List dengan satu item pada posisi pertama (posisi 0) awalnya
dianggap sudah dalam keadaan terurut. Pada setiap siklus
berikutnya satu item data lain akan disisipkan pada posisi yang
tepat di bagian awal list, sehingga akhirnya seluruh data dalam list
akan urut dengan benar.
60
list dalam keadaan terurut. Seperti ditunjukkan pada gambar di
bawah:
61
D. Merge Sort
62
Gambar (b) merge sort
63
Cara kerja program di atas adalah, sekali fungsi merge sort di
panggil, maka fungsi akan memecah list menjadi dua sublist dan
memanggil dirinya sendiri (rekursif, baris 8-9) untuk mengurutkan
data pada masing-masing sub-list. Selanjutnya baris kode 11-31
bertanggung jawab untuk melakukan proses penggabungan (merge)
dua sublist menjadi sebuah list yang terurut. Operasi penggabungan
menempatkan setiap item data kembali ke list awal (alist) satu demi
satu secara berulang dengan mengambil item paling kecil dari
sublist.
* Catatan,
Pada saat list terdiri dari angka 44, 55, 20 maka proses memecahan
list menjadi tidak berimbang. Sublist pertama terdiri atas 44, dan
sublist kedua terdiri atas angka 55 dan 20.
64
E. Quick Sort
65
paling kanan list (posisi 1 dan 8 pada gambar di bawah). Tujuannya
adalah memindahkan item-item yang terletak di sisi yang salah
yang dilihat dari sisi pivot value, selain itu juga mengabungkan
item pada split point.
66
Dari arah sebaliknya, rightmark dicari item yang nilainya lebih
kecil dari pivot value. Dari proses ini, dari arah leftmark pencarian
berhenti pada angka 93, sedangkan dari arah rightmark pencarian
akan berhenti pada angka 20. Selanjutnya angka 93 dapat ditukar
posisinya dengan angka 20, dan dilanjutkan proses yang sama
sampai di peroleh kondisi dimana posisi leftmask > rightmark, dan
pada saat kondisi itu terjadi maka posisi dari rightmark akan
menjadi titik split point. Posisi split point sekarang dapat di tukar
dengan posisi pivot value dan sekarang pivot value berada pada
posisi yang benar, untuk lebih jelas dapat dilihat pada gambar di
bawah:
67
68
BAB 11 TREE DAN ALGORITMANYA
A. Definisi Tree
69
B. Implementasi Binary Tree dengan menggunakan Class
def insertLeft(self,newNode):
if self.leftChild == None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
def insertRight(self,newNode):
if self.rightChild == None:
self.rightChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.rightChild = self.rightChild
self.rightChild = t
70
# membaca children jalur kanan
def getRightChild(self):
return self.rightChild
# membaca children dari jalur kiri
def getLeftChild(self):
return self.leftChild
# memberi label Root
def setRootVal(self,obj):
self.key = obj
# membaca label Root
def getRootVal(self):
return self.key
C. Tree Traversal
Preorder:
Penelusuran node berawal dari root, kemudian berlanjut ke
turunan dari sebelah kiri, jika jalur kiri sudah tidak ada anak lagi,
diteruskan ke jalur turunan sebelah kanan, terus sampai akhir node.
Atau pertama menuju ke node root kemudian secara recursive
melakukan preorder pada subtree sebelah kiri, dan diikuti dengan
traversal preorder secara recursive ke subtree sebelah kanan.
Implementasi kode:
def preorder(tree):
if tree:
print(tree.getRootVal())
preorder(tree.getLeftChild())
preorder(tree.getRightChild())
71
Inorder:
Melakukan traversal inorder secara recursive pada subtree
sebelah kiri, menuju ke node root, dan yang terakhir melakukan
traversal inorder secara recursive pada subtree yang berada pada
sebelah kanan.
Implementasi Kode:
def inorder(tree):
if tree != None:
inorder(tree.getLeftChild())
print(tree.getRootVal())
inorder(tree.getRightChild())
Postorder:
Melakukan traversal postorder secara recursive pada subtree
bagian kiri dan kanan diikuti dengan berkunjung ke node root.
def postorder(tree):
if tree != None:
postorder(tree.getLeftChild())
postorder(tree.getRightChild())
print(tree.getRootVal())
72
node (kecuali node Root) terhubung dengan satu penguhubung
yang menuju ke dalam node dan beberapa penghubung yang
mengarah keluar dari pada node.
Leaf node adalah sebuah node yang tidak memiliki children (anak)
73
Level:
74
DAFTAR PUSTAKA
75