Berbagi teknologi

2025~Soal tes "Struktur Data"~Ujian masuk pascasarjana

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Beranda penulis: Zhi Guyun keluar dari Xiu
Masukkan deskripsi gambar di sini

  1. Soal pilihan ganda: Mengkaji konsep dasar dan operasi dasar
  2. Isi bagian yang kosong: Memperkuat pemahaman konsep inti dan detailnya
  3. pertanyaan jawaban singkat: Menguji penguasaan pengetahuan teoritis
  4. Pertanyaan pemrograman: Menguji kemampuan pemrograman aktual dan aplikasi struktur data
  5. Masukkan deskripsi gambar di sini

Volume simulasi struktur data

1. Soal pilihan ganda (masing-masing 2 poin, total 20 poin)

  1. Kompleksitas waktu untuk memasukkan elemen ke dalam array adalah ().
    Sebuah O(1)
    B.O(n)
    C.O(log n)
    D.O(n^2)

  2. Dalam pengurutan heap, kompleksitas waktu untuk membangun heap maksimum adalah ().
    Sebuah O(n)
    B.O(log n)
    C.O(log n)
    D.O(n^2)

  3. Pohon merah-hitam adalah tipe ().
    A. Pohon biner lengkap
    B. Pohon Biner Seimbang
    C. Min-tumpukan
    D. Tumpukan maksimal

  4. Manakah dari pernyataan berikut tentang tabel hash yang salah ().
    A. Kompleksitas waktu pencarian tabel hash adalah O(1)
    B. Kompleksitas waktu penyisipan tabel hash adalah O(1)
    C. Tabel hash dapat menyelesaikan konflik
    D. Kompleksitas waktu pencarian tabel hash harus O(1)

  5. Dalam traversal grafik, kompleksitas waktu pencarian kedalaman pertama (DFS) dan pencarian luas pertama (BFS) masing-masing adalah ().
    A. O(V + E) dan O(V)
    B.O(V^2) dan O(V)
    C. O(V + E) dan O(V + E)
    D.O(V) dan O(V^2)

  6. Kompleksitas waktu untuk membalikkan daftar tertaut satu arah adalah ().
    Sebuah O(1)
    B.O(n)
    C.O(log n)
    D.O(n^2)

  7. Dalam pohon pencarian biner, kompleksitas waktu terburuk dalam menghapus sebuah node adalah ().
    Sebuah O(1)
    B.O(n)
    C.O(log n)
    D. O(n log n)

  8. Manakah dari algoritma pengurutan berikut yang memiliki kompleksitas waktu rata-rata O(n log n)().
    A. Penyortiran gelembung
    B. Penyortiran cepat
    C. Sortir penyisipan
    D. Seleksi semacam

  9. Dalam pohon biner, derajat suatu simpul adalah ().
    A. Jumlah node anak dari node ini
    B. Kedalaman simpul
    C. Ketinggian simpul
    D. Tingkat simpul

  10. Perbedaan utama antara B-tree dan B+-tree adalah ().
    A. Semua node pada pohon B menyimpan data, sedangkan hanya node daun pada pohon B+ yang menyimpan data.
    B. Pohon B lebih seimbang dibandingkan pohon B+
    C. Operasi penyisipan dan penghapusan B-tree lebih sederhana
    D. Efisiensi pencarian pohon B+ lebih rendah

2. Pertanyaan isian yang kosong (masing-masing 3 poin, total 15 poin)

  1. Ketinggian pohon biner lengkap yang berisi n node adalah ______.
  2. Kompleksitas waktu rata-rata pengurutan cepat adalah ______.
  3. Dalam daftar tertaut, kompleksitas waktu untuk menemukan elemen ke-k adalah ______.
  4. Kompleksitas ruang representasi matriks ketetanggaan suatu graf adalah ______.
  5. Di pohon Huffman, panjang jalur berbobot dihitung sebagai ______.

3. Pertanyaan jawaban singkat (masing-masing 10 poin, total 30 poin)

  1. Tolong jelaskan secara singkat sifat-sifat pohon merah-hitam dan jelaskan bagaimana pohon merah-hitam menjaga keseimbangan.
  2. Jelaskan perbedaan antara array dinamis dan daftar tertaut, dan diskusikan kelebihan, kekurangan, dan skenario penerapannya.
  3. Jelaskan prinsip tabel hash dan jelaskan cara menangani tabrakan.

4. Pertanyaan pemrograman (masing-masing 15 poin, total 35 poin)

  1. Harap terapkan fungsi untuk menentukan apakah daftar tertaut merupakan daftar tertaut palindrom.

    def is_palindrome(head):
        # 请在这里编写代码
    
    • 1
    • 2
  2. Silakan tulis kode untuk mengimplementasikan operasi penyisipan di pohon pencarian biner.

    class TreeNode:
        def __init__(self, key):
            self.left = None
            self.right = None
            self.val = key
    
    def insert(root, key):
        # 请在这里编写代码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  3. Diberikan grafik, yang diwakili oleh matriks ketetanggaan, terapkan pencarian luas pertama (BFS).

    def bfs(graph, start):
        # 请在这里编写代码
    
    • 1
    • 2

Menjawab

1. Soal pilihan ganda

  1. B
  2. A
  3. B
  4. D
  5. C
  6. B
  7. B
  8. B
  9. A
  10. A

2. Isilah bagian yang kosong

  1. log(n+1) dibulatkan ke bawah
  2. Logaritma n
  3. Pada)
  4. Bahasa Indonesia: O(V^2)
  5. Jumlah dari panjang jalur tertimbang dari semua simpul daun

3. Pertanyaan jawaban singkat

  1. sifat pohon merah hitam

    • Properti 1: Setiap node berwarna merah atau hitam.
    • Properti 2: Node akar berwarna hitam.
    • Properti 3: Setiap simpul daun (simpul NIL) berwarna hitam.
    • Properti 4: Jika sebuah node berwarna merah, maka kedua node anaknya berwarna hitam (yaitu tidak boleh ada dua node merah yang berurutan di semua jalur dari setiap daun hingga ke akar).
    • Properti 5: Semua jalur sederhana dari setiap node ke setiap daunnya mengandung jumlah node hitam yang sama.

    Bagaimana pepohonan merah-hitam menjaga keseimbangan

    • Setelah operasi penyisipan dan penghapusan, properti pohon merah-hitam dipertahankan dengan memutar dan mewarnai ulang, sehingga memastikan bahwa ketinggian pohon selalu berada dalam kisaran O(log n).
  2. Perbedaan antara array dinamis dan daftar tertaut

    • Array dinamis (seperti daftar dengan Python): Memori bersifat kontinu, elemen dapat diakses dengan cepat melalui indeks, operasi penyisipan dan penghapusan memerlukan elemen bergerak, dan kompleksitas waktu adalah O(n).
    • Daftar tertaut: Memori tidak kontinu dan terhubung melalui pointer (referensi). Kompleksitas waktu operasi penyisipan dan penghapusan adalah O(1), tetapi kompleksitas waktu untuk menemukan elemen adalah O(n).
    • Keuntungan dan kerugian
      • Array dinamis: Keuntungannya adalah akses acaknya cepat, tetapi kerugiannya adalah penyisipan dan penghapusannya lambat dan mungkin memerlukan perluasan.
      • Daftar tertaut: Keuntungannya adalah penyisipan dan penghapusan cepat, namun kelemahannya adalah akses acak lambat dan memakan lebih banyak memori (karena pointer perlu disimpan).
    • Skenario aplikasi
      • Array dinamis cocok untuk skenario yang memerlukan akses sering ke elemen dan perubahan ukuran yang jarang, seperti caching.
      • Daftar tertaut cocok untuk skenario yang memerlukan penyisipan dan penghapusan elemen secara sering, seperti penerapan antrian dan tumpukan.
  3. Prinsip tabel hash

    • Tabel hash memetakan kunci ke posisi indeks array melalui fungsi hash, memungkinkan operasi pencarian, penyisipan, dan penghapusan cepat.
    • Bagaimana menangani konflik
      • Metode alamat terbuka: Jika terjadi konflik, deteksi linier, deteksi sekunder, dan metode lain digunakan untuk menemukan lokasi bebas berikutnya.
      • Metode alamat berantai: Ketika ada konflik, elemen dengan nilai hash yang sama disimpan dalam daftar tertaut.

4. Pertanyaan pemrograman

  1. Tentukan apakah daftar tertaut merupakan daftar tertaut palindrom:

    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
    
    def is_palindrome(head):
        # 使用快慢指针找到链表中点
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        
        # 反转后半部分链表
        prev = None
        while slow:
            temp = slow.next
            slow.next = prev
            prev = slow
            slow = temp
        
        # 比较前半部分和后半部分
        left, right = head, prev
        while right:
            if left.val != right.val:
                return False
            left = left.next
            right = right.next
        return True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  2. Operasi penyisipan di pohon pencarian biner:

    class TreeNode:
        def __init__(self, key):
            self.left = None
            self.right = None
            self.val = key
    
    def insert(root, key):
        if root is None:
            return TreeNode(key)
        if key < root.val:
            root.left = insert(root.left, key)
        else:
            root.right = insert(root.right, key)
        return root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  3. Luasnya Pencarian Pertama (BFS):

    from collections import deque
    
    def bfs(graph, start):
        visited = [False] * len(graph)
        queue = deque([start])
        visited[start] = True
        result = []
    
        while queue:
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10