Projeto e estrutura do algoritmo Capítulo 2 Recursão e divisão e conquista da estratégia Trabalho de casa

Suplemento de conhecimento:
Insira a descrição da imagem aqui

Verdadeiro ou falso

1-1
Os dois aspectos principais da análise de algoritmos são a análise da complexidade do tempo e da complexidade do espaço.

T F

1-2
Em uma lista unida com N nós, a complexidade de tempo para acessar os nós e adicionar nós corresponde a O (1) e O (N), respectivamente.

T F

1-3
A melhor "pior complexidade de tempo" que um algoritmo baseado em comparação pode obter é O (NlogN).

T F

1-4
classifica rapidamente os registros N. No pior caso, a complexidade do tempo é O (NlogN).

T F

1-5
(neuDS) A complexidade de tempo do algoritmo de ordenação por inserção direta no melhor caso é O (n).

T F

Múltipla escolha

2-1
Use a pesquisa binária para encontrar um determinado número a partir de 100 inteiros ordenados. No pior caso, o número de comparações necessárias é:

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

Suplemento de conhecimento:
O número máximo de comparações para
Insira a descrição da imagem aqui
pesquisa binária é que o método de pesquisa binária faz pleno uso da relação de ordem entre os elementos e adota uma estratégia de divisão e conquista para completar a tarefa de pesquisa em tempo O (logn) no pior caso;

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

2-2
Use dividir e conquistar para resolver um problema de escala N. Qual dos métodos a seguir é o mais lento?

A. Cada etapa divide o problema em 2 subproblemas com uma escala de N / 3, e a etapa de tratamento leva O (N)
B. Cada etapa divide o problema em 2 subproblemas com uma escala de N / 3, e a etapa de tratamento O demorado (NlogN)
C. Em cada etapa, o problema é dividido em 3 subproblemas com uma escala de N / 2, e a etapa de tratamento leva O (N)
D. Cada etapa divide o problema em 3 subproblemas com uma escala de N / 3, e a etapa de tratamento leva O (NlogN)

C não é apenas grande em escala de subproblemas, mas também grande em número, e leva muito tempo para mesclar subquestões;

2-3
(NeuDS_C ++) Ao realizar a pesquisa binária na tabela linear, a tabela linear deve ser ().

A. Armazene na sequência
B. Armazene na corrente
C. Armazenado de forma sequencial, e os nós são classificados em ordem por palavras-chave
D. Armazenado na forma de links, e os nós são classificados em ordem por palavras-chave

2-4
Quais dos seguintes algoritmos de classificação podem aparecer: Antes do início da última passagem, todos os elementos não estão em suas posições finais? (Suponha que o número de elementos a serem arranjados N> 2)

A. Classificação de bolha
B. Classificação de inserção
C. Classificação de heap
D. Classificação rápida

2-5
Dado 100.000.000 de registros a serem organizados, cada registro tem 256 bytes e a memória é de 128 MB. Quantas rodadas precisam ser feitas se a fusão bidirecional simples for usada?

(2 minutos)

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

1 MB tem 4 registros, a memória total é 128 × 4 = 512 registros, 512 = 2 9 , você precisa fazer log 2 9 = 9 (log com 2 como base) rodada;

2-6
Mesclar e classificar N registros, a ordem de magnitude do número de passagens de mesclagem é:

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

2-7
Mesclar e classificar N registros, a complexidade do espaço é:

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

2-8
Use a recursão para classificar rapidamente a tabela de sequência. Qual das seguintes afirmações sobre o número de recursões está correta:

A. Após cada divisão, o processamento da partição mais longa primeiro pode reduzir o número de recursões
B. Após cada divisão, o processamento da partição mais curta primeiro pode reduzir o número de recursões
C. O número de recursão não tem nada a ver com a ordem de processamento da partição obtida após cada divisão
D. O número de recursão não tem nada a ver com a ordem dos dados iniciais

2-9
Se a sequência do elemento de dados {12, 13, 8, 11, 5, 16, 2, 9} for o resultado da primeira classificação usando um dos seguintes métodos de classificação, o algoritmo de classificação só pode ser:

A. Classificação rápida
B. Selecione classificação
C. Classificação de heap
D. Mesclar classificação

Na
classificação externa de 2-10 , suponha que temos 5 segmentos ordenados com comprimentos de 2 , 8, 9, 5 e 3. Qual das seguintes ordens de mesclagem pode obter o menor tempo de mesclagem?

A. Combine os segmentos ordenados com os comprimentos 2 e 3 para obter o segmento # 1; mescle o segmento # 1 com os segmentos ordenados com 5 para obter o segmento # 2; combine o segmento # 2 com os segmentos ordenados com comprimento 8 Mesclando segmentos para obter a execução do segmento 3; Mesclagem da execução 3 com um segmento ordenado de comprimento 9
B. Combine os segmentos ordenados com os comprimentos 2 e 3 para obter o segmento # 1; mescle o segmento # 1 com os segmentos ordenados com 5 para obter o segmento # 2; mescle os segmentos ordenados com os comprimentos 8 e 9, Obtenha a seção da execução # 3; mescle a execução # 2 e a execução # 3
C. Mesclar as seções ordenadas com comprimentos 2 e 3 para obter a seção Execução # 1; mesclar as seções ordenadas com comprimentos 5 e 8 para obter a seção Execução # 2; mesclar a Execução # 1 e a Execução # 2 para obter a seção Execução # 3 ; Mesclar a execução # 3 com a seção ordenada de comprimento 9
D. Mesclar as seções ordenadas com comprimentos 2 e 3 para obter a seção Run # 1; mesclar as seções ordenadas com comprimentos de 5 e 8 para obter a seção Run # 2; Combine a execução # 2 com um segmento ordenado de comprimento 9 para obter o segmento da execução # 3; mesclar a execução # 1 e a execução # 3

Questões de programação

7-1 Encontre o menor número k (20 pontos)

Projete um algoritmo com um tempo médio de O (n) e encontre o k-ésimo menor número entre n (1 <= n <= 1000) inteiros não ordenados.

Dica: a função da função int partição (int a [], int à esquerda, int à direita) é baseada em um determinado elemento x em a [esquerda] a [direita] (como a [esquerda]) a [esquerda] a [direita ] É dividido, o segmento esquerdo da posição x dividido é todo menor ou igual ax, e o segmento direito é todo maior ou igual a x. Ao mesmo tempo, a posição de x também pode ser usada para calcular que x é o número deste lote de dados em ordem crescente não decrescente . Portanto, a função int find (int a [], int esquerda, int direita, int k) pode ser compilada e o ponto de partição pode ser obtido chamando a função de partição para determinar se o ponto de partição é o k-ésimo menor. Caso contrário, chame recursivamente a função find para continuar no segmento esquerdo ou Encontre a seção certa.

Formato de entrada:
Existem duas linhas de entrada: a
primeira linha é n e k, 0 <k <= n <= 10000 e a
segunda linha é n inteiros

Formato de
saída : produz o k-ésimo menor número

Amostra de entrada:
Aqui está um conjunto de entradas. Por exemplo:

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

Amostra de saída:
a saída correspondente é fornecida aqui. Por exemplo:

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;
} 

Acho que você gosta

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