Selasa, 27 Maret 2018

Binary Search Data -Roland Harry Tanuwijaya-2101635050

Jadi di pertemuan ke 6 di kelas besar Data Structure saya mempelajari mengenai Binary Search
Tree pada permulaan kami disediakan video yang isinya sebagai berikut:

-Perbedaan antara binary search tree dan  binary tree
-Perbedaan binary tree dan ternary tree
-Perbedaan binary tree dan Grab
-Cara membuat binary search tree

Perbedaan Binary Tree,Ternary Tree, Grab dan Binary Search tree
Binary tree adalah tree yang memiliki anak maksimum 2 setiap parentnya
Ternary tree adalah  tree yang memiliki anak maksimum 3 setiap parentnya
Grab adalah tree yang memiliki looping /perulangan
Binary search tree adalah tree yang memiliki aturan yaitu sebelah kiri dari node parent adalah yang lebih kecil dan kanan yang lebih besar

Konsep Binary Tree :

Contoh pohon biner
dari 9 node, yang di-root
simpul yang berisi 18.

Leaf adalah simpul yang tidak mempunyai anak atau berada paling bawah yaitu 9,12,10,23 pada gambar.
















Type of Binary Tree

PERFECT binary tree  adalah mempunyai 2 anak pada setiap parent kecuali pada leaf

COMPLETE binary tree adalah tidak selalu mempunyai 2 anak setiap parent

Skeewed Binary Tree adalah pohon biner di mana setiap simpul memiliki paling banyak satu anak.

BALANCED binary tree adalah hasil dari Skeewed Binary Tree agar mudah melakukan pencarian dan mempermudah komputer bekerja

PERFECT binary tree

COMPLETE binary tree

Skewed Binary tree



Representation of Binary Tree

Implementasi menggunakan array


Indeks pada larik mewakili nomor node
Indeks 0 adalah simpul Root
Index Left Child adalah 2p + 1, di mana p adalah indeks induk
Indeks Anak Kanan adalah 2p + 2
Induk Indeks adalah (p-1) / 2

Selasa, 20 Maret 2018

Introduction to Binary Tree-Roland Harry Tanuwijaya-2101635050

Jadi di pertemuan ke 5 di kelas besar Data Structure saya mempelajari mengenai Binary Tree, sebagai berikut..
Diantaranya adalah jenis jenis penamaan pada Binary Tree,Konsep pohon,Jenis pohon dan untuk menyelesaikan sebuah perhitungan Prefix, Postfix dan Infix dengan Prefix, Postfix dan Infix transversal

Jenis Jenis Penamaan pada Binary Tree
Derajat Pohon=sub-pohon total dari simpul.
Tingkat= Terletak di anak keberapa suatu cabang
Height= tingkat maksimum simpul di pohon.
Anak  = anak dari suatu cabang pohon 
Sibling  = sodara terdekat suatu pohon
Ancestor = leluhur dari suatu cabang
Descendant = penerus dari suatu cabang

Node di bagian atas disebut sebagai root.
Garis yang menghubungkan orang tua dengan anak itu adalah tepi.
Simpul yang tidak memiliki anak disebut daun.
Node yang memiliki induk yang sama disebut saudara kandung/sibling.
Jika ada garis yang menghubungkan p ke q, maka p disebut sebagai leluhur q, dan q adalah keturunan dari leluhur p.


Konsep Pohon Biner
Pohon biner adalah struktur data pohon berakar di mana setiap node memiliki paling banyak dua anak.

Kedua anak itu biasanya dibedakan sebagai anak kiri dan anak kanan.

Simpul yang tidak memiliki anak disebut daun.

Jenis Pohon Biner
Pohon biner PERFECT adalah pohon biner di mana setiap tingkat berada pada kedalaman yang sama.

Pohon biner LENGKAP adalah pohon biner di mana setiap tingkat, kecuali yang terakhir, terisi penuh, dan semua simpul sejauh mungkin tertinggal. Pohon biner yang sempurna adalah pohon biner lengkap.

Pohon biner yang dikompresi adalah pohon biner di mana setiap simpul memiliki paling banyak satu anak.

Pohon biner BALANCED adalah pohon biner dimana tidak ada daun yang jauh dari akar daripada daun lainnya (skema penyeimbang yang berbeda memungkinkan definisi yang berbeda "jauh lebih jauh").

PrefiksTraversal
Contoh Prefiks transversal :
kekosongan prefiks(struct tnode * curr) {
printf ("% c", curr-> chr);
if (curr-> left! = 0) prefix (curr-> left);
if (curr-> right! = 0) prefix (curr-> right); }
Dalam prefix, Anda harus mencetak / memproses sebelum anaknya diproses.

Postfix Traversal

membatalkan postfix (struct tnode * curr) {
if (curr-> left! = 0) postfix (curr-> left);
if (curr-> right! = 0) postfix (curr-> right); printf ("% c", curr-> chr);
}
Di postfix, Anda harus mencetak / memproses setelah anaknya telah diproses.

Infix Traversal
Bagaimana dengan infiks? Bisakah kita melakukan seperti kode di bawah ini?

kekosongan infix (struct tnode * curr) {
jika (curr-> left! = 0) infix (curr-> left);
printf ("% c", curr-> chr);
if (curr-> right! = 0) infix (curr-> right); }

Selasa, 13 Maret 2018

Linked List Implementation 2-Roland Harry Tanuwijaya-2101635050

Jadi di pertemuan ke 4 di kelas besar Data Structure saya mempelajari mengenai implementasi lebih lanjut mengenai linked list yaitu stack dan queque.

Pertama tama akan dibahas mengenai apa itu stack. stack adalah antrian yang membuat data yang masuk pertama akan keluar belakangan / FiLo/ LiFo. Analoginya seperti tumpukkan piring yang sudah selesai dicuci.
Dalam stack biasanya ada fungsi :
push= untuk menambahkan item.
pop= menghapus sebuah item/ stack.
top =  mengembalikkan item teratas dari stack.
contoh stack application adalah infiks,postfiks dan prefiks.
·         Prefix adalah stack dimana operator berada dikiri operan
Contoh:
1.       3 +2 / 5         = +3/25
2.       1+7/ (8+3)   = +1/7+83

·         Infix adalah stack dimana Operator berada diantara operan
Contoh:
1.       3+2/5            = 3+2/5
2.       1+7/(8+3)    = 1+7(8+3)

·         Postfix adalah stack dimana Operator berada dikanan operan
Contoh:
1.       3+2/5            = 325/+
2.       1+7/(8+3)    = 1783+/+

contoh lain fungsi stack adalah DFS(Depth First Search)
Depth first search adalah mencari kedalam yang nantinya akan dipakai di binary tree.
contohnya
A B C D E maka cara search nya menjadi A C B E D.
DFS adalah untuk menguraikan pengerjaan infiks ke postfiks atau postfiks ke infiks.

Yang kedua dibahas mengenai queque. queque adalah antrian yang membuat data yang masuk pertama keluar juga pertama / FiFo / LiLo . Analoginya seperti orang yang mengantri di bank.

Dalam queque fungsi yang ada sama seperti yang ada di stack tapi yang berbeda adalah top berganti front yaitu mengembalikkan item terdepan dari queque
contoh fungsi queque adalah BFS (Breadth First Search).
contoh search nya adalah jika ada A B C D E maka searchnya menjadi A B C D E

Selasa, 27 Februari 2018

Link List Implementation I-Roland Harry Tanuwijaya-2101635050

Nama saya Roland, Saya binusian 21 pada tgl 27-02-2018 adalah mengenal lebih dalam mengenai Linked List  yaitu Linked list implementation, Pengenalan Linked list telah dibahas pada sesi sebelumnya

Single Linkedlist adalah jenis daftar tertaut yang paling sederhana di mana setiap node berisi data yang sama dan pointer ke simpul berikutnya dari tipe data yang sama.

Sedangkan Double Linkedlist adalah Sama seperti dalam satu linked list, pertama kita harus mengalokasikan simpul baru dan tetapkan nilainya ke sana, lalu kita hubungkan node dengan linked list yang ada.
Single Linkedlist---->Insert
Untuk menyisipkan nilai baru, pertama kita harus mengalokasikan node baru secara dinamis dan memberikan nilai padanya dan kemudian menghubungkannya dengan linked list yang ada.

Seharusnya kita ingin menambahkan simpul baru di depan kepala.

struct tnode * node =
(struct tnode *) malloc (sizeof (struct tnode));
node-> nilai = x;
node-> next = head;

kepala = simpul;

Single Linkedlist---->Delete
Untuk menghapus sebuah nilai, pertama kita harus mencari lokasi
node yang menyimpan nilai yang ingin kita hapus, keluarkan,
dan hubungkan sisa linked list.

Seharusnya nilai yang ingin kita hapus adalah x dan
dengan asumsi x ada dalam linked list dan unik.

Ada dua kondisi yang harus kita perhatikan:

Jika x berada dalam head node atau x tidak berada dalam head node.

-Polinomial Representation
Polinomial diberikan sebagai 6x^3 + 9x^2 +7x+ 1
Setiap istilah individu dalam polinom terdiri dari dua bagian, koefisien dan kekuatan
Di sini, 6, 9, 7, dan 1 adalah koefisien dari persyaratan yang masing-masing memiliki 3, 2, 1, dan 0 sebagai kekuatan masing-masing.

Setiap istilah polinomial dapat direpresentasikan sebagai simpul dari linked list.


-Circular Single Linked List
Secara sirkuler, node terakhir berisi pointer ke node pertama
Kita bisa memiliki daftar terkait melingkar dan juga daftar ganda yang saling terkait.

Tidak ada penyimpanan nilai NULL dalam daftar

-Double Linkedlist --->Insert
Sama seperti dalam satu linked list, pertama kita harus mengalokasikan
simpul baru dan tetapkan nilainya ke sana, lalu kita
hubungkan node dengan linked list yang ada.

Seharusnya kita ingin menambahkan simpul baru di belakang ekor.

struct tnode * node =
(struct tnode *) malloc (sizeof (struct tnode));
node-> nilai = x;
node-> next = NULL;
node-> prev = ekor;
tail-> next = node;

ekor = simpul;

Seharusnya kita ingin memasukkan simpul baru dalam posisi tertentu (apapun
lokasi antara kepala dan ekor)

struct tnode * a = ??;
struct tnode * b = ??;
// node baru akan dimasukkan antara a dan b
struct tnode * node =
(struct tnode *) malloc (sizeof (struct tnode));
node-> nilai = x;
node-> next = b;
node-> prev = a;
a-> next = node;

b-> prev = simpul;

Double Linkedlist ---->Delete
Ada 4 kondisi yang harus kita perhatikan saat menghapus:
Node yang akan dihapus adalah satu-satunya simpul dalam linked list.
Simpul yang akan dihapus adalah kepala.
Simpul yang akan dihapus adalah ekor.
Simpul yang akan dihapus bukan kepala atau ekor.

1. Jika simpul yang akan dihapus adalah satu-satunya simpul:
bebas (kepala);
kepala = NULL;

ekor = NULL;

2. Jika simpul yang akan dihapus adalah kepala:
kepala = kepala-> berikutnya;
bebas (kepala-> prev);
head-> prev = NULL;

3. Jika simpul yang akan dihapus adalah ekor:
ekor = ekor-> prev;
bebas (ekor-> berikutnya);
tail-> next = NULL;


Selasa, 20 Februari 2018

Data Structure & Linked List -2101635050-Roland Harry T

Nama saya Roland, Saya binusian 21 pada tgl 20-02-2018 adalah pengenalan terhadap structure data , dimulai dari materi mengenai
-Array
-Pointer
-Data Structure
-Abstract Data Type

Array
Array adalah sekumpulan data yang sejenis dan dijadikan 1 buah data agar lebih mudah saat pendeklarasian karena tidak membutuhkan banyak nama variabel dan array dimulai dari indeks yang ke 0.
Syntax untuk mendeklarasikan Array di C adalah Type data-name-jumlah data contoh = int angka [20];
untuk memasukkan angka dapat dilakukan disaat pendeklarasian atau ditengah2 contoh = int angka[20] = {5,2,3,4,5,};

Array dapat dibuat dengan banyak dimensi yaitu 1 dimensi yang hanya terdiri dari baris atau 2 dimensi yang terdiri dari baris dan kolom/field dan property seperti pada tabel atau multi dimensi yang terdiri dari banyak dimensi.

Pengoperasian Array ,
Ada sejumlah operasi yang bisa dilakukan pada array hampir semuanya dapat dilakukkan pada data:
-Traversal
-Insertion
-Searching
-Deletion
-Merging
-Sorting

Pointer 
Pointer adalah variabel yang menunjuk alamat variabel lainnya.
Ada 2  tanda penting pada penulisan pointer yaitu * untuk operator deferencing dan & untuk menunjukkan suatu alamat

contoh pointer =
int x;
int *p;
*p= &x;
*p=7;
printf("%d", x);
maka yang di print nilainya adalah 7

Type of Data structure
Beberapa contoh umum dari struktur data meliputi:
-Arrays
-Linked lists= seperti mengikat suatu data dengan yang lainnya
-Queues= seperti mengantri di Atm yaitu First In First out atau Last in Last out
-Stacks= seperti mengambil shuttlekok di bulutangkis yaitu First in Last out atau Last in First out
-Binary trees =Seperti dalam pelajaran Matematika Diskrit mengenai graph Teory
-Hash tables

Abstract Data Type
Abstract Data Type (ADT) adalah tipe data yang disusun sedemikian rupa sehingga spesifikasi objek dan spesifikasi operasi pada objek dipisahkan dari representasi objek dan pelaksanaan operasi.

Pertanyaan dari Dosen Pengajar yang harus dicari :

1.       Berapa Banyak Dimensi dan Maksimum dari Array ?

2.       Perbedaan DoublePointer dengan Single Pointer? Dan berapa maksimum dimensi nya??

3.       Kekurangan dari array ialah?

4.       Perbedaan queues dan stacks ialah?



Jawab :

1.Banyak Dimensi dan Maksimum dari Array ialah :
Array dapat dijadikan banyak dimensi ( disebut juga multi dimensi) maka array tidak memiliki batasan maksimum nya .
2 Perbedaan dari single pointer dan double pointer adalah jika ada satu pointer yang hilang di double pointer maka suatu data tidak akan masuk nilainya/ jika bertahap maka tahapnya berhenti di saat pointer selanjutnya hilang. Jika di single pointer mengurangi kejadian seperti ini.
3.Kekurangan dari array ialah jika ada suatu array yang kosong maka akan membuang memory. Dan juga jika kita tidak tau berapa jumlah array yang akan dibutuhkan maka akan ada array yang kosong
4.Perbedaan queues dan stacks ialah , dalam queues , antrian pertama ialah antrian yang yang pertama masuk, dan pertama juga keluar (selesai). Namun pada stacks, (tumpukan ) yang pertama masuk akan menjadi yang terakhir keluar.Yang terakhir masuk akan menjadi yang pertama keluar.