Soalan latihan aneka pilihan Struktur data percuma dengan petunjuk dan penerangan, pada tiga tahap: istilah dan fakta utama, menggunakan konsep, kes dan analisis.
Struktur data ialah cara menyusun data dalam memori supaya operasi tertentu menjadi pantas: mencari item, menambah satu, membuang satu.
Tiada struktur yang pantas dalam segala-galanya. Memilih satu bermakna memilih operasi mana yang patut murah. Kosnya ditulis dalam Big O, dengan n ialah bilangan item.
Dua blok binaan asas ialah tatasusunan dan senarai terpaut.
Tatasusunan menyimpan itemnya dalam satu blok memori, satu demi satu. Komputer boleh mengira di mana item i berada, maka membaca a[i] mengambil O(1). Menyisip di hadapan bermakna menganjakkan setiap item: O(n).
Senarai terpaut menyimpan setiap item dalam satu nod dengan penuding ke nod seterusnya. Penuding terakhir ialah null. Menyisip di kepala (h) hanya mengubah satu penuding: O(1). Tetapi untuk sampai ke item i anda mesti mengikut i penuding: O(n).
Senarai terpaut dua hala juga mempunyai penuding ke nod sebelumnya, maka anda boleh berjalan ke kedua-dua arah.
Semakan kendiri Operasi manakah yang O(1) bagi tatasusunan tetapi O(n) bagi senarai terpaut satu hala?
Melawat setiap item sekali
Membaca item pada indeks i
Mengira item satu demi satu
Menyisip item baharu di hadapan
Jawapan: Membaca item pada indeks i. Tatasusunan mengira alamat item i secara terus. Senarai terpaut perlu mengikut i penuding dari kepala. Menyisip di hadapan ialah kes bertentangan: murah bagi senarai, mahal bagi tatasusunan.
2Tindanan dan barisan gilir
Tindanan seperti longgokan pinggan: anda menambah dan membuang hanya di atas. Item yang masuk terakhir keluar dahulu: LIFO.
push meletakkan item di atas, pop membuang item teratas, peek membaca item teratas tanpa membuangnya. Semuanya O(1).
Kegunaan: fungsi buat asal (undo) dalam editor, tindanan panggilan sesebuah program, menyemak bahawa kurungan seimbang, carian kedalaman dahulu.
Barisan gilir seperti barisan di kaunter: anda menyertai di belakang dan keluar di hadapan. Item yang masuk pertama keluar dahulu: FIFO.
enqueue menambah di belakang, dequeue membuang dari hadapan. Kedua-duanya O(1).
Kegunaan: kerja cetakan, mesej yang menunggu untuk dikendalikan, carian keluasan dahulu.
Deque (barisan gilir dua hujung) membenarkan penambahan dan pembuangan di kedua-dua hujung. Barisan gilir keutamaan sentiasa membuang item dengan keutamaan tertinggi dahulu; ia biasanya dibina sebagai longgokan.
Semakan kendiri Struktur data manakah yang paling sesuai untuk butang “undo” editor teks?
Barisan gilir
Graf
Jadual cincang
Tindanan
Jawapan: Tindanan. Undo mesti membalikkan tindakan terkini dahulu: masuk terakhir, keluar dahulu. Barisan gilir akan membuat asal tindakan paling lama dahulu.
3Pokok, longgokan, jadual cincang dan graf
Pokok mempunyai satu nod teratas, iaitu akar. Setiap nod lain mempunyai tepat satu induk. Nod tanpa anak ialah daun. Pokok dengan n nod mempunyai n − 1 tepi.
Dalam pokok binari setiap nod mempunyai paling banyak dua anak. Pokok carian binari (BST) menambah satu peraturan: kunci dalam subpokok kiri lebih kecil daripada nod, kunci dalam subpokok kanan lebih besar.
Mencari dalam BST mengikut satu laluan ke bawah, maka kosnya O(ketinggian). Pokok seimbang (AVL, merah-hitam) mengekalkan ketinggian hampir log₂ n. Kunci yang disisip mengikut urutan terisih membentuk rantai berketinggian n.
Longgokan ialah pokok binari yang setiap induknya lebih kecil daripada anaknya (longgokan min) atau lebih besar (longgokan maks). Minimum atau maksimum berada di akar, dan sisip serta buang berkos O(log n).
Jadual cincang menyimpan pasangan kunci–nilai. Fungsi cincang menukar kunci kepada indeks, maka sisip dan carian mengambil O(1) secara purata. Dua kunci dengan indeks yang sama ialah perlanggaran, diselesaikan dengan perantaian (senarai bagi setiap slot) atau pengalamatan terbuka (cuba slot lain).
Graf mempunyai bucu yang disambung oleh tepi, yang mungkin mempunyai arah atau pemberat. Ia disimpan sebagai matriks kejiranan, memori O(V²), atau sebagai senarai kejiranan, O(V + E).
Semakan kendiri Kunci 50, 30, 70, 20 dan 40 disisip mengikut urutan ini ke dalam pokok carian binari yang kosong. Apakah anak kiri bagi 30?
20
40
70
Ia tiada anak kiri
Jawapan: 20. 20 lebih kecil daripada 50, maka ia ke kiri ke 30. Ia juga lebih kecil daripada 30, maka ia ke kiri sekali lagi. 40 lebih besar daripada 30 dan menjadi anak kanannya.
4Kaedah langkah demi langkah
Soalan sering menerangkan tugas dan bertanya struktur mana yang sesuai, atau bertanya bagaimana rupa sesuatu struktur selepas beberapa operasi.
Cari operasi yang mesti pantas: capaian mengikut kedudukan, mengikut kunci, item terbaharu, item paling lama, item terkecil, atau julat.
Padankan dengan struktur: indeks → tatasusunan, kunci → jadual cincang, terbaharu → tindanan, paling lama → barisan gilir, terkecil atau terbesar → longgokan, urutan terisih atau julat → pokok carian seimbang.
Semak kos operasi lain yang diperlukan tugas itu, dalam Big O.
Untuk soalan jejak, jalankan operasi satu demi satu dan tulis keadaan selepas setiap satu.
Semak keadaan akhir dengan peraturan struktur: LIFO, FIFO, susunan BST atau susunan longgokan.
5Contoh terselesai
Ikuti setiap langkah. Cuba ramalkan langkah seterusnya sebelum anda membukanya.
Contoh terselesai
Kunci 50, 30, 70, 20, 40 dan 60 disisip mengikut urutan ini ke dalam pokok carian binari yang kosong. Apakah traversal tertib-dalam, dan berapa banyak perbandingan diperlukan untuk mencari 60?
1
Sisip akar
Kunci pertama, 50, menjadi akar.
2
Sisip 30 dan 70
30 lebih kecil daripada 50, maka ia ke kiri. 70 lebih besar daripada 50, maka ia ke kanan.
3
Sisip 20, 40 dan 60
20: lebih kecil daripada 50, lebih kecil daripada 30, maka di kiri 30. 40: lebih kecil daripada 50, lebih besar daripada 30, maka di kanan 30. 60: lebih besar daripada 50, lebih kecil daripada 70, maka di kiri 70.
4
Traversal tertib-dalam
Traversal tertib-dalam melawat subpokok kiri, kemudian nod, kemudian subpokok kanan.
Itu memberi 20, 30, 40, 50, 60, 70: kunci dalam urutan terisih, seperti yang sentiasa berlaku bagi BST.
5
Cari 60
Bandingkan dengan 50: lebih besar, ke kanan. Bandingkan dengan 70: lebih kecil, ke kiri. Bandingkan dengan 60: dijumpai.
Carian memerlukan 3 perbandingan, satu bagi setiap aras.
Mengelirukan LIFO dengan FIFO. Tindanan memulangkan item terbaharu, barisan gilir item paling lama.
Menyangka senarai terpaut memberi capaian pantas mengikut indeks. Ia mesti berjalan dari kepala.
Menganggap BST sentiasa O(log n). Hanya pokok seimbang yang begitu; sisipan terisih memberi O(n).
Terlupa perlanggaran dalam jadual cincang. O(1) ialah purata, bukan kes terburuk.
Mengelirukan traversal. Tertib-awal: nod dahulu. Tertib-dalam: nod di tengah. Tertib-akhir: nod terakhir.
Menggunakan matriks kejiranan untuk graf besar yang jarang. Ia membazirkan memori O(V²).
Semakan kendiri Anda enqueue 1, 2 dan 3 ke dalam barisan gilir kosong, mengikut urutan ini. Item manakah yang dipulangkan oleh dequeue pertama?
1, 2 dan 3 bersama-sama
1
2
3
Jawapan: 1. Barisan gilir ialah masuk pertama, keluar dahulu, maka 1 keluar dahulu. 3 ialah jawapan bagi tindanan (pop), yang memulangkan item terbaharu.
7Rupa soalan peperiksaan
Mudah: istilah dan fakta utama. LIFO dan FIFO, apakah nod, akar atau daun, peraturan BST, apa yang dilakukan oleh fungsi cincang.
Sederhana: menerapkan konsep. Struktur mana yang sesuai untuk sesuatu tugas, hasil push dan pop atau sisipan BST, traversal pokok, jadual cincang dengan penyelakan linear, kos dalam Big O.
Sukar: kes dan analisis. Pokok seimbang, longgokan dalam tatasusunan, pokok-B, trie, union-find, penapis Bloom dan reka bentuk seperti cache LRU.
Bagi longgokan yang disimpan dalam tatasusunan dari indeks 0, anak bagi indeks i berada pada 2i + 1 dan 2i + 2, dan induknya berada pada ⌊(i − 1) / 2⌋.
Apakah perbezaan utama antara tatasusunan statik dan tatasusunan dinamik?
ATatasusunan statik membenarkan akses indeks yang lebih perlahan
BTatasusunan dinamik boleh membesar dengan berpindah ke blok memori yang lebih besar
CTatasusunan dinamik menyimpan elemennya dalam nod berpaut supaya ia boleh membesar satu demi satu
DTatasusunan statik hanya boleh menyimpan nombor
Tunjukkan petunjuk
Senarai Python dan ArrayList Java ialah contoh salah satunya.
Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan
Mengapa ini jawapannya
Tatasusunan statik mempunyai saiz tetap; tatasusunan dinamik memperuntukkan tatasusunan lebih besar dan menyalin elemen apabila ia penuh.
Jawapan
B · Tatasusunan dinamik boleh membesar dengan berpindah ke blok memori yang lebih besar
Contoh 2Sederhana
Bagaimanakah extract-min berfungsi dalam timbunan min binari?
ABuang elemen terakhir tatasusunan
BPindahkan elemen terakhir ke akar dan gerakkannya ke bawah
CBuang akar dan anjakkan semua elemen satu tempat ke kiri
DCari semua daun untuk minimum baharu
Tunjukkan petunjuk
Kekalkan pokok lengkap, kemudian betulkan susunan.
Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan
Mengapa ini jawapannya
Elemen terakhir mengisi lubang di akar dan ditukar dengan anaknya yang lebih kecil sehingga sifat timbunan dipenuhi, mengambil O(log n).
Jawapan
B · Pindahkan elemen terakhir ke akar dan gerakkannya ke bawah
Contoh 3Sukar
Tanpa penyatuan mengikut pangkat atau pemampatan laluan, apakah kos kes terburuk satu find dalam struktur union-find dengan n elemen?
AO(1)
BO(α(n))
CO(log n)
DO(n)
Tunjukkan petunjuk
Pokok boleh terdegenerasi.
Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan
Mengapa ini jawapannya
Penyatuan naif boleh memaut pokok menjadi rantai panjang, jadi find mungkin mengikuti n − 1 penuding induk; kedua-dua heuristik menjadikannya hampir malar.
Jawapan
D · O(n)
Soalan dan jawapan
Apakah Struktur data?
Tiada struktur yang pantas dalam segala-galanya. Memilih satu bermakna memilih operasi mana yang patut murah. Kosnya ditulis dalam Big O, dengan n ialah bilangan item.
Dua blok binaan asas ialah tatasusunan dan senarai terpaut.
Bagaimanakah saya mempelajari Struktur data langkah demi langkah?
Apakah struktur data
Tindanan dan barisan gilir
Pokok, longgokan, jadual cincang dan graf
Kaedah langkah demi langkah
Contoh terselesai
Kesilapan lazim
Rupa soalan peperiksaan
Apakah yang diliputi oleh latihan Struktur data?
Mudah: istilah dan fakta utama
Sederhana: menggunakan konsep
Sukar: kes dan analisis
Setiap soalan mempunyai empat pilihan, dan hanya satu yang betul. Buntu? Buka petunjuk kecil dahulu, dan penerangan penuh hanya apabila anda memerlukannya.
Cara latihan berfungsi
Setiap soalan mempunyai empat pilihan, dan hanya satu yang betul.
Buntu? Buka petunjuk kecil dahulu, dan penerangan penuh hanya apabila anda memerlukannya.
Kemajuan, kesilapan dan soalan tersimpan anda dikekalkan, jadi anda boleh menyemak sebelum peperiksaan.