Conception et analyse d'algorithmes - Chapitre 1 Introduction

Deux thèmes de la théorie des algorithmes:

  • Conception d'algorithmes - comment concevoir un algorithme efficace pour un problème
  • Analyse d'algorithme - comment évaluer ou juger les avantages et les inconvénients d'un algorithme

1.1.1
Raisons de l'apprentissage des algorithmes 1: Les algorithmes - l'âme du programme Le
processus
de résolution du problème : analyser le problème → concevoir l'algorithme → écrire le programme → organiser les résultats
Quatre niveaux de recherche en programmation:
algorithme → méthodologie → langage →
raison de l' outil 2 : Améliorer la capacité d'analyser les problèmes
Formalisation des algorithmes → Pensée logique et organisée
1.1.2 Algorithmes et leurs caractéristiques importantes
Algorithme (algorithme) : Une description des étapes pour résoudre un problème particulier, est une séquence limitée d'instructions
Les cinq caractéristiques de l'algorithme :
entrée : un algorithme a zéro ou plusieurs entrées.
sortie : un algorithme ayant une ou plusieurs sorties.
(3) Finitude : Un algorithme doit toujours se terminer après l'exécution d'une étape finie, et chaque étape doit être terminée dans un temps fini.
certitude : l'algorithme d'instruction doit avoir le sens exact, pour la même entrée ne peut obtenir la même sortie.
Faisabilité : l'opération décrite par l'algorithme peut être implémentée par les opérations de base qui ont été implémentées un nombre limité de fois.
Exemples:

  • Technologie d'autofocus et d'obturateur de sourire pour les appareils photo numériques
  • Technologie de reconnaissance faciale

Technologie de reconnaissance faciale commune:

  • Méthode de reconnaissance des visages basée sur des caractéristiques géométriques
  • Méthode de reconnaissance faciale basée sur le visage caractéristique (PCA)
  • Méthode de reconnaissance faciale basée sur un réseau neuronal

Exemple : Méthode de division d'algorithme euclidienne pour trouver le plus grand diviseur commun de deux nombres naturels m et n
1.1.3 Méthode de description de l'algorithme
language Langage naturel
Avantages: faciles à comprendre
Inconvénients: longs et ambigus
Méthode d'utilisation: algorithme de description en trait épais Réflexions
Remarque: Évitez d'écrire l'
algorithme euclidien naturel
① Entrez m et n;
② Trouvez le reste r de m divisé par n;
③ Si r est égal à 0, alors n est le plus grand diviseur commun et l'algorithme se termine; sinon exécutez l'étape ④ ;
④ Mettez la valeur de n dans m et mettez la valeur de r dans n;
⑤ Répétez l'étape ②.
⑵ Organigramme
Avantages: processus intuitif
Inconvénients: manque de rigueur et de flexibilité
Utilisation: décrire des algorithmes simples
Remarque: faire attention au niveau d'abstraction
Algorithme euclidien
Insérez la description de l'image ici
language langage de programmation
Avantages: peut être exécuté par l'ordinateur
Inconvénients: mauvaise abstraction, exigences linguistiques
Utilisation élevée : l'algorithme doit être vérifié
Remarque: écrivez l'algorithme en tant que sous-fonction
algorithme euclidien

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

⑷ Langage pseudo-code-algorithme
Pseudo-code (Pseudocode): une méthode entre le langage naturel et le langage de programmation, qui utilise la grammaire de base d'un langage de programmation, les instructions de fonctionnement peuvent être combinées avec la conception du langage naturel.
Avantages: forte capacité d'expression, forte abstraction, algorithme euclidien facile à comprendre

  1. r = m% n;
  2. Boucle jusqu'à ce que r soit égal à 0
    2,1 m = n;
    2,2 n = r;
    2,3 r = m% n;
  3. Sortie n;

1.1.5 Types de problèmes importants
1. Trouver un problème
2. Problème de tri
3. Problème de graphique
4. Problème de combinaison
5. Problème de géométrie
1.2 Analyse d'
algorithmes Analyse d'algorithmes (analyse d'algorithmes) : Deux ressources informatiques requises pour l'algorithme - temps et Estimation de l'espace
Complexité temporelle (Complexité temporelle) Complexité
spatiale (Complexité spatiale)
But de l'analyse de l'algorithme :
concevoir un algorithme-concevoir l'algorithme avec une complexité aussi faible que possible.
Sélectionner l'algorithme-choisir la plus faible complexité parmi plusieurs algorithmes
1.2.1 Symbole progressif
1.
Définition du grand symbole O 1.1 S'il y a deux constantes positives c et n0, pour tout n≥n0, il y a T (n) ≤c × f (n), alors on appelle T (n) = O (f (n)), ou l'algorithme dans O (f (n).
2.
Définition du grand signe Ω 1.2 S'il y a deux constantes positives c et n0, pour tout n≥n0, il y a T (n) ≥c × g (n), alors appelons T (n) = Ω (g (n))
3.
Définition du signe Θ 1.3 S'il y a trois constantes positives c1, c2 et n0, il y a c1 × pour tout n≥n0 f (n) ≥T (n) ≥c2 × f (n), puis appelons T (n) = Θ (f (n))
théorème 1.1Si T (n) = amnm + am-1nm-1 +… + a1n + a0 (am> 0), alors T (n) = O (nm) et T (n) = Ω (nm), par conséquent, il y a T (n) = Θ (nm).
1.2.2
Exemples des meilleurs, des pires et des cas moyens : trouver des éléments égaux à une valeur donnée k dans un tableau entier unidimensionnel A [n] (en supposant qu'il n'y a qu'un seul élément dans le tableau avec une valeur de k)

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

Conclusion : si la taille du problème est la même et que le coût en temps est lié aux données d'entrée, vous devez analyser le meilleur cas, le pire et le cas moyen.
Meilleur cas : analyse du
pire cas lorsque la probabilité est grande :
cas moyen du système en temps réel : comment les données d'entrée sont réparties, supposent généralement une distribution de probabilité égale
1.2.3
Exemple d' analyse d' un algorithme non récursif : algorithme pour trouver la valeur minimale du tableau

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

Étapes générales d'une analyse d'algorithme non récursive :

  1. Décidez quel (s) paramètre (s) utiliser pour mesurer la taille du problème d'algorithme
  2. Découvrez les phrases de base dans l'algorithme
  3. Vérifiez si le nombre d'exécutions d'instructions de base dépend uniquement de la taille du problème
  4. Créer une expression de sommation pour le nombre d'exécutions d'instructions de base
  5. Utilisez des symboles progressifs pour représenter cette expression de sommation

La clé : créez une expression de sommation qui représente le temps d'exécution de l'algorithme, puis utilisez des symboles progressifs pour représenter l'expression de sommation.
1.2.4 La
clé de l'analyse des algorithmes récursifs : établir une relation récursive selon le processus récursif, puis résoudre cette relation récursive.

  1. Technique de devinettes: Estimer une limite supérieure pour la relation récursive, puis (en utilisant l'induction mathématique) prouver qu'elle est correcte.
  2. Technique de récursivité étendue
  3. Récursion universelle de division et de conquête

1.2.5 L'analyse postérieure de l'
algorithme L' analyse postérieure de l' algorithme (Posteriori) est aussi appelée analyse expérimentale de l'algorithme. C'est une méthode de calcul post mortem. Habituellement, l'algorithme doit être converti dans le programme correspondant et exécuté sur l'ordinateur.
Étapes générales:

  1. Clarifier le but de l'expérience
  2. Déterminer la méthode de mesure de l'efficacité de l'algorithme et préparer l'algorithme pour l'expérience
  3. Décidez des échantillons d'entrée et générez des données expérimentales
  4. Exécutez le programme correspondant à l'algorithme sur l'échantillon d'entrée et enregistrez les données expérimentales obtenues
  5. Données expérimentales analysées
A publié 48 articles originaux · Comme 25 · Visite 2453

Je suppose que tu aimes

Origine blog.csdn.net/qq_43628959/article/details/105058852
conseillé
Classement