Compartir tecnología

2025 ~ Preguntas del examen "Estructura de datos" ~ Examen de ingreso de posgrado

2024-07-12

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

Página de inicio del autor: Zhi Guyun sale de Xiu
Insertar descripción de la imagen aquí

  1. Preguntas de respuestas múltiples: Examinar conceptos básicos y operaciones básicas.
  2. Rellenar los espacios en blanco: Fortalecer la comprensión de los conceptos y detalles básicos.
  3. preguntas de respuesta corta: Pon a prueba el dominio de los conocimientos teóricos.
  4. Preguntas de programación: Pruebe la capacidad de programación real y la aplicación de estructura de datos.
  5. Insertar descripción de la imagen aquí

Volumen de simulación de estructura de datos.

1. Preguntas de opción múltiple (2 puntos cada una, 20 puntos en total)

  1. La complejidad temporal de insertar un elemento en una matriz es ().
    A.O(1)
    B. O(n)
    C. O(log n)
    D.O(n^2)

  2. En la clasificación de montón, la complejidad temporal de construir un montón máximo es ().
    A. O(n)
    B. O(n log n)
    C. O(log n)
    D.O(n^2)

  3. Un árbol rojo-negro es un tipo de ().
    A. Árbol binario completo
    B. Árbol binario equilibrado
    C. Min-montón
    D. montón máximo

  4. ¿Cuál de las siguientes afirmaciones sobre tablas hash es incorrecta ()?
    A. La complejidad del tiempo de búsqueda de la tabla hash es O (1)
    B. La complejidad del tiempo de inserción de la tabla hash es O (1)
    C. Las tablas hash pueden resolver conflictos
    D. La complejidad del tiempo de búsqueda de la tabla hash debe ser O (1)

  5. En el recorrido del gráfico, la complejidad temporal de la búsqueda en profundidad (DFS) y la búsqueda en amplitud (BFS) son () respectivamente.
    A. O(V + E) y O(V)
    B. O(V^2) y O(V)
    C. O(V + E) y O(V + E)
    D. O(V) y O(V^2)

  6. La complejidad temporal de revertir una lista enlazada unidireccional es ().
    A.O(1)
    B. O(n)
    C. O(log n)
    D.O(n^2)

  7. En un árbol de búsqueda binario, la complejidad temporal en el peor de los casos para eliminar un nodo es ().
    A.O(1)
    B. O(n)
    C. O(log n)
    D. O(n log n)

  8. ¿Cuál de los siguientes algoritmos de clasificación tiene una complejidad temporal promedio de O (n log n) ()?
    A. Clasificación de burbujas
    B. Clasificación rápida
    C. Clasificación por inserción
    D. Orden de selección

  9. En un árbol binario, el grado de un nodo es ().
    A. El número de nodos secundarios de este nodo.
    B. La profundidad del nodo.
    C. La altura del nodo.
    D. El nivel del nodo.

  10. La principal diferencia entre el árbol B y el árbol B+ es ().
    A. Todos los nodos del árbol B almacenan datos, mientras que solo los nodos hoja del árbol B+ almacenan datos.
    B. El árbol B es más equilibrado que el árbol B+
    C. Las operaciones de inserción y eliminación del árbol B son más simples
    D. La eficiencia de búsqueda del árbol B+ es menor

2. Preguntas para completar en blanco (3 puntos cada una, 15 puntos en total)

  1. La altura de un árbol binario completo que contiene n nodos es ______.
  2. La complejidad temporal promedio de la clasificación rápida es ______.
  3. En una lista vinculada, la complejidad temporal de encontrar el k-ésimo elemento es ______.
  4. La complejidad espacial de la representación matricial de adyacencia de un gráfico es ______.
  5. En un árbol de Huffman, la longitud del camino ponderado se calcula como ______.

3. Preguntas de respuesta corta (10 puntos cada una, 30 puntos en total)

  1. Describa brevemente las propiedades de los árboles rojo-negro y explique cómo los árboles rojo-negro mantienen el equilibrio.
  2. Explique la diferencia entre matrices dinámicas y listas vinculadas, y analice sus ventajas, desventajas y escenarios de aplicación.
  3. Describir los principios de las tablas hash y explicar cómo manejar las colisiones.

4. Preguntas de programación (15 puntos cada una, 35 puntos en total)

  1. Implemente una función para determinar si una lista vinculada es una lista vinculada palíndromo.

    def is_palindrome(head):
        # 请在这里编写代码
    
    • 1
    • 2
  2. Escriba código para implementar la operación de inserción en el árbol de búsqueda binaria.

    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. Dado un gráfico, representado por una matriz de adyacencia, implemente la búsqueda en amplitud (BFS).

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

Respuesta

1. Preguntas de opción múltiple

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

2. Completa los espacios en blanco

  1. log(n+1) redondear hacia abajo
  2. O(n log n)
  3. En)
  4. O(V^2)
  5. La suma de las longitudes de camino ponderadas de todos los nodos de hoja.

3. Preguntas de respuesta corta

  1. propiedades del árbol rojo negro

    • Propiedad 1: Cada nodo es rojo o negro.
    • Propiedad 2: el nodo raíz es negro.
    • Propiedad 3: Cada nodo hoja (nodo NIL) es negro.
    • Propiedad 4: Si un nodo es rojo, entonces ambos nodos secundarios son negros (es decir, no puede haber dos nodos rojos consecutivos en todos los caminos desde cada hoja hasta la raíz).
    • Propiedad 5: Todos los caminos simples desde cualquier nodo a cada una de sus hojas contienen la misma cantidad de nodos negros.

    Cómo los árboles rojo-negros mantienen el equilibrio

    • Después de las operaciones de inserción y eliminación, las propiedades del árbol rojo-negro se mantienen rotando y cambiando el color, asegurando así que la altura del árbol siempre permanezca dentro del rango O (log n).
  2. La diferencia entre matriz dinámica y lista enlazada

    • Matrices dinámicas (como listas en Python): la memoria es continua, se puede acceder a los elementos rápidamente a través de índices, las operaciones de inserción y eliminación requieren elementos móviles y la complejidad del tiempo es O (n).
    • Lista vinculada: la memoria no es continua y está conectada a través de punteros (referencias). La complejidad temporal de las operaciones de inserción y eliminación es O (1), pero la complejidad temporal de la búsqueda de elementos es O (n).
    • Ventajas y desventajas
      • Matriz dinámica: la ventaja es que el acceso aleatorio es rápido, pero la desventaja es que la inserción y eliminación son lentas y pueden requerir expansión.
      • Lista vinculada: la ventaja es que la inserción y eliminación son rápidas, pero la desventaja es que el acceso aleatorio es lento y ocupa más memoria (porque es necesario almacenar los punteros).
    • Escenarios de aplicación
      • Las matrices dinámicas son adecuadas para escenarios en los que es necesario acceder a los elementos con frecuencia y el tamaño no se modifica con frecuencia, como el almacenamiento en caché.
      • Las listas vinculadas son adecuadas para escenarios que requieren la inserción y eliminación frecuentes de elementos, como la implementación de colas y pilas.
  3. El principio de la tabla hash.

    • Las tablas hash asignan claves a posiciones de índice de matriz a través de una función hash, lo que permite operaciones rápidas de búsqueda, inserción y eliminación.
    • Cómo manejar los conflictos
      • Método de dirección abierta: en caso de conflicto, se utilizan detección lineal, detección secundaria y otros métodos para encontrar la siguiente ubicación libre.
      • Método de dirección en cadena: cuando hay un conflicto, los elementos con el mismo valor hash se almacenan en una lista vinculada.

4. Preguntas de programación

  1. Determine si la lista vinculada es una lista vinculada palíndromo:

    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. Operación de inserción en árbol de búsqueda binaria:

    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. Primera búsqueda en amplitud (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