Je suis coincé avec deux complexités de temps. Pour effectuer une recherche binaire avec un tableau trié est O (logN). Donc, pour rechercher un tableau non trié, nous devons d'abord le trier afin qu'il devienne O (NlogN). Nous pouvons donc effectuer une recherche binaire qui donne la complexité sous la forme O(N) mais j'ai lu qu'il pourrait s'agir de O (NlogN). Qui est correct?
La recherche binaire correspond aux listes "triées". La complexité est O (logn).
La recherche binaire ne fonctionne pas pour les listes "non triées". Pour ces listes, faites simplement une recherche directe à partir du premier élément; cela donne une complexité de O (n). Si vous deviez trier le tableau avec MergeSort ou tout autre algorithme O(nlogn), la complexité serait alors O (nlogn).
O(logn) < O(n) < O(nlogn)
La réponse à votre question se trouve dans votre question elle-même.
Vous commencez par trier la liste. Si vous triez votre liste à l'aide d'un tri rapide ou fusionné, la complexité devient o(n*log n)
. Partie - 1 se termine.
La deuxième partie de l'exécution d'une recherche binaire est effectuée dans la "liste triée". La complexité de la recherche binaire est o(log n)
. Par conséquent, la complexité du programme demeure finalement o(n*log n)
.
Toutefois, si vous souhaitez calculer la médiane du tableau, vous n'avez pas à trier la liste. Une simple application d'une recherche linéaire ou séquentielle peut vous aider.
La complexité temporelle de la recherche linéaire est O(n)
et celle de la recherche binaire est O(log n)
(log base-2). Si nous avons un tableau non trié et voulons utiliser la recherche binaire pour cela, nous devons d'abord trier le tableau. Et ici, nous devons passer un certain temps à O(n logn)
pour trier le tableau, puis prendre le temps de rechercher un élément.