10 Struktur Data Yang Wajib Dipelajari Setiap Programmer

Oktober 06, 2022 ・0 comments

10 Struktur Data Yang Wajib Dipelajari Setiap Programmer - Struktur Data dan Algoritma adalah dua pilar Pemrograman yang tidak bisa dipisahkan. Mereka juga merupakan bahan terpenting dari program yang baik dan pilihan yang tepat dari Struktur Data dan Algoritma dapat meningkatkan kinerja secara drastis, sedangkan pilihan yang salah dapat merusak pesta, tetapi apakah Anda tahu apa sebenarnya mereka? 

Struktur Data tidak lain adalah cara untuk menyimpan data, sedangkan Algoritma adalah cara untuk mengoperasikan Data tersebut. 

Ada alasan mengapa Struktur Data dan Algoritma diajarkan di setiap kelas Ilmu Komputer, tidak peduli apakah Anda belajar Java , C++ , Python , JavaScript , Golang , atau bahasa pemrograman lainnya, struktur data dan algoritma tersebut akan sama di mana-mana. 

Tabel hash akan selalu menjadi cara untuk mengasosiasikan satu objek dengan objek lain dan mengambilnya dalam waktu yang konstan apakah Anda menyebutnya HashMap di Java atau Dictionary dengan Python. 

Apapun metode belajar Algoritma dan Struktur Data, kuncinya adalah belajar dan belajar lebih banyak. Bagian terbaik dari topik ini adalah tidak pernah menjadi tua, waktu yang Anda investasikan pada Struktur Data akan memberi Anda imbalan selama bertahun-tahun dalam karier Anda. 

Sekarang setelah Anda mengetahui bahwa Struktur Data dan Algoritma itu penting dan diperlukan pembelajaran yang konstan, berapa minimumnya? 

Apa yang harus dituju oleh programmer pemula atau lulusan baru Ilmu Komputer? 

Saya akan menjawab pertanyaan ini pada artikel ini dengan daftar 10 struktur data paling mendasar dan berguna yang harus diketahui setiap programmer. 

Pertama-tama saya akan membuat daftarnya dan kemudian memberikan gambaran singkat tentang masing-masingnya dan membagikan sumber daya untuk dipelajari lebih lanjut. 

10 Struktur Data Penting yang Harus Dipelajari Setiap Pemrogram Java

Array

Ini adalah salah satu struktur data yang paling mendasar. Ini menyimpan data atau elemen di lokasi memori yang berdekatan, maksud saya lokasi memori yang berdekatan. Misalnya, jika Anda memiliki 5 bilangan bulat untuk disimpan, Anda membuat larik dengan panjang 5 dan mereka disimpan di lokasi memori yang berdekatan. 

Ini berarti, jika Anda mengetahui alamat salah satu elemen tersebut, Anda dapat mengetahui alamat elemen lainnya. Cara penyimpanan data ini memberikan satu keuntungan yang unik, misalnya pencarian mudah menggunakan index. Setiap elemen dapat diakses dalam O(1) atau waktu konstan menggunakan indeks, tetapi juga memiliki beberapa dampak.

Misalnya, menambahkan dan menghapus elemen dalam array tidak mungkin? Mengapa? karena tidak ada jaminan bahwa lokasi memori yang berdekatan akan bebas untuk pertumbuhan array. Penyisipan dan penghapusan sering dicapai dengan membuat array baru dan kemudian menyalin elemen yang tersisa ke dalamnya. 

Linkedlist

Ini adalah struktur data fundamental lain yang melengkapi array. Jika Anda melihat lebih dekat, Anda tidak dapat menggunakan array untuk menyimpan sejumlah besar item meskipun Anda memiliki cukup memori? Mengapa, karena memori tersebut mungkin tidak tersedia sebagai blok tunggal. Daftar tertaut memecahkan masalah itu dengan menautkan node. 

Dalam daftar tertaut, data disimpan dalam sebuah simpul, yang berisi data aktual serta alamat memori dari simpul berikutnya. Ingat, dalam array kita tidak perlu menyimpan alamat memori elemen berikutnya karena Anda dapat menghitung berdasarkan indeks karena mereka hanya bersebelahan tetapi itu tidak mungkin dengan daftar tertaut. 

Ini berarti Anda harus menanggung biaya penyimpanan alamat memori bersama dengan data tetapi ini memberikan beberapa manfaat unik. Jauh lebih mudah bagi daftar tertaut untuk tumbuh daripada array. Kapan saja Anda dapat menambah atau menghapus elemen karena Anda tidak perlu menggeser atau membuat array baru, yang perlu Anda lakukan hanyalah menunjuk kembali beberapa tautan, tetapi ini juga memiliki beberapa dampak. 

Sekarang, tidak mungkin Anda dapat mengakses data dalam waktu yang konstan. Jika Anda perlu mendapatkan elemen tertentu, Anda perlu melintasi daftar tertaut mulai dari simpul pertama, yang dikenal sebagai kepala dan membandingkan data pada setiap simpul hingga Anda mencapai simpul di mana Anda memiliki data yang Anda inginkan. Ini berarti pencarian akan dikenakan biaya O(n) pada daftar tertaut.

Tress

Pohon adalah salah satu struktur data yang berguna yang memungkinkan Anda untuk menyusun data Anda secara hierarkis. Ini adalah perbedaan besar antara array atau daftar tertaut dan pohon. Array dan linked list keduanya adalah struktur data linier tetapi pohon adalah hierarki, oleh karena itu berguna untuk menyimpan data hierarkis seperti pohon keluarga, struktur organisasi, dll. 

Struktur data pohon dapat dibagi lagi menjadi berbagai pohon tergantung pada propertinya seperti Pohon N-ary, Pohon Seimbang

Pohon Biner, Pohon Pencarian Biner, Pohon AVL, Pohon Hitam Merah, Pohon Radix dll. Dari pohon biner ini adalah yang paling umum. Disebut pohon biner karena sebuah simpul dapat memiliki maksimal dua anak. Sebagian besar algoritma pohon memberikan kinerja log(N), karenanya mereka sangat cepat dibandingkan dengan struktur data linier dengan kinerja O(n).

Binary Search Tress

BST atau pohon pencarian Biner adalah pohon biner khusus yang menyimpan datanya secara berurutan. Dalam BST, nilai simpul kiri bisa sama dengan atau lebih kecil dari akar dan nilai simpul kanan bisa sama dengan atau lebih besar dari akar. Karena sifat ini, BST sangat berguna untuk menyortir dan mengatur data. 

Anda dapat menggunakan algoritme traversal pohon seperti praorder, in-order, dan post-order untuk melintasi pohon dan mencetak nilai. Sebagian besar algoritma pohon dapat dengan mudah diimplementasikan menggunakan rekursi karena pohon secara alami rekursif. Anda mengambil satu simpul pohon dan sisanya masih pohon. 

Tabel Hash

Ini adalah salah satu struktur data favorit saya dan mungkin yang paling serbaguna dan berguna dari semua struktur data. Ini memungkinkan Anda untuk memetakan satu objek ke objek lainnya, sehingga Anda dapat mengambilnya kembali dalam waktu yang konstan. Misalnya, id dapat dipetakan ke objek karyawan yang sebenarnya dan kemudian dapat diambil dalam waktu yang konstan menggunakan id.

Ini sangat mirip dengan array, sementara array memungkinkan akses waktu konstan menggunakan indeks, tabel hash memungkinkan akses waktu konstan menggunakan objek kunci. Tabel hash dapat diimplementasikan menggunakan array (dikenal sebagai bucket), di mana fungsi hash digunakan untuk menghasilkan indeks bucket menggunakan objek kunci. 

Objek nilai disimpan pada indeks itu. Jika beberapa objek harus disimpan dalam satu ember karena tabrakan maka daftar tertaut atau pohon biner juga dapat digunakan. 

  • Berikut adalah beberapa pertanyaan wawancara Hashing yang sering diajukan untuk latihan:
  • Bagaimana menemukan pasangan simetris dalam array?
  • Bagaimana menemukan apakah suatu array adalah subset dari array lain?
  • Bagaimana cara memeriksa apakah array yang diberikan terputus-putus?

Stack

Ini disebut struktur data LIFO atau Last In First out karena elemen yang dimasukkan terakhir akan diambil terlebih dahulu. Ini sangat mirip dengan tumpukan piring di pesta makan malam, di mana piring diambil dari atas. Demikian pula, elemen dimasukkan dan diambil dari atas tumpukan. 

Salah satu penggunaan Stack yang paling penting adalah untuk mengubah algoritma rekursif menjadi algoritma iteratif karena Stack mewakili panggilan rekursif. Berbicara tentang implementasi, Anda dapat menggunakan array dan daftar tertaut untuk mengimplementasikan struktur data tumpukan. Konsumsi dari atas tumpukan membutuhkan waktu O(1) dan begitu juga penyisipan jika array yang mendasarinya tidak diubah ukurannya. 

  • Berikut adalah beberapa pertanyaan wawancara Stack yang sering diajukan
  • Bagaimana cara mengimplementasikan tumpukan menggunakan array?
  • Bagaimana Mengevaluasi ekspresi postfix menggunakan stack?
  • Bagaimana Mengurutkan nilai dalam tumpukan?
  • Bagaimana cara memeriksa tanda kurung seimbang dalam sebuah ekspresi?

Queue

Tidak seperti Stack yang merupakan struktur data LIFO (Last In First Out), Antrian adalah struktur data FIFO (First In First Out). Jika Anda harus memproses elemen pada urutan penyisipan, Anda dapat menggunakan antrian. Antrian memungkinkan Anda untuk memasukkan di satu ujung dan mengkonsumsi di ujung lain yang merupakan perbedaan lain antara tumpukan dan antrian. 

Pada tumpukan, penyisipan dan penghapusan terjadi di bagian atas tumpukan. Beberapa antrian juga dapat menerapkan prioritas pada elemen seperti PriorityQueue yang memungkinkan Anda memproses elemen dalam urutan prioritas. Anda dapat mengimplementasikan Antrian menggunakan array dan daftar tertaut. 

Berikut adalah beberapa pertanyaan berdasarkan Antrian yang sering diajukan dari wawancara Pemrograman Pekerjaan:

  • Bagaimana cara mengimplementasikan stack menggunakan antrian?
  • Bagaimana cara membalikkan k elemen pertama dari antrian?
  • Bagaimana cara menghasilkan angka biner dari 1 hingga n menggunakan antrian?

Grafik

Ini adalah salah satu struktur data yang banyak digunakan di dunia nyata. Anda dapat menemukan jarak antara dua kota atau jalur terpendek menggunakan grafik. Bahkan setelah aplikasi dunia nyata, programmer sering memiliki sedikit pengetahuan tentang struktur data grafik dan kesulitan untuk mengimplementasikannya ketika Anda meminta mereka untuk membuat kelas untuk mewakili grafik atau mengkodekan beberapa algoritma grafik. 

Seperti pohon, Graph juga merupakan kumpulan node dan edge. Itu bisa diarahkan atau tidak diarahkan seperti jalan satu arah atau dua arah. Tepi memungkinkan Anda untuk berpindah dari satu simpul ke simpul lain dalam grafik. Jika tidak ada tepi antara dua node maka Anda tidak dapat melintasi di sana. Anda dapat menggunakan struktur data grafik untuk mewakili apa pun yang memiliki hubungan misalnya dari kota dan jalan raya, router dan kabel ethernet ke pengguna Facebook dan teman-teman mereka. 

Seperti yang saya katakan, grafik dapat diarahkan atau tidak diarahkan, siklik atau asiklik, dan berbobot atau tidak berbobot. Beberapa algoritma grafik yang populer adalah BFS dan DFS, yang memungkinkan Anda menjelajahi node dalam grafik. Sebagian besar algoritma grafik adalah O(n*lg(n))  atau bahkan lebih lambat sehingga juga memiliki tantangan skalabilitas yang berarti mungkin tidak layak untuk menjalankan algoritma grafik jika ukuran grafik Anda meningkat secara signifikan.

  • Berikut adalah beberapa pertanyaan wawancara Grafik yang sering diajukan untuk latihan
  • Bagaimana cara menerapkan Breadth and Depth First Search Algorithms?
  • Bagaimana cara memeriksa apakah grafik adalah pohon atau bukan?
  • Bagaimana cara menghitung jumlah sisi dalam grafik?
  • Bagaimana menemukan jalur terpendek antara dua simpul?

Tires

Trie adalah struktur data lain yang kurang dikenal tetapi berguna yang banyak digunakan dalam pencocokan kata dan pemeriksaan ejaan. Ia juga dikenal sebagai "Pohon Awalan" karena kemampuannya untuk menemukan kata-kata dengan awalan yang serupa lebih cepat. 

Ini adalah struktur data hierarkis seperti pohon yang secara kompak menyimpan string. Ini menyediakan pengambilan cepat, dan sebagian besar digunakan untuk mencari kata dalam kamus, memberikan saran otomatis di mesin pencari, dan bahkan untuk perutean IP.

Berikut adalah ilustrasi bagaimana tiga kata "atas", "demikian" dan "mereka" disimpan di Trie:

Pertanyaan wawancara Trie yang umum diajukan:

Berikut adalah beberapa masalah pengkodean berbasis TRIE dari latihan:

  • Bagaimana Menghitung jumlah total kata di Trie?
  • Bagaimana cara Mencetak semua kata yang disimpan di Trie?
  • Bagaimana Mengurutkan elemen array menggunakan Trie?
  • Bagaimana cara membentuk kata dari kamus menggunakan Trie?

Heap

Ini adalah salah satu struktur data yang diremehkan dan banyak programmer tidak mengetahuinya, tetapi ini bisa sangat berguna untuk menemukan angka atau elemen terbesar atau terkecil dalam waktu yang konstan. Mirip dengan pohon, ini adalah struktur data hierarkis dan jenis pohon biner, dengan hanya perbedaan bahwa akar pohon selalu mewakili simpul tertinggi atau simpul terendah. 

Ada dua jenis heap biner, max-heap dan min-heap. Di max-heap, root mewakili jumlah maksimum sementara di min-heap mewakili nilai minimum. Karena, root selalu maksimum atau minimum Anda dapat mengaksesnya dalam waktu yang konstan tetapi menyisipkan dan menghapus memerlukan waktu sedikit lebih lama karena Anda perlu menyesuaikan ulang heap untuk menjaga elemen maksimum dan minimum di tempat yang tepat. 

Struktur data ini juga dapat digunakan untuk membuat PriorityQueue, struktur data lain yang berguna untuk memproses elemen berdasarkan prioritas. 

Berikut adalah beberapa masalah pengkodean berbasis tumpukan biner untuk latihan:

  • Bagaimana cara mengimplementasikan max heap dan min heap di Java? (larutan)
  • Menerapkan algoritma pengurutan tumpukan? (larutan
  • Tulis Program untuk memeriksa apakah array yang diberikan mewakili tumpukan minimum atau tidak? (larutan)
  • Bagaimana cara mengubah max-heap ke min-heap dalam waktu linier? (solusi)

Itulah semua tentang 10 Struktur Data Yang Wajib Dipelajari Setiap Programmer semoga dapat bermanfaat.

Posting Komentar

If you can't commemt, try using Chrome instead.