Projeto e Análise de Algoritmos - Capítulo 1 Introdução

Dois temas da teoria de algoritmos:

  • Projeto de algoritmo - como projetar um algoritmo eficaz para um problema
  • Análise de algoritmo - como avaliar ou julgar os prós e os contras de um algoritmo

1.1.1
Razões para aprender algoritmos 1: Algoritmos - a alma do programa O
processo
de solução do problema : analisando o problema → projetando o algoritmo → escrevendo o programa → organizando os resultados
Os quatro níveis de pesquisa em programação:
algoritmo → metodologia → linguagem →
razão da ferramenta 2 : Melhorar a capacidade de analisar problemas
Formalização de algoritmos → Pensamento lógico e organizado
1.1.2 Algoritmos e suas características importantes
Algoritmo (Algoritmo) : Uma descrição das etapas para resolver um problema específico é uma sequência limitada de instruções.
As cinco características do algoritmo :
entrada : um algoritmo possui zero ou mais entradas.
saída : um algoritmo que tem uma ou mais saídas.
(3) Finitude : um algoritmo sempre deve terminar após a execução de uma etapa finita e cada etapa deve ser concluída em um tempo finito.
certeza : o algoritmo de instrução deve ter o significado exato, para a mesma entrada só pode obter a mesma saída.
Viabilidade : A operação descrita pelo algoritmo pode ser implementada pelas operações básicas que foram implementadas um número limitado de vezes.
Exemplos:

  • Câmera digital com foco automático e tecnologia de obturador de sorriso
  • Tecnologia de reconhecimento de rosto

Tecnologia de reconhecimento facial comum:

  • Método de reconhecimento de rosto com base em recursos geométricos
  • Método de reconhecimento de rosto com base na face característica (PCA)
  • Método de reconhecimento de rosto baseado em rede neural

Exemplo : Método de divisão do algoritmo euclidiano para alternar para encontrar o maior divisor comum de dois números naturais me
en 1.1.3 Método de descrição do algoritmo
language Linguagem natural
Vantagens: fácil de entender
Desvantagens: demorado e ambíguo
Use o método: algoritmo de descrição de linhas grossas pensamento
Cuidado: Evitar a escrita parágrafos
euclidiana algoritmo
① entrada m e n;
② encontrar o restante dividido por n m r;
③ se r é igual a 0, então o símbolo n representa o maior final divisor comum, o algoritmo, caso contrário a execução da primeira etapa ④ ;
④ Coloque o valor de n em me coloque o valor de r em n;
⑤ Execute o passo ② novamente.
Advant
Vantagens do fluxograma : processo intuitivo
Desvantagens: falta de rigor e flexibilidade
Uso: descreva algoritmos simples
Nota: preste atenção ao nível de abstração
Algoritmo euclidiano
Insira a descrição da imagem aqui
language linguagem de programação
Vantagens: pode ser executado pelo computador
Desvantagens: abstração ruim, requisitos de linguagem Alto
uso: o algoritmo precisa ser verificado.Nota
: Escreva o algoritmo como uma sub-função
algoritmo euclidiano

#include <iostream.h> 
int CommonFactor(int m, int n) 
{     
	int r=m % n;     
	while (r!=0)     
	{       
		m=n;       
		n=r;       
		r=m % n;    
	}
	return n; 
} 
void main( ) 
{    
	cout<<CommonFactor(63, 54)<<endl; 
}

Language
Pseudocódigo (Pseudocódigo): um método entre linguagem natural e linguagem de programação, que utiliza a gramática básica de uma linguagem de programação; as instruções de operação podem ser combinadas com o design da linguagem natural.
Vantagens: forte capacidade de expressão, forte abstração, fácil de entender
algoritmo euclidiano

  1. r = m% n;
  2. Faça um loop até que r seja igual a 0
    2,1 m = n;
    2,2 n = r;
    2,3 r = m% n;
  3. Saída n;

1.1.5 Tipos de problemas importantes
1. Problema de localização
2. Problema de classificação
3. Problema de gráfico
4. Problema de combinação
5. Problema de geometria
1.2 Análise de
algoritmos Análise de algoritmos (análise de algoritmos) : Dois recursos de computador necessários para o algoritmo - tempo e Estimativa do espaço
Complexidade do tempo (complexidade do tempo) Objetivo da análise do algoritmo da
complexidade do espaço (complexidade do espaço) : projetar algoritmo - projetar o algoritmo com a menor complexidade possível.Selecionar algoritmo - escolher a menor complexidade entre vários algoritmos 1.2.1 Símbolo progressivo 1. Definição do grande símbolo O 1.1 Se houver duas constantes positivas c e n0, para qualquer n≥n0, existem T (n) ≤c × f (n), então chamamos T (n) = O (f (n)), ou o algoritmo em O (f (n). 2. Definição do sinal large grande 1.2 Se houver duas constantes positivas c e n0, para qualquer n≥n0, haverá T (n) ≥c × g (n), então chame T (n) = Ω (g (n)) 3. Definição do sinal 1.3 1.3 Se houver três constantes positivas c1, c2 e n0, haverá c1 × para qualquer n≥n0 f (n) ≥T (n) ≥c2 × f (n), então chame o teorema de T (n) = Θ (f (n)) 1.1










Se T (n) = amnm + am-1nm-1 +… + a1n + a0 (am> 0), então T (n) = O (nm) e T (n) = Ω (nm), portanto, existe T (n) = Θ (nm).
1.2.2
Exemplos dos casos melhores, piores e médios : encontre elementos iguais a um determinado valor k em uma matriz inteira unidimensional A [n] (supondo que haja apenas um elemento na matriz com um valor de k)

int Find(int A[ ], int n)   
{      
	for (i=0; i<n; i++)      
		if (A[i]= =k) 
			break;      
	return i;  
}

Conclusão : Se o tamanho do problema for o mesmo e o custo do tempo estiver relacionado aos dados de entrada, você precisará analisar o melhor caso, o pior caso e o caso médio.
Melhor caso : análise do
pior caso quando a probabilidade é grande :
caso médio do sistema em tempo real : conhecido como os dados de entrada são distribuídos, geralmente assume distribuição igual de probabilidade
1.2.3
Exemplo de análise de algoritmo não recursivo : algoritmo para encontrar o valor mínimo da matriz

int ArrayMin(int a[ ], int n)  
{       
	min=a[0];       
	for (i=1; i<n; i++)          
		if (a[i]<min) 
			min=a[i];       
	return min;  
}

Etapas gerais da análise de algoritmos não recursivos :

  1. Decida quais parâmetros usar como uma medida do tamanho do problema do algoritmo
  2. Descubra as frases básicas no algoritmo
  3. Verifique se o número de execuções de instruções básicas depende apenas do tamanho do problema
  4. Crie uma expressão de soma para o número de execuções de instruções básicas
  5. Use símbolos progressivos para representar esta expressão de soma

A chave : Crie uma expressão de soma que represente o tempo de execução do algoritmo e use símbolos progressivos para representar a expressão de soma.
1.2.4 A
chave para a análise de algoritmos recursivos : estabeleça uma relação recursiva de acordo com o processo recursivo e depois resolva essa relação recursiva.

  1. Técnica de adivinhação: Estime um limite superior para a relação recursiva e depois (usando indução matemática) prove que está correto.
  2. Técnica de recursão estendida
  3. Recursão universal de dividir e conquistar

1.2.5 A análise posterior do
algoritmo A análise posterior do algoritmo (Posteriori) também é chamada de análise experimental do algoritmo.É um método de cálculo post-mortem.Normalmente, o algoritmo precisa ser convertido no programa correspondente e executado no computador.
Etapas gerais:

  1. Esclareça o objetivo do experimento
  2. Determine o método de medir a eficiência do algoritmo e prepare o algoritmo para o experimento
  3. Decida sobre amostras de entrada e gere dados experimentais
  4. Execute o programa correspondente ao algoritmo na amostra de entrada e registre os dados experimentais obtidos
  5. Dados experimentais analisados
Publicado 48 artigos originais · Gosto 25 · Visita 2453

Acho que você gosta

Origin blog.csdn.net/qq_43628959/article/details/105058852
Recomendado
Clasificación