Jumat, 25 Maret 2011

Linked list

Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.

Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer.

--------       --------      --------
Mesin Data Data
-------- -------- --------
(kepala) ---> Pointer ---> Pointer --
-------- -------- --------

Programmer membaca data menyerupai kondektur yang ingin memeriksa karcis penumpang. Programmer menyusuri linked list melalui kepalanya, dan kemudian berlanjut ke gerbong (data) berikutnya, dan seterusnya sampai gerbong terakhir (biasanya ditandai dengan pointer menunjukkan alamat kosong (NULL)). Penyusuran data dilakukan secara satu persatu sehingga penyusuran data bekerja dengan keefektifan On. Dibandingkan array, ini merupakan kelemahan terbesar linked list. Pada array, apabilan programmer ingin mengakses data ke-n (index n), maka programmer dapat langsung mengaksesnya. Sedangkan dengan linked list programmer harus menyusuri data sebanyak n terlebih dahulu.

Jenis-Jenis Linked List


  • Singly linked list
  • Double linked list
  • Circular Linked List

Sumber : http://id.wikipedia.org/wiki/Linked_list

Searching dan Sorting

Dalam ilmu komputer, sebuah algoritma pencarian, secara umum, adalah suatu algoritma untuk mencari item dengan sifat tertentu antara koleksi item. Item dapat disimpan secara individual sebagai rekaman dalam database, atau mungkin elemen ruang pencarian didefinisikan oleh rumus matematika atau prosedur, seperti akar dari suatu persamaan dengan variabel integer, atau kombinasi dari dua, seperti Hamiltonian sirkuit dari grafik.

Kelas algoritma pencarian

Untuk ruang pencarian virtual

Algoritma untuk mencari ruang virtual yang digunakan dalam masalah kendala kepuasan, dimana tujuannya adalah untuk menemukan satu set tugas nilai variabel tertentu yang akan memenuhi persamaan matematika spesifik dan inequations. Mereka juga digunakan ketika tujuannya adalah untuk menemukan tugas variabel yang akan memaksimalkan atau meminimalkan fungsi tertentu dari variabel tersebut. Algoritma untuk masalah ini termasuk pencarian brute-force dasar (juga disebut "naif" atau "kurang informasi" pencarian), dan berbagai heuristik yang mencoba untuk mengeksploitasi pengetahuan parsial tentang struktur ruang, seperti relaksasi linier, generasi kendala, dan kendala propagasi.

Sebuah subclass penting adalah metode pencarian lokal, yang melihat elemen ruang pencarian sebagai simpul dari graf, dengan tepi yang didefinisikan oleh satu set heuristik berlaku untuk kasus ini, dan memindai ruang dengan bergerak dari item ke item di sepanjang tepi , misalnya menurut keturunan curam atau kriteria terbaik pertama, atau dalam sebuah pencarian stokastik. Kategori ini berisi berbagai macam metode metaheuristic umum, seperti simulated annealing, tabu search, A-tim, dan pemrograman genetik, yang menggabungkan heuristik sewenang-wenang dengan cara tertentu.

Kelas ini juga mencakup berbagai algoritma pencarian pohon, yang melihat unsur-unsur sebagai simpul dari pohon, dan traverse bahwa pohon di beberapa pesanan khusus. Contoh yang terakhir termasuk metode lengkap seperti pencarian depth-first dan pencarian breadth-first, serta berbagai metode pemangkasan pohon pencarian heuristic-based seperti backtracking dan cabang dan terikat. Tidak seperti metaheuristics umum, yang di tempat kerja terbaik hanya dalam arti probabilistik, banyak dari pohon-metode pencarian dijamin untuk menemukan solusi yang tepat atau optimal, jika diberikan waktu yang cukup.

Lainnya sub penting-kelas terdiri dari algoritma untuk menjelajahi pohon permainan multi-player game, seperti catur atau backgammon, node yang terdiri dari semua situasi permainan yang mungkin yang dapat dihasilkan dari situasi saat ini. Tujuan dalam masalah ini adalah untuk menemukan langkah yang memberikan kesempatan terbaik untuk menang, dengan mempertimbangkan semua kemungkinan gerakan lawan (s). Masalah serupa terjadi ketika manusia atau mesin harus membuat keputusan yang berturut-turut hasil tidak sepenuhnya di bawah kendali seseorang, seperti dalam panduan robot atau dalam pemasaran, perencanaan strategi keuangan atau militer. Masalah semacam ini telah dipelajari secara ekstensif dalam konteks kecerdasan buatan. Contoh algoritma untuk kelas ini adalah algoritma minimax, pemangkasan alpha-beta, dan algoritma * A.

Untuk sub-struktur dari sebuah struktur yang diberikan

Pencarian Nama kombinatorial umumnya digunakan untuk algoritma yang mencari sub-struktur spesifik dari struktur diskrit yang diberikan, seperti grafik, string, sebuah kelompok terbatas, dan sebagainya. Optimasi kombinatorial Istilah biasanya digunakan ketika tujuannya adalah untuk menemukan sub-struktur dengan maksimum (atau minimum) nilai parameter tertentu. (Karena sub-struktur biasanya diwakili dalam komputer dengan satu set variabel integer dengan kendala, masalah ini dapat dipandang sebagai kasus khusus dari kepuasan kendala atau optimasi diskrit, tetapi mereka biasanya dirumuskan dan diselesaikan dalam pengaturan lebih abstrak dimana representasi internal tidak disebutkan secara eksplisit.)

Sebuah subclass penting dan dipelajari secara ekstensif adalah algoritma grafik, dalam algoritma graf traversal tertentu, untuk menemukan spesifik sub-struktur di grafik yang diberikan - seperti subgraphs, jalan, sirkuit, dan sebagainya. Contohnya termasuk algoritma Dijkstra, algoritma Kruskal's, algoritma tetangga terdekat, dan algoritma Prim.

Subkelas penting lain dari kategori ini adalah algoritma pencarian string, yang mencari pola dalam string. Dua contoh terkenal adalah Boyer-Moore dan algoritma Knuth-Morris-Pratt, dan beberapa algoritma berdasarkan struktur data suffix tree.

Untuk komputer kuantum

Ada juga mencari metode yang dirancang untuk (saat ini tidak ada) komputer kuantum, seperti algoritma Grover, yang secara teoritis lebih cepat dibandingkan linear atau pencarian brute-force bahkan tanpa bantuan dari struktur data atau heuristik.


Sorting adalah sebuah proses merangkai benda dalam urutan tertentu dan/atau dalam himpunan yang berbeda, dan oleh karena itu dia memiliki dua arti umum yang berbeda:

  1. pengurutan: merangkai benda yang sejenis, sekelas, dll, dalam urutan yang teratur,
  2. kategorisasi: pengelompokan dan pemberian label kepada benda dengan sifat yang serupa.

Mensortir informasi atau data

Salah satu cara sorting yang penting adalah mengatur benda informasi dalam urutan alfabetik sesuai dengan hubungan penyusunan yang telah didefinisikan sebelumnya, misal ketika seseorang mensortir buku-buku di perpustakaan berdasarkan judul, subyek atau penulis (Biasanya diurutkan dalam urutan membesar).

Urutan yang dihasilkan dapat membesar atau mengecil, karena biasanya seluruh sorting adalah sorting angka. Sorting dalam ilmu komputer adalah salah satu subjek riset yang paling luas karena kebutuhan mempercepat operasi dalam ribuan atau jutaan data selama operasi pencarian; lihat algoritma sorting.

Tujuan utama mensortir informasi adalah untuk mengoptimalkan tugas tertentu. Pada umumnya, ada dua cara pengelompokan informasi: berdasarkan kategori, misal sebuah katalog belanja di mana barang disusun bersama di bawah judul seperti 'rumah', 'olah raga', 'pakaian wanita', dll. dan berdasarkan intensitas seperti harga, misal dari yang termurah sampai yang termahal.

Sumber : http://id.wikipedia.org/wiki/Search_algorithm

Senin, 07 Maret 2011

GRAPH (SPANING TREE)

Dalam bidang matematika dari teori graph, T pohon rentang dari, terhubung graf tak berarah G adalah pohon terdiri dari semua simpul dan beberapa (atau mungkin semua) dari tepi G. informal, pohon rentang dari G adalah pilihan tepi dari G yang membentuk pohon rentang setiap simpul. Artinya, setiap vertex terletak di pohon, tetapi tidak ada siklus (atau loop) terbentuk. Di sisi lain, setiap jembatan G harus milik T.

Sebuah pohon rentang dari graf terhubung G juga dapat didefinisikan sebagai satu set maksimal tepi G yang berisi siklus tidak ada, atau sebagai seperangkat minimal tepi yang menghubungkan semua titik.

Dalam bidang-bidang tertentu teori grafik sering berguna untuk mencari pohon rentang minimum dari grafik tertimbang. Masalah optimasi lain di pohon mencakup juga telah dipelajari, termasuk pohon maksimum merentang, pohon minimum yang mencakup setidaknya simpul k, pohon rentang minimum dengan di tepi k paling per titik (Gelar-Dibatasi Spanning Tree), pohon merentang dengan jumlah daun terbesar (erat kaitannya dengan terkecil terhubung mendominasi set), pohon merentang dengan daun paling sedikit (berkaitan erat dengan masalah jalan Hamilton), diameter pohon rentang minimum, dan dilatasi minimum spanning tree.

Fundamental siklus

Menambahkan hanya satu tepi ke pohon rentang akan menciptakan sebuah siklus, seperti siklus yang disebut siklus mendasar. Ada siklus mendasar berbeda untuk setiap sisinya, dengan demikian, ada korespondensi satu-ke-satu di antara siklus fundamental dan pinggiran tidak di pohon rentang. Untuk graf terhubung dengan simpul V, setiap pohon rentang akan memiliki V-1 tepi, dan dengan demikian, grafik tepi E akan memiliki E-V +1 siklus mendasar. Untuk setiap pohon rentang diberikan siklus ini membentuk dasar untuk ruang siklus.

Dual dengan gagasan dari siklus mendasar adalah gagasan tentang cutset mendasar. Dengan menghapus hanya pada satu sisi dari pohon rentang, simpul yang dibagi menjadi dua set beririsan. The cutset mendasar adalah didefinisikan sebagai set dari ujung yang harus dihapus dari grafik G untuk mencapai partisi yang sama. Dengan demikian, ada tepat V-1 cutsets mendasar bagi grafik, satu untuk setiap tepi spanning tree.

Dualitas antara cutsets fundamental dan siklus mendasar dibentuk dengan mencatat bahwa siklus tepi tidak di pohon rentang hanya dapat muncul dalam cutsets dari sisi lain dalam siklus, dan sebaliknya: pinggiran cutset hanya dapat muncul dalam siklus tersebut berisi tepi sesuai dengan cutset tersebut.

Spanning forests

adalah jenis subgraf yang generalises konsep pohon rentang. Namun, ada dua definisi umum digunakan. Salah satunya adalah bahwa hutan membentang adalah subgraf yang terdiri dari pohon rentang pada setiap komponen terkoneksi dari grafik. (dengan kata lain, itu adalah siklus subgraf bebas maksimal.) Definisi ini adalah umum di ilmu komputer dan optimasi. Itu juga merupakan definisi yang digunakan ketika mendiskusikan hutan rentang minimum, generalisasi untuk grafik terputus pohon rentang minimum. Definisi lain, umum dalam teori graph, adalah bahwa hutan membentang adalah setiap subgraf yang bersifat hutan (tidak mengandung siklus) dan mencakup (termasuk setiap vertex).

Counting spanning trees

T nomor (G) dari pohon rentang dari graf terhubung merupakan invarian penting. Dalam beberapa kasus, mudah untuk menghitung t (G) secara langsung. Hal ini juga banyak digunakan dalam struktur data di bahasa komputer yang berbeda [rujukan?] Sebagai contoh,. jika G adalah pohon itu sendiri, maka t (G) = 1, sedangkan jika G adalah graf siklus Cn dengan n simpul, maka t (G) = n. Untuk setiap graf G, t nomor (G) dapat dihitung dengan menggunakan teorema matriks-pohon Kirchhoff (ikuti link untuk contoh eksplisit menggunakan teorema itu).

Cayley formula adalah rumus untuk jumlah mencakup pohon di Kn graf lengkap dengan n simpul. Menyatakan formula yang t nn (Kn) = - 2. Cara lain untuk menyatakan formula Cayley adalah bahwa ada tepat nn - 2 pohon berlabel dengan n simpul. Rumus Cayley bisa dibuktikan dengan menggunakan teorema matriks-pohon Kirchhoff atau melalui kode Prüfer.

Jika G adalah graf bipartit komplit Kp, q, kemudian t (G) = pq - 1qp - 1, sedangkan jika G adalah graf hypercube n-dimensi Qn, maka t (G) = 2 ^ {2 ^ nn-1} \ prod_ {k = 2} ^ ^ {nk {n \ memilih k}}. Rumus Ini juga konsekuensi dari teorema matriks-pohon.

Jika G adalah multigraph dan e adalah tepi G, maka t nomor (G) dari pohon rentang dari G memenuhi t penghapusan-kontraksi kambuh (G) = t (Ge) + t (G / e), dimana Ge adalah multigraph diperoleh dengan menghapus e dan G / e merupakan kontraksi dari G oleh e, di mana beberapa tepi yang timbul dari kontraksi ini tidak dihapus.

Uniform spanning trees

Sebuah pohon rentang dipilih secara acak dari antara semua pohon merentang dengan probabilitas yang sama disebut pohon seragam rentang (UST). Model ini telah banyak diteliti dalam probabilitas dan fisika matematika.

Algorithms

Yang mencakup klasik pohon algoritma, depth-first search (DFS), adalah karena Robert Tarjan. Algoritma lain yang penting adalah didasarkan pada pencarian breadth-first (BFS).

Algoritma paralel biasanya mengambil pendekatan yang berbeda dari BFS atau DFS. Halperin dan Zwick dirancang suatu algoritma paralel yang optimal secara acak yang berjalan dalam O (log n) waktu dengan probabilitas tinggi pada EREW PRAM [1] Algoritma Shiloach-Vishkin, karena Yossi Shiloach dan Uzi Vishkin, adalah. dasar untuk implementasi paralel banyak. [2] Bader dan algoritma Cong ini yang ditampilkan untuk berlari cepat dalam praktek pada berbagai grafik. [3]

Algoritma terdistribusi yang paling umum adalah Spanning Tree Protocol, yang digunakan oleh perangkat link layer OSI untuk membuat pohon rentang menggunakan link yang ada sebagai sumber grafik untuk menghindari badai siaran.

Minimum spanning tree

Mengingat grafik, terhubung tak berarah, pohon rentang dari graf yang merupakan subgraf yang pohon dan menghubungkan semua simpul bersama-sama. Sebuah grafik tunggal dapat memiliki banyak pohon rentang yang berbeda. Kita juga dapat menetapkan berat untuk setiap sisi, yang merupakan angka yang mewakili bagaimana tidak menguntungkan itu, dan menggunakan ini untuk menetapkan berat untuk pohon rentang dengan menghitung jumlah dari bobot dari tepi dalam pohon rentang. Pohon rentang minimum (MST) atau pohon bobot minimum spanning kemudian pohon rentang dengan berat kurang dari atau sama dengan berat setiap pohon rentang lainnya. Secara umum, setiap grafik tak berarah (tidak harus terhubung) memiliki hutan rentang minimum, yang merupakan gabungan dari pohon rentang minimum untuk komponen tersambung nya.

Salah satu contoh akan menjadi perusahaan TV kabel peletakan kabel ke lingkungan baru. Jika dibatasi untuk mengubur kabel hanya di sepanjang jalan tertentu, maka akan ada grafik yang mewakili dimana poin dihubungkan oleh jalan tersebut. Beberapa dari mereka jalan mungkin lebih mahal, karena mereka lebih panjang, atau membutuhkan kabel yang akan dikubur lebih dalam, jalur ini akan diwakili oleh tepi dengan bobot yang lebih besar. Sebuah pohon rentang untuk grafik yang akan menjadi bagian dari orang-orang jalan yang tidak memiliki siklus tapi masih terhubung ke setiap rumah. Mungkin ada beberapa pohon merentang mungkin. Pohon rentang minimum akan menjadi satu dengan total biaya terendah.

sumber : http://en.wikipedia.org/wiki/Spanning_tree