Quels sont certains algorithmes que nous utilisons quotidiennement qui ont des complexités O (1), O (n log n) et O (log n)?
Quels sont certains algorithmes que nous utilisons quotidiennement qui ont des complexités O (1), O (n log n) et O (log n)?
Réponses:
Si vous voulez des exemples d'algorithmes / groupe d'énoncés avec une complexité temporelle comme indiqué dans la question, voici une petite liste -
O(1)
tempsO(n)
tempsEn un mot, tous les algorithmes de force brute, ou ceux de Noob qui nécessitent une linéarité, sont basés sur la complexité en temps O (n)
O(log n)
tempsO(n log n)
tempsLe facteur 'log n' est introduit en prenant en compte Divide and Conquer. Certains de ces algorithmes sont les mieux optimisés et fréquemment utilisés.
O(n^2)
tempsCes derniers sont censés être les algorithmes les moins efficaces si leurs homologues O (nlogn) sont présents. L'application générale peut être Brute Force ici.
O(log n)
liste avant la O(n)
liste afin que la liste soit dans l'ordre du meilleur au pire. haha :)
Un exemple simple de O(1)
pourrait être return 23;
- quelle que soit l'entrée, cela reviendra dans un temps fixe et fini.
Un exemple typique de O(N log N)
serait le tri d'un tableau d'entrée avec un bon algorithme (par exemple, tri par fusion).
Un exemple typique O(log N)
serait de rechercher une valeur dans un tableau d'entrée trié par bissection.
O (1) - la plupart des procédures de cuisson sont O (1), c'est-à-dire que cela prend un temps constant même s'il y a plus de gens pour cuisiner (dans une certaine mesure, car vous pourriez manquer d'espace dans votre casserole / vos casseroles et besoin de séparer la cuisson)
O (logn) - trouver quelque chose dans votre annuaire téléphonique. Pensez à la recherche binaire.
O (n) - lecture d'un livre, où n est le nombre de pages. C'est le temps minimum nécessaire pour lire un livre.
O (nlogn) - je ne peux pas penser immédiatement à quelque chose que l'on pourrait faire tous les jours qui est nlogn ... à moins que vous ne triiez les cartes en effectuant une fusion ou un tri rapide!
Je peux vous proposer quelques algorithmes généraux ...
Ce seraient les réponses instinctives, car cela ressemble à une question de devoir / entretien. Si vous cherchez quelque chose de plus concret, c'est un peu plus difficile car le public en général n'aurait aucune idée de l'implémentation sous-jacente (Sparing open source bien sûr) d'une application populaire, et le concept en général ne s'applique pas à une "application"
O (1): trouver le meilleur coup suivant aux échecs (ou Go d'ailleurs). Comme le nombre d'états de jeu est fini, il n'y a que O (1) :-)
O(1)
nanosecondes, et vous savez sûrement ce qui O(1)
se produira en premier ...
La complexité de l'application logicielle n'est pas mesurée et n'est pas écrite en notation big-O. Il n'est utile que de mesurer la complexité des algorithmes et de comparer des algorithmes dans le même domaine. Très probablement, quand nous disons O (n), nous voulons dire que c'est "O (n) comparaisons " ou "O (n) opérations arithmétiques". Cela signifie que vous ne pouvez comparer aucune paire d'algorithmes ou d'applications.
0 (logn) -Recherche binaire, élément de pic dans un tableau (il peut y avoir plus d'un pic) 0 (1) -en python calculant la longueur d'une liste ou d'une chaîne. La fonction len () prend 0 (1) temps. L'accès à un élément dans un tableau prend 0 (1) temps. L'opération de poussée dans une pile prend 0 (1) temps. 0 (nlogn) - Tri par fusion. le tri en python prend du temps nlogn. Ainsi, lorsque vous utilisez listname.sort (), cela prend du temps nlogn.
Remarque - La recherche dans une table de hachage prend parfois plus de temps constant en raison de collisions.
O (2 N )
O (2 N ) désigne un algorithme dont la croissance double à chaque ajout à l'ensemble de données d'entrée. La courbe de croissance d'une fonction O (2 N ) est exponentielle - commençant très peu profond, puis montant fulgurant. Un exemple de fonction O (2 N ) est le calcul récursif des nombres de Fibonacci:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
aurait été un meilleur exemple.