Bonjour! La conférence d'aujourd'hui sera un peu différente des autres. Il diffère en ce sens qu'il n'est qu'indirectement lié à Java. Cependant, ce sujet est très important pour tout programmeur. Nous parlerons d' algorithmes . Qu'est-ce qu'un algorithme ? En termes simples, il s'agit d'une certaine séquence d'actions qui doivent être effectuées pour obtenir le résultat souhaité . Nous utilisons souvent des algorithmes dans la vie de tous les jours. Par exemple, chaque matin, vous êtes confronté à une tâche : venir à l'école ou au travail, et en même temps être :
- Habillé
- Faire le ménage
- Bien nourri
- Réveillez-vous avec un réveil.
- Prenez une douche, lavez-vous le visage.
- Préparer le petit-déjeuner, préparer le café/thé.
- Manger.
- Si vous n’avez pas repassé vos vêtements depuis le soir, repassez-les.
- S'habiller.
- Quitter la maison.
- Achetez ou téléchargez sur Internet « Dictionnaire des noms de personnes russes » édition 1966.
- Trouvez tous les noms de notre liste dans ce dictionnaire.
- Notez sur une feuille de papier sur quelle page du dictionnaire se trouve le nom.
- Mettez les noms dans l'ordre en utilisant les notes sur une feuille de papier.
for
qui effectue cette tâche
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Quelle est la complexité de l’algorithme écrit ? Linéaire, O(N). Le nombre d'actions que le programme doit effectuer dépend exactement du nombre de nombres qui lui ont été transmis. S'il y a 100 nombres dans le tableau, il y aura 100 actions (sorties à l'écran). S'il y a 10 000 nombres dans le tableau, 10 000 actions devront être effectuées. Notre algorithme peut-il être amélioré ? Non. Dans tous les cas, nous devrons effectuer N passages dans le tableau et effectuer N sorties vers la console. Regardons un autre exemple.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Nous en avons un vide LinkedList
dans lequel nous insérons plusieurs nombres. Nous devons estimer la complexité de l'algorithme d'insertion d'un seul nombre dans LinkedList
notre exemple et comment il dépend du nombre d'éléments dans la liste. La réponse est O(1) - complexité constante . Pourquoi? Attention : à chaque fois nous insérons un numéro en début de liste. De plus, comme vous vous en souvenez, lors de l'insertion de nombres dans LinkedList
des éléments, ils ne sont décalés nulle part - les liens sont redéfinis (si vous avez soudainement oublié comment fonctionne LinkedList, jetez un œil à l'une de nos anciennes conférences ). Si maintenant le premier nombre de notre liste est le nombre х
, et que nous insérons le nombre y au début de la liste, il suffit de :
x.previous = y;
y.previous = null;
y.next = x;
Pour cette redéfinition des références, peu importe pour nous combien de nombres il existe actuellementLinkedList
- au moins un, au moins un milliard. La complexité de l'algorithme sera constante - O(1).
GO TO FULL VERSION