Minggu, 24 Juni 2018

Struktur Data : Infix to Postfix Expression

  Dalam materi sebelumnya telah kita bahas konsep dasar dari infix, postfix dan prefix. kali ini kita akan membahas tentang algoritma untuk mengonversi dari infix ke postfix. Dari materi sebelumnya telah kita ketahui caranya namun saat ini kita akan coba dengan manual.

  Untuk mengonvert dari infix ke postfix kita akan dahulukan operator kemudian akan disusul oleh operand.
Langkah operasi :
1. Buat sebuah stack untuk menyimpan operator. buat list kosong untuk menampung hasil.
2. Pisahkan inputan infix dalam bentuk string dengan menggunakan metode split.
3. Kita periksa token list dari kiri ke kanan.
  • jika token adalah operand, append kedalam output list.
  • jika token adalah kurung buka "(", push kedalam stack.
  • jika token adalah kurung buka ")", pop (keluarkan) isi stack sampai kurung buka dikeluarkan. append setiap operator kedalam output list.
  • jika token adalah operator, *, /, +, atau -, push kedalam stack. namun, pertama-tama hapus semua operator yang sudah ada di stack yang memiliki prioritas yang lebih tinggi atau sama dan append ke dalam output list.
4. Setelah inputan telah kita proses, cek stack. lalu keluarkan semua isinya dan masukkan kedalam output list.

  Algoritma pemrograman yang diimplementasikan ke dalam bahasa Pyhton beserta penjelasannya (disetiap baris code) bisa di perhatikan gambar di bawah ini : 
full source code :
penjelasan dalam code:

Langkah 1 & 2
Langkah 3 & 4
  Sekian materi untuk korversi dari infix to posfix yang bisa kami sampaikan, mohon maaf apabila terdapat kekeliruan dalam pengetikan algoritmanya, kami menerima saran dari kalian langsung saja komentar di kolom komentar di bagian bawah postingan ini 😁. Sampai jumpa di materi selanjutnya 😍.
Share:

Struktur Data : Postfix, Infix, Prefix

Hai semua kali ini kita akan membahas sesuatu hal penting dan merupakan topik yang sangat menarik dalam ilmu komputer dimana kita temukan aplikasi susunan struktur data. dan topik kita kali ini adalah evaluasi dari operasi aritmatika dan ekspresi logic.

bagaimana cara kita menuliskan sebuah ekspresi?
contohnya:
A+B*C
2 + 5 * 3
Keterangan: A ,B ,C ,2 ,3 ,5 adalah Operand.
+,*  adalah Operator.


  Dalam struktur data yang kita pelajari secara umum ada 3 notasi operasi yang dilakukan untuk suatu operasi aritmatika,yaitu Prefix,Infix,dan postfix.Dan untuk mengetahui notasi-notasi yang diatas itu,sebelumnya kita harus mengenal dan mengetahui indikator yang ada di notasi itu tersebut.

Notasi ini terbentuk dari Operand dan Operator.
Operand adalah data atau nilai yang membantu dalam proses,sedangkan Operasi adalah fungsi yang digunakan dalam proses.

Notasi ada 3 jenis, yaitu Prefix,Infix dan Postfix yang seperti kita ketahui di atas:

1.Prefix adalah notasi yang terbentuk atas operator dengan operand, dimana oprator didepan operand.
 contoh: A + B * C (infix).
 maka notasi prefixnya adalah: +A*BC.

 Pemecahannya:

   A+B*C

  Diketahui ada 3 operand yaitu: A, B, C dan 2 operand yaitu: +, *.proses dimulai dengan melihat dari hirarkhi oprator.Contoh diatas operator yang tertinggi adalah * kemudian +. Tanda * diapit oleh 2 operand yaitu B*C, prefixnya dengan menggabungkan operand dan memindahkan operator ke depan dari operand,sehingga fungsi B*C, notasi prefixnya menjadi *BC.

Sehingga hasil sementara dari notasi prefix adalah:
   A+*BC

  Selanjutnya mencari prefix untuk operator yang berikutnya yaitu  +, cara yang dilakukan sama seperti diatas, operator + diapit oleh operand, yaitu A dan *BC, gabungkan operand,sehingga menjadi A*BC,lalu pindahkan operator kedepan operand,sehingga hasil akhir menjadi :
  +A*BC.

jika digambarkan :


2.Infix adalah notasi yang membentuk atas operator dengan operand,dimana operator berada diantara operand.
 Contoh :
      - A + B * C
      - (A + B) * C
      - A - (B + C) * D


3.Postfix adalah notasi yang membentuk atas operator dengan operand, dimana operator berada dibelakang operand.
 Contoh : A + B * C ( infix).
maka notasi postfix adalah ABC*+.

Pemecahannya:

      A + B * C

   Diketahui ada 3 operand yaitu : A,B,C dan 2 operator yaitu : +, *. proses dimulai dengan melihat dari hirarkhi operator.Contoh diatas operator yang tertinggi adalah * kemudian +.

Tanda * diapit oleh kedua operand yaitu B dan C yaitu B*C, postfix dengan menggabungkan operand B dan C menjadi BC,lalu memindahkan operator ke belakang operand C, sehingga fungsi B*C, notasi postfixnya menjadi BC*.Sehingga hasil sementara dari notasi postfix adalah A + BC*
  Selanjutnya mencari postfix untuk operator yang berikutnya, yaitu +, dengan cara yang dilakukan sama seperti di atas, operator + diapit oleh 2 operand, yaitu : A dan BC* gabungkan operand tersebut,sehingga menjadi ABC*,lalu pindahkan operator + kebelakang operand ABC*.
Sehingga hasil akhir  menjadi :   ABC*+.

Contoh Notasi Huruf :

Contoh Notasi Angka:


Share:

Selasa, 19 Juni 2018

Struktur Data - Python : Graph


Salam semangat sobat kodingers 😁 semoga selalu dalam keadaan semangat yang menggebu  - gebu untuk ngoding yaa 😂. Yup kami kembali lagi dengan materi baru tentunya tak kalah menarik dari postingan - postingan sebelumnya 😁.  Kali ini kami akan membahas tentang graph. Kira - kira seperti apa ya graph itu? 😁. Langsung saja yuk kita simak 😄.

Graph


Sebelum kita bahas lebih lanjut, perhatikan gambar huruf a - e yang saling berhubungan di atas. Bagaimana setelah kalian melihat gambar di atas? Terbesitkah di benak kalian bagaimana ya caranya untuk menuliskan algoritma pemrogramannya ke dalam ex. Pyhon? Bagaimana juga ya cara mengetahui ada berapa jalur alternatif yang lebih singkat untuk di lewati? 
Sebelum kita melihat algoritmanya, perlu diperhatikan definisi graph secara singkat ialah metode pemetaan data dengan memberikan informasi pada kumpulan titik (node) yang dihubungkan dengan segmen garis. Titik atau node disebut verteks, sedangkan segmen garis disebut dengan ruas (edge). 
Algoritma pemrograman yang diimplementasikan ke dalam bahasa Pyhton beserta penjelasannya (disetiap baris code) bisa di perhatikan gambar di bawah ini : 

Algoritma all_path (seluruh jalur keseluruhan)

Algoritma shortest_path (jalur alternatif)

Algoritma menampilkan semua jalur

Pembentukan graph dan pemanggilan

Output dari graph di atas


Sekian materi graph yang bisa kami sampaikan, mohon maaf apabila terdapat kekeliruan dalam pengetikan algoritmanya, kami menerima saran dari kalian langsung saja komentar di kolom komentar di bagian bawah postingan ini 😁. Sampai jumpa di lain kesempatan ya sob. See youuu 😍.
Share:

Sabtu, 16 Juni 2018

Struktur Data - Python : Tree


Assalamu'alaikum sobat kodingers 😁, gimana nih kabar kalian? semoga dalam keadaan sehat dan selalu kuat ngoding yah 😂. Setelah lumayan lama tidak posting, kali ini kami kembali dengan postingan baru yang akkan membahas tentang "Tree" dalam struktur data. Kira-kira tree itu apa ya kok seperti pohon? 😂. Untuk lebih jelasnya yuk langsung saja kita simak 👂.

Tree


Pada postingan-postingan sebelumnya kita telah belajar mengenai menyimpanan data secara linear, seperti hasing, stack, queue dan linked list. Pada postingan kali ini kita akan mempelajari Tree yang memiliki cara penyimpanan data non-linear melainkan secara hierarki. Bagaimana maksudnya? Untuk mempermudahnya kita bayangkan saja susunan keluarga yang kita miliki. Jika diperhatikan dalam susunan tersebut kita akan menemukan siapa kakek kita, orang tua kita, saudara orang tua atau paman kita, sepepupu kita, saudara kita, atau bahkan cucu kita bukan? Begitulah kira - kira penggambarannya dari pengertian Tree penyimpanan data secara hierarki yang tersusun secara urut dari kakek hingga cucu. Berikut atribut - atribut yang terdapat dalam Tree :

  1. Node: Serupa dengan simpul, node merupakan kerangka dasar dari sebuah tree (pohon), kadang disebut sebagai "key". Sebuah node dapat mengandung informasi tambahan (atau payload), meskipun informasi dalam node ini tidak wajib tetapi sangat penting dalam implementasi struktur data tree.
  2. Edge: Garis penghubung antara dua buah node yang menunjukkan adanya relasi (hubungan) diantara kedua node. Setiap node (kecuali node root) terhubung dengan satu penguhubung yang menuju ke dalam node dan beberapa penghubung yang mengarah keluar dari node.
  3. Root: Satu-datunya node dalam tree yang tidak memiliki garis penghubung (edge) yang mengarah ke dalam root, edge yang menghubungkan root semua mengarah ke luar dari node. (cikal-bakal)
  4. Path: Jalur yang menghubungkan antara satu node dengan node yang lain, dapat dterdiri dari beberapa node dan edge yang berkesinambungan.
  5. Children: Node yang terhubung dengan edge yang mengarah ke dalam node disebut children (selalu memiliki parent)
  6. Parent: Node yang terhubung dengan edge yang mengarah keluar (memiliki anak).
  7. Sibling: Node-node yang memiliki parent yang sama.
  8. Subtree: Sekelompok node beserta turunnanya (anak-anaknya).
  9. Sebuah node yang tidak memiliki children (anak)
Berikut implementasinya dalam bahasa pemrograman Python beserta penjelasannya pada beberapa baris : 


Output :
Dari output di atas dapat diartikan bahwa "a" bertindak sebagai parent/root, "b" merupakan anak kiri dan "c" merupakan anak kanan. Sebagai tambahan referensi, ada 3 metode penelurusan Tree yang dikenal dengan Tree Traversal yang akan kita bahas secara singkat saja. Yuk langsung saja ek tkp 😁.

Tree Traversal

Ada tiga pola umum yang digunkaan untuk mengunjungi semua node dalam tree. Perbedaan antara 3 pola ini adalah urutan kunjungan terhadap node. Kunjungan   ini dinamakan “traversal.”, yaitu preorder, inorder dan postorder. Berikut ini adalah definisinya :

  • Preorder: Penelusuran node berawal dari ROOT, kemudian berlanjut ke turunan dari sebelah kiri, jika sedah jalur kiri sudah tidak ada anak lagi, diteruskan ke jalur turunan sebelah kanan, terus berlanjut sampai akhir node. Atau pertama menujuke node ROOT kemudian secara recursive mealkukan preorder pada subtree sebelah kiri, diikuti dengan traversal preorder secara recursive ke subtree sebelah kanan.
  • Inorder: Melakukan traversal inorder secara recursive pada subtree sebelah kiri, menuju ke node ROOT, dan terakhir melakukan traversal inorder secara recursive pada subtree sebelah kanan.
  • Postorder: Melakukan traversal postorder secara recursive pada subtree bagian kiri dan kanan diikuti dengan berkunjung ke node ROOT.
Implementasi algoritma ketiganya dalam Python seperti berikut :

Kira - kira seperti itulah materi yang bisa kami sampaikan hari ini 😁 mengenai Tree. Stay tuned pada postingan - postingan selanjutnya karena masih ada materi yang akan kami bagikan. Semoga bermanfaat, sampai jumpaaaa gaes 😁. Wassalamu'alaikum Wr. Wb.

Share:

Jumat, 08 Juni 2018

Struktur Data : Linked list in python



Dalam struktur “Struktur data dalam Python” ini, saya akan membahas struktur data utama sering muncul dalam segala jenis pekerjaan insinyur / wawancara magang yaitu linked list

Apa itu linked list?


ini adalah gambaran dari linked list. ada 2 hal penting yang harus di perhatikan:
1. Sebuah linked list berisikan node.
2. Setiap node berisikan value (nilai) dan penunjuk (panah) ke node lain.

value
penunjuk

node di paling awal dalam linked list biasa disebut dengan header.
pada dasarnya linked list adalah rangkaian nilai yang terhubung dengan penghubung (pointer).

Mengapa harus menggunakan Linked List?


Linked list sering dibandingkan dengan array (list). Sedangkan array adalah ukuran tetap dari rangkaian, daftar yang ditautkan dapat memiliki elemen untuk dialokasikan secara dinamis. Apa pro dan kontra dari karakteristik ini? Berikut beberapa hal yang utama:

Keuntungan


Linked list dapat menghemat memori. Dia hanya mengalokasikan memori yang diperlukan untuk nilai yang akan disimpan. Dalam array, Anda harus mengatur ukuran array sebelum mengisinya dengan nilai, yang berpotensi membuang memori.

Node linked list dapat tinggal di mana saja dalam memori. Sedangkan array membutuhkan urutan memori yang akan dimulai, selama referensi diperbarui, setiap node dalam linked list dapat dipindahkan secara fleksibel ke alamat yang berbeda.

Kerugian


Ketika mencari nilai dalam linked list, Anda harus mulai dari awal rantai, dan periksa satu elemen pada suatu waktu untuk nilai yang Anda cari. Jika linked list n memiliki elemen panjang, ini bisa memakan waktu hingga n time. Sebaliknya banyak bahasa memungkinkan pencarian konstan dalam array.

penerapan linked list:
untuk kelas node
class Node:
    def __init__(self,val):
        self.val = val
        self.next = None # the pointer initially points to nothing

setelah memiliki kelas node kita bisa mengimplementasikan linked list berikut:
node1 = Node(12) 
node2 = Node(99) 
node3 = Node(37) 
node1.next = node2 # 12->99
node2.next = node3 # 99->37
# the entire linked list now looks like: 12->99->37



Anda mungkin bertanya-tanya mengapa saya tidak menerapkan kelas LinkedList. sebenarnya, linked list hanyalah sekelompok node yang terhubung bersama. Kami dapat merujuk ke header node sebagai linked list awal. Dalam contoh di atas, node1 adalah header node, dan itu juga dapat mewakili posisi dimulainya linked list.

Share:

BTemplates.com