Struktur Data Dan Algoritma - Universitas Indonesia

2y ago
20 Views
2 Downloads
851.69 KB
49 Pages
Last View : 17d ago
Last Download : 3m ago
Upload by : Konnor Frawley
Transcription

Struktur Data dan AlgoritmaImplementasi ADT: Linked - ListSuryana Setiawan, Ruli Manurung & Ade Azurat(acknowledgments: Denny) Fasilkom UISUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P2009/2010 – Ganjil – Minggu 6

Outline Linked Lists vs. ArrayLinked Lists dan IteratorsVariasi Linked Lists: Doubly Linked ListsCircular Linked ListsSorted Linked ListsSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 62

Tujuan Memahami struktur data linked-list Memahami kompleksitas dari operasioperasi pada ADT linked-list antara laininsert, delete, read Dapat mengimplementasikan linked-listSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 63

Linked ListsA0A1A2A3 Menyimpan koleksi elemen secara noncontiguously. Elemen dapat terletak pada lokasi memory yangsaling berjauhan. Bandingkan dengan arraydimana tiap-tiap elemen akan terletak pada lokasimemory yang berurutan. Mengizinkan operasi penambahan ataupenghapusan elemen ditengah-tengah koleksidengan hanya membutuhkan jumlahperpindahan elemen yang konstan. Bandingkan dengan array. Berapa banyak elemenyang harus dipindahkan bila akan menyisipielemen ditengah-tengah array?SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 64

Iterate the Linked List Items are stored in contiguous array://step through array a, outputting each itemfor (int index 0; index a.length; index ) System.out.println (a[index]); Items are stored in a linked list noncontiguously :// step through List theList, outputting each itemfor (ListNode p theList.first; p ! null; p p.next) System.out.println (p.data);A0A1firstSUR – HMM – AAA2A3lastFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 65

Implementasi: Linked Lists Sebuah list merupakan rantai dari object bertipeListNode yang berisikan data dan referensi (pointer)kepada ListNode selanjutnya dalam list. Harus diketahui dimana letak elemen pertama!ListNodeA0A1firstSUR – HMM – AAA2A3lastFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 66

ListNode: Definisipublic class ListNode {Object element;// data yang disimpanListNode next;// constructorsListNode (Object theElement, ListNode n) { element theElement;next n;}ListNode (Object theElement) { this (theElement, null);}ListNode () { this (null, null);}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 67

Catatan Penting! Yang disimpan dalam ListNode adalahreference dari object-nya, BUKAN object-nyaitu sendiri atau salinan dari object-nya !!!SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 68

Linked List: Insertionabcdcurrent Menyisipkan X pada lokasi setelah current.axcurrentxSUR – HMM – AAbFasilkom UI – IKI20100/IKI80110Pcd2009/2010 – Ganjil – Minggu 69

Langkah-langkah menyisipkan Menyisipkan elemen baru setelah posisicurrent// Membuat sebuah nodetmp new ListNode( );// meletakkan nilai x pada field elementmp.element x;// node selanjutnya dari x adalah node btmp.next current.next;// node selanjutnya dari a adalah node xcurrent.next tmp;acurrentbxtmpSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 610

Langkah-langkah menyisipkan yang lebih efisientmp new ListNode (x, current.next);acurrentbxcurrent.next tmp;acurrentSUR – HMM – AAbxFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 611

Linked List: menambahkan elemen diakhir list menambahkan X pada akhir list// last menyatakan node terakhir dalam linked listlast.next new ListNode();last last.next; // adjust lastlast.element x; // place x in the nodelast.next null; // adjust nextabcxdlastlast lebih singkat:last last.next new ListNode (x, null);SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 612

Linked Lists: menghapus elemen Proses menghapus dilakukan denganmengabaikan elemen yang hendak dihapusdengan cara melewati pointer (reference)dari elemen tersebut langsung pada elemenselanjutnya.Elemen x dihapus dengan meng-assign fieldnext pada elemen a dengan alamat b.axbcurrentabcurrentSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 613

Langkah-langkah menghapus elemen Butuh menyimpan alamat node yang terletaksebelum node yang akan dihapus. (padagambar node current, berisi elemen a) current.next current.next.next;axbcurrentKapan node x dihapus? Oleh siapa?SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 614

Langkah-langkah menghapus elemenaxbcurrent Tidak ada elemen lain yang menyimpanalamat node x. Node x tidak bisa diakses lagi. Java Garbage Collector akan membersihkanalokasi memory yang tidak dipakai lagi atautidak bisa diakses. Dengan kata lain, menghapus node x.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 615

Pertanyaan: Selama ini contoh menyisipkan danmenghapus elemen dengan asumsi ada nodecurrent yang terletak sebelumnya. Bagaimana menambahkan node pada urutanpertama pada linked list?Bagaimana menghapus elemen pertama padalinked list?SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 616

Header Node Menghapus dan menambahkan elemen pertamamenjadi kasus khusus.Dapat dihindari dengan menggunakan header node; Tidak berisikan data, digunakan untuk menjaminbahwa selalu ada elemen sebelum elemenpertama yang sebenarnya pada linked list. Elemen pertama diperoleh dengan: current header.next; Empty list jika: header.next null;Proses pencarian dan pembacaan mengabaikanheader node.ABCHeaderSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 617

Linked Lists: List interfacepublic interface List{/**Test if the list is logically empty.@return true if empty, false otherwise.*/boolean isEmpty ();/**Make the list logically empty.*/void makeEmpty ();}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 618

Linked Lists: List implementationpublic class LinkedList implements List{// friendly data, so LinkedListItr can have accessListNode header;/**Construct the list*/public LinkedList () {header new ListNode (null);}/**Test if the list is logically empty.@return true if empty, false otherwise.*/public boolean isEmpty( ) {return header.next null;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 619

Linked Lists: List implementation/**Make the list logically empty.*/public void makeEmpty( ) {header.next null;}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 620

Latihan Buatlah sebuah method untuk menghitungjumlah elemen dalam sebuah linked list!public static int listSize (LinkedList theList) {}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 621

Diskusi Apakah implementasi tersebut benar? Bila kita hendak menambahkan method lainpada sebuah List, haruskah kita mengaksesfield next dari object node dan objectcurrent dari object list? Dapatkah kita memiliki interface yang lebihbaik, dan lebih seragam serta lebihmemudahkan untuk mengembangkanmethod-method lain?SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 622

Iterator Class Untuk melakukan sebagian besar operasi-operasi padaList, kita perlu menyimpan informasi posisi saat ini.(current position).Kelas List menyediakan method yang tidakbergantung pada posisi. Method tersebut antara lain:isEmpty, dan makeEmpty.List iterator (ListItr) menyediakan method-methodyang umum digunakan untuk melakukan operasi padalist antara lain: advance, retrieve, first.Internal struktur dari List di encapsulasi oleh Listiterator.Informasi posisi current disimpan dalam objectiterator.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 623

Iterator Class// Insert x after current positionvoid insert (x);// Remove xvoid remove (x);// Remove item after current positionvoid removeNext( );// Set current position to view xboolean find( x );// Set current position to prior to firstvoid zeroth ();// Set current position to firstvoid first( );// Set current to the next nodevoid advance ();// True if at valid position in listboolean isInList ();// Return item in current positionObject retrieve() Exceptions thrown for illegal access, insert, or remove.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 624

Contoh Sebuah method static untuk menghitungjumlah elemen dalam sebuah list.public static int listSize (List theList) {int size 0;ListItr itr new ListItr (theList);for (itr.first(); itr.isInList(); itr.advance()){size ;}return size;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 625

Java Implementations Sebagian besar cukup mudah; seluruhmethod relatif pendek.ListItr menyimpan reference dari objectlist sebagai private data.Karena ListItr is berada dalam packageyang sama dengan List, sehingga jika fielddalam List adalah (package) friendly,maka dapat di akses oleh ListItr.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 626

LinkedListItr implementationpublic class LinkedListItr implements ListItr/** contains List header. */protected LinkedList theList;/** stores current position. */protected ListNode current;/**Construct the list.As a result of the construction, the current position isthe first item, unless the list is empty, in which casethe current position is the zeroth item.@param anyList a LinkedList object to which this iterator ispermanently bound.*/public LinkedListItr( LinkedList anyList ) {theList anyList;current theList.isEmpty( ) ? theList.header :theList.header.next;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 627

/**Construct the list.@param anyList a LinkedList object to which this iterator ispermanently bound. This constructor is provided forconvenience. If anyList is not a LinkedList object, aClassCastException will result.*/public LinkedListItr( List anyList ) throws ClassCastException{this( ( LinkedList ) anyList );}/*** Advance the current position to the next node in the list.* If the current position is null, then do nothing.* No exceptions are thrown by this routine because in the* most common use (inside a for loop), this would require the* programmer to add an unnecessary try/catch block.*/public void advance( ){if( current ! null ) current current.next;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 628

/*** Return the item stored in the current position.* @return the stored item or null if the current position* is not in the list.*/public Object retrieve( ) { return isInList( ) ? current.element : null;}/*** Set the current position to the header node.*/public void zeroth( ) { current theList.header;}/*** Set the current position to the first node in the list.* This operation is valid for empty lists.*/public void first( ) { current theList.header.next;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 629

/*** Insert after the current position.* current is set to the inserted node on success.* @param x the item to insert.* @exception ItemNotFound if the current position is null.*/public void insert( Object x ) throws ItemNotFound{if( current null ) throw new ItemNotFound( "Insertion error" );ListNode newNode new ListNode( x, current.next );current current.next newNode;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 630

/*** Set the current position to the first node containing an item.* current is unchanged if x is not found.* @param x the item to search for.* @return true if the item is found, false otherwise.*/public boolean find( Object x ) {ListNode itr theList.header.next;while( itr ! null && !itr.element.equals( x ) ) itr itr.next;if( itr null ) return false;current itr;return true;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 631

/*** Remove the first occurrence of an item.* current is set to the first node on success;* remains unchanged otherwise.* @param x the item to remove.* @exception ItemNotFound if the item is not found.*/public void remove( Object x ) throws ItemNotFound{ListNode itr theList.header;while( itr.next ! null && !itr.next.element.equals( x ) ) itr itr.next;if( itr.next null ) throw new ItemNotFound( "Remove fails" );itr.next itr.next.next;current theList.header;// Bypass deleted node// Reset current}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 632

/*** Remove the item after the current position.* current is unchanged.* @return true if successful false otherwise.*/public boolean removeNext( ) {if( current null current.next null ) return false;current.next current.next.next;return true;}/*** Test if the current position references a valid list item.* @return true if the current position is not null and is*not referencing the header node.*/public boolean isInList( ) {return current ! null && current ! theList.header;}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 633

Catatan: Exceptions Beberapa method dapat menthrow ItemNotFoundexceptions.Namun, jangan menggunakan exceptions secaraberlebihan karena setiap exception harus di tangkap(caught) atau di teruskan (propagate). Sehinggamenuntut program harus selalu membungkusnyadengan blok try/catchContoh: method advance tidak men-throwexception, walaupun sudah berada pada akhirelemen.Bayangkan bagaimana implementasi methodlistSize bila method advance men-throwexception!SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 634

Linked List Properties Analisa Kompleksitas Running Time Keuntungan insert next, prepend - O(1) delete next, delete first - O(1) find - O(n) retrieve current position - O(1) Growable (bandingkan dengan array) Mudah (quick) dalam read/insert/delete elemen pertama danterakhir (jika kita juga menyimpan referensi ke posisi terakhir,tidak hanya posisi head/current) Kerugian Pemanggilan operator new untuk membuat node baru.(bandingkan dengan array) Ada overhead satu reference untuk tiap nodeSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 635

Mencetak seluruh elemen Linked List Cara 1: Tanpa Iterator,public class LinkedList {looppublic void print () {// step through list, outputting each itemListNode p header.next;while (p ! null) {System.out.println (p.data);p p.next;}}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 636

Mencetak seluruh elemen Linked List(2) Cara 2: Tanpa Iterator, Recursionpublic class LinkedList {.private static void printRec (ListNode node) {if (node ! null) {System.out.println (node.data);printRec (node.next);}}public void print (){printRec (header.next);}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 637

Mencetak seluruh elemen Linked List(3) Cara 3: Recursionclass ListNode{.public void print () { System.out.println (data);if (next ! null) {next.print ();}}} // end of class ListNodeclass LinkedList {public void print () {if (header.next ! null) {header.next.print ();}}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 638

Mencetak seluruh elemen Linked List(4) Cara 4: Menggunakan iteratorclass LinkedList{.public void print (List theList) {ListItr itr new ListItr (theList);for (itr.first(); itr.isInList();itr.advance()){System.out.println (itr.retrieve ());}}}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 639

Sorted Linked Lists Menjaga elemen selalu disimpan terurut.Hampir seluruh operasi sama dengan linkedlist kecuali insert (menambahkan data).Pada dasarnya sebuah sorted linked listadalah sebuah linked list. Dengan demikianinheritance bisa diterapkan. KelasSortListItr dapat diturunkan dari kelasListItr.Perlu diingat, elemen pada sorted linked listharuslah mengimplement Comparable.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 640

Implementasi Terapkan inheritance,Buat method Insert yang akan mengoveridemethod milik kelas LinkedList.public void insert( Comparable X ) SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 641

Catatan Penting: ListItr menggunakan method equals padaimplementasi find dan remove.Harus dipastikan Class yang digunakansebagai element (mis: MyInteger) memilikimethod equalsSignature: (harus sama persis) public boolean equals( Object Rhs ) Signature berikut ini salah!public boolean equals( Comparable Rhs ) method equals dari class Object dapatditurunkan dan digunakan:public boolean equals (Object obj){return (this obj);}SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 642

Variasi Linked Lists Doubly-linked lists: Tiap list nodemenyimpan referensi node sebelum dansesudahnya. Berguna bila perlu melakukanpembacaan linkedlist dari dua arah.prevAnextheadSUR – HMM – AAtailFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 643

Variasi Linked Lists Circular-linked lists: Node terakhirmenyimpan referensi node pertama. Dapatditerapkan dengan atau tanpa header node.prevABCnextfirstSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 644

Doubly-linked lists: InsertNextnewNode new DoublyLinkedListNode(x);1 newNode.prev current;2 newNode.prev.next newNode; a21bx?currentSUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 645

Doubly-linked lists: insertNextA42current1234566prevXB351 nextnewNodenewNode new DoublyLinkedListNode(x);newNode.prev current;newNode.next current.next;newNode.prev.next newNode;newNode.next.prev newNode;current newNode;SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 646

Doubly-linked lists: DeleteCurrent1.2.3.current.prev.next current.next;current.next.prev current.prev;current current.prev;1a3currentSUR – HMM – AA2bxFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 647

Rangkuman ListNodeList, LinkedList dan variasinyaIterator classKelebihan & kekurangan dari linked list GrowableOverhead a pointer, new operator untukmembuat node.Hanya bisa diakses secara sequential.SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 648

Materi Selanjutnya: Stacks & Queues – Bab 6, 11, 16SUR – HMM – AAFasilkom UI – IKI20100/IKI80110P2009/2010 – Ganjil – Minggu 649

Implementasi ADT: Linked -List. SUR –HMM AA Fasilkom UI IKI20100/IKI80110P 2009/2010 Ganjil Minggu 6 2 Outline Linked Lists vs. Array Linked Lists dan Iterators Variasi Linked Lists: Doubly Linked Lists . List iterator (ListItr) menyediakan method-method

Related Documents:

struktur geologi, sedangkan pengetahuan geomorfologi penting untuk mengetahui aktivitas struktur geologi, khususnya aktivitas yang resen. c) Geofsika, oseonografi dan geologi bawah tanah dapat membantu dalam menelaah struktur bawah tanah dan struktur dasar laut. Dengan kata lain, geologi struktur sangat erat

Struktur Geologi Beberapa kenampakan dari “satelite image” DEM, pada kawasan ini dapat dikenal beberapa jenis dan pola struktur. Dari hasil penafsiran dapat di identifikasi 2 jenis struktur ; struktur cincin dan liniasi. Struktur cincin terdapat pada kawasan Cikidang, Cikotok dan G. Peti. Struktur

struktur geologi, sedangkan pengetahuan geomorfologi penting untuk mengetahui aktivitas struktur geologi, khususnya aktivitas yang resen. c) Geofsika, oseonografi dan geologi bawah tanah dapat membantu dalam menelaah struktur bawah tanah dan struktur dasar laut. Dengan kata lain, geologi struktur sangat erat

Kondisi struktur geologi yang terdapat di wilayah kota Bengkulu belum dapat dilakukan dengan teliti dan tepat, sehingga kondisi struktur berupa lipatan dan patahan seperti yang diamati dilapangan belum terlihat dengan memadai. PENDAHULUAN Tata ruang sebagai wujud pola dan struktur ruang terbentuk secara alamiah dan

penyakit stroke serta belum dilakukannya komparasi algoritma C4.5 berbasis PSO dan C4.5 berbasis GA Atas dasar alasan tersebut diatas, maka dilakukan penelitian menggunakan metode klasifikasi algoritma C4.5 berbasis PSO (Particle Swarm Optimization) dan juga C4.5 berbasis Genetic Algorithm dalam memprediksi penyakit stroke.

1.struktur sel saraf 2.struktur saraf parasimpatis 3.struktur medulla spinalis 4.struktur cerebellum Praktikum di laboratorium 1.Mengamati obyek dan menggambar dengan benar 2.Memberi keterangan bagiannya Mahasiswa mampu mengamati obyek dan menggamba r dengan benar, serta memberi ketarngan bagiannya, ser

Aplikasi Tekla Structures dan SAP2000 telah dilakukan pada perencanaan struktur gedung baja untuk mempermudah proses pemodelan, analisis, desain, penggambaran, perhitungan volume material, dan membuatan penjadualan struktur gedung baja. Pada Tugas Akhir ini perencanaan struktur gedung baja 2 (dua lantai)

and Artificial Systems” pada tahun 1975, yang cara kerjanya berdasarkan pada seleksi dan genetika alam. Konsep yang dipergunakan dalam algoritma genetika adalah mengikuti apa yang dilakukan oleh alam. [2] Algoritma genetik khu