Diseño y estructura de algoritmos Capítulo 2 Recurrencia y estrategia de dividir y conquistar Tareas en casa

Suplemento de conocimientos:
Inserte la descripción de la imagen aquí

Verdadero o falso

1-1
Los dos aspectos principales del análisis de algoritmos son el análisis de la complejidad del tiempo y la complejidad del espacio.

T F

1-2
En una lista enlazada individualmente con N nodos, la complejidad temporal de acceder a los nodos y agregarlos corresponde a O (1) y O (N) respectivamente.

T F

1-3
La mejor "complejidad del peor tiempo" que puede obtener un algoritmo basado en la comparación es O (NlogN).

T F

1-4
registros rápidamente ordenados N. En el peor de los casos, la complejidad de tiempo es O (NlogN).

T F

1-5
(neuDS) La complejidad temporal del algoritmo de clasificación de inserción directa en el mejor de los casos es O (n).

T F

Opción multiple

2-1
Utilice la búsqueda binaria para encontrar un número determinado de 100 enteros ordenados. En el peor de los casos, el número de comparaciones necesarias es:

A.7
B.10
C.50
D.99

Suplemento de conocimientos:
el número máximo de comparaciones para la
Inserte la descripción de la imagen aquí
búsqueda binaria es que el método de búsqueda binaria hace un uso completo de la relación de orden entre elementos y adopta una estrategia de dividir y conquistar para completar la tarea de búsqueda en tiempo O (logn) en el peor de los casos;

Análisis: log100 + 1 = 6 + 1 = 7;

2-2
Usa divide y vencerás para resolver un problema de escala N. ¿Cuál de los siguientes métodos es el más lento?

A. Cada paso divide el problema en 2 subproblemas con una escala de N / 3, y el paso de tratamiento toma O (N)
B. Cada paso divide el problema en 2 subproblemas con una escala de N / 3, y el paso de tratamiento O que consume mucho tiempo (NlogN)
C. En cada paso, el problema se divide en 3 subproblemas con una escala de N / 2, y el paso de tratamiento toma O (N)
D. Cada paso divide el problema en 3 subproblemas con una escala de N / 3, y el paso de tratamiento toma O (NlogN)

C no solo tiene una gran escala de subproblemas, sino también un gran número, y lleva mucho tiempo fusionar los subproblemas;

2-3
(NeuDS_C ++) Al realizar una búsqueda binaria en la tabla lineal, la tabla lineal debe ser ().

A. Almacenar en secuencia
B. Almacenar en cadena
C. Se almacenan de manera secuencial y los nodos se ordenan por palabras clave.
D. Se almacenan en forma de enlaces y los nodos están ordenados por palabras clave.

2-4
¿Cuál de los siguientes algoritmos de clasificación puede aparecer: Antes del inicio de la última pasada, todos los elementos no están en sus posiciones finales? (Suponga que el número de elementos que se van a organizar N> 2)

A. Clasificación de burbujas
B. Orden de inserción
C. Clasificación de montón
D. Clasificación rápida

2-5
Dados 100.000.000 de registros para organizar, cada registro tiene 256 bytes y la memoria es 128 MB. ¿Cuántas rondas se deben realizar si se usa una combinación simple de 2 vías?

(2 minutos)

A.10
B.9
C.8
D.7

1 MB tiene 4 registros, la memoria total es 128 × 4 = 512 registros, 512 = 2 9 , necesita hacer log 2 9 = 9 (log con 2 como base) ronda;

2-6
Combinar y ordenar N registros, el orden de magnitud del número de pasadas de combinación es:

AO (logN)
BO (N)
CO (nlogn)
DO (N 2 )

2-7
Combinar y ordenar N registros, la complejidad del espacio es:

AO (logN)
BO (N)
CO (NlogN)
DO (N 2 )

2-8
Utilice la recursividad para ordenar rápidamente la tabla de secuencia. ¿Cuál de las siguientes afirmaciones sobre el número de recursiones es correcta?

A. Después de cada división, procesar primero la partición más larga puede reducir el número de recursividad
B. Después de cada división, procesar primero la partición más corta puede reducir el número de recursividad
C. El número de recursividad no tiene nada que ver con el orden de procesamiento de la partición obtenido después de cada división.
D. El número de recursividad no tiene nada que ver con el orden de los datos iniciales

2-9
Si la secuencia de elementos de datos {12, 13, 8, 11, 5, 16, 2, 9} es el resultado de la primera clasificación utilizando uno de los siguientes métodos de clasificación, el algoritmo de clasificación solo puede ser:

A. Ordenar rápido
B. Seleccionar ordenar
C. Ordenar montón
D. Combinar ordenación

En el orden
exterior 2-10 , suponga que tenemos 5 segmentos ordenados con longitudes de 2 , 8, 9, 5 y 3. ¿Cuál de las siguientes órdenes de fusión puede obtener el tiempo de fusión más corto?

A. Fusionar los segmentos ordenados con longitudes 2 y 3 para obtener el segmento Ejecución # 1; fusionar Ejecución # 1 con los segmentos ordenados con longitud 5 para obtener el segmento Ejecución # 2; combinar Ejecución # 2 con los segmentos ordenados con longitud 8 Fusionar segmentos para obtener el segmento Ejecutar # 3; Combinar el Ejecutar # 3 con un segmento ordenado de longitud 9
B. Fusionar los segmentos ordenados con longitudes 2 y 3 para obtener el segmento Ejecución # 1; fusionar Ejecución # 1 con los segmentos ordenados con longitud 5 para obtener el segmento Ejecución # 2; fusionar los segmentos ordenados con longitudes 8 y 9, Obtenga la sección Ejecutar n. ° 3; combine la Ejecución n. ° 2 y la Ejecución n. ° 3
C. Fusionar las secciones ordenadas con las longitudes 2 y 3 para obtener la sección Ejecución n. ° 1; fusionar las secciones ordenadas con las longitudes 5 y 8 para obtener la sección Ejecución n. ° 2; fusionar la Ejecución n. ° 1 y la Ejecución n. ° 2 para obtener la sección Ejecución n. ° 3 ; Fusionar el Eje # 3 con la sección ordenada de longitud 9
D. Fusionar las secciones ordenadas con las longitudes 2 y 3 para obtener la sección Ejecutar # 1; fusionar las secciones ordenadas con las longitudes de 5 y 8 para obtener la sección Ejecutar # 2; Fusionar la Ejecución # 2 con un segmento ordenado de longitud 9 para obtener el segmento Ejecución # 3; fusionar Ejecución # 1 y Ejecución # 3

Preguntas de programación

7-1 Encuentre el k-ésimo número más pequeño (20 puntos)

Diseñe un algoritmo con un tiempo promedio de O (n) para encontrar el k-ésimo número más pequeño entre n (1 <= n <= 1000) enteros desordenados.

Consejo: La función de la función int partición (int a [], int left, int right) se basa en un determinado elemento x en una [izquierda] a [derecha] (como una [izquierda]) a una [izquierda] a [derecha ] Se divide, el segmento izquierdo de la posición x dividida es todo menor o igual ax, y el segmento derecho es todo mayor o igual que x. Al mismo tiempo, la posición de x también se puede usar para calcular que x es el número de este lote de datos en orden ascendente no descendente . Por lo tanto, la función int find (int a [], int left, int right, int k) se puede compilar y el punto de partición se puede obtener llamando a la función de partición para determinar si el punto de partición es el k-ésimo más pequeño. De lo contrario, llame de forma recursiva a la función de búsqueda para continuar en el segmento izquierdo o Encuentra la sección correcta.

Formato de entrada:
hay dos líneas de entrada: la
primera línea es n y k, 0 <k <= n <= 10000 y la
segunda línea es n números enteros

Formato de
salida : envía el k-ésimo número más pequeño

Ejemplo de entrada:
aquí hay un conjunto de entrada. P.ej:

10 4
2 8 9 0 1 3 6 7 8 2

Muestra de salida:
Aquí se proporciona la salida correspondiente. P.ej:

2
# include <iostream>
using namespace std;

int partition(int a[], int left, int right) {
    
    
	int i = left, j = right+1;
	int x = a[left];
	//将小于x的元素交换到左边区域,将大于x的元素交换到右边区域
	while(true) {
    
    
		while(a[++i] < x && i < right);
		while(a[--j] > x);
		if(i >= j)
			break;
		swap(a[i], a[j]);
	} 
	a[left] = a[j];
	a[j] = x;
	return j;
}

int find(int a[], int left, int right, int k) {
    
    
	int pos = partition(a, left, right);
	if(k-1 == pos){
    
    
		cout << a[k-1];
	}else if(k-1 < pos){
    
    
		find(a, left, pos-1, k);
	}else if(k-1 > pos){
    
    
		find(a, pos+1, right, k);
	}
	return 0;
}

int main() {
    
    
	int n, k;
	cin >> n >> k;
	int a[n];
	for(int i=0; i<n; i++){
    
    
		cin >> a[i];
	}
	find(a, 0, n-1, k);
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/Jessieeeeeee/article/details/111870060
Recomendado
Clasificación