J'étudie l'algorithme Randomized-QuicksTort. J'ai réalisé que la période d'exécution de cet algorithme est toujours représentée comme "temps de fonctionnement attendu". P>
Quelle est la raison de spécifier ou d'utiliser la "heure de fonctionnement attendue"? Pourquoi ne calculons-nous pas le cas pire ou moyen? P>
4 Réponses :
Lorsque nous disons «temps de fonctionnement attendu», nous parlons de la durée de fonctionnement du cas moyen. Nous pourrions parler d'une liaison supérieure ou inférieure asymptotiquement (ou les deux). De même, nous pouvons parler de limites asymétrictatiquement supérieures et inférieures sur la durée de fonctionnement des meilleurs ou des pires cas. En d'autres termes, la liaison est orthogonale à l'affaire. P>
Dans le cas de Randomized QuickSort, les gens parlent de l'heure de fonctionnement attendue (O (N log n)) car cela rend l'algorithme mieux que le pire cas O (n ^ 2) algorithmes (ce qu'il est, mais pas asymptotiquement dans le pire des cas). En d'autres termes, Randomized Quicksort est très asymptotiquement plus vite que par exemple. BubblesTort pour presque toutes les intrants, et les gens veulent un moyen de faire ce fait clair; Donc, les gens soulignent le temps de fonctionnement moyen de QuicksTort randomisé, plutôt que le fait qu'il est aussi asymptotique que BubblesTort dans le pire des cas. P>
Comme indiqué dans les commentaires et dans l'excellente réponse de Greg, il peut également être courant de parler du temps d'exécution attendu par rapport à l'ensemble des séquences de choix aléatoires effectuées au cours de l'exécution de l'algorithme sur une entrée fixe et arbitraire. Cela peut être plus naturel puisque nous pensons aux intrants comme étant passivement agi par un algorithme actif. En fait, il est équivalent de parler d'une moyenne sur des intrants aléatoires et d'un algorithme dont l'exécution ne considère pas les différences structurelles. Ces deux formulations sont plus faciles à visualiser que la moyenne réelle sur l'ensemble des paires d'intrants et de choix aléatoires, mais vous obtenez les mêmes réponses que vous approchez de votre approche. P>
Cela signifie-t-il que le pire des cas de tri rapide randomisé est également O (n ^ 2) ??
@vincentmathew dépend de ce que vous entendez par le pire des cas. Voir aussi la réponse de Greg ci-dessous. Fondamentalement, si vous ne considérez que des flips de pièces attendus, c'est O (n log n). Si vous considérez la pire pièce de monnaie, alors c'est O (N ^ 2), et une laide à cela. Qu'est-ce qui vous constitue un cas: une seule exécution sur une instance aléatoire, ou la moyenne de nombreuses exécutions sur cette instance?
Je ne pense pas que cette réponse soit très précise. Je pense que la réponse Stackoverflow.com/a/7898295/3924118 est plus précise.
@nbro adressé.
Parfois, le temps d'exécution attendu signifie la durée moyenne de fonctionnement pour une entrée choisie au hasard. Mais si c'est un algorithme randomisé, ce qui est souvent signifié est le temps de fonctionnement attendu par rapport aux choix aléatoires fabriqués par l'algorithme, pour chaque entrée. C'est ce que signifie ici. Pour chaque entrée forte> d'éléments N, Randomized QuickSort exécute dans le temps O (n (log n)) en moyenne, moyennée uniquement sur ses coups de pièces. P>
Dans ce sens limité, le temps de fonctionnement attendu est une mesure très défendue de l'heure de fonctionnement d'un algorithme randomisé. Si vous ne vous inquiétez que du pire qui puisse arriver lorsque l'algorithme se retourne en interne, alors pourquoi la peine de passer des pièces de monnaie du tout? Vous pourriez aussi bien les faire toutes les têtes. (Qui dans le cas de Quicksort randomisé, la réduirait à QuicksTort ordinaire.) P>
cas moyen vs le pire des cas est une matière beaucoup plus grave lorsqu'il s'agit d'une moyenne des intrants plutôt que d'une moyenne sur la pièce de monnaie. Dans ce cas, la durée de fonctionnement moyenne est au mieux une figure qui n'est pas adaptable aux modifications du type d'entrée --- Différentes utilisations de l'algorithme pourrait avoir différentes distributions d'entrées. Je dis au mieux parce que vous ne savez peut-être pas que la distribution hypothétique des intrants est toujours la vraie utilisation. P>
En regardant le pire des cas en ce qui concerne les flips de pièces de monnaie n'a de sens que lorsque vous souhaitez courir rapidement lorsque votre pièce de monnaie ne change pas, et ne pas courir trop lentement, même lorsque votre pièce se retourne malchanceuse. Par exemple, imaginez que vous avez besoin d'un algorithme de tri pour le régulateur d'une alimentation en oxygène (pour un patient médical ou un plongeur). Ensuite, Randomized Quicksort n'aurait aucun sens si vous voulez que le résultat soit très rapide, pour la commodité de l'utilisateur, et si le pire des cas ne suffirait pas de l'utilisateur, quoi qu'il arrive. Il s'agit d'un scénario de tri pour trier des algorithmes, car il existe des algorithmes de tri non aléatoire (comme le tri de la fusion) qui ne sont pas beaucoup plus lents que le Quicksort, même est en moyenne. Il est moins artificiel pour un problème comme des tests de primalité, où des algorithmes randomisés sont (D'accord, vous pourriez vous demander pourquoi un régulateur d'oxygène voudrait savoir si des nombres particuliers sont primordiaux. Peut-être qu'il doit communiquer avec un réseau informatique médical et que la communication doit être sécurisée pour des raisons de confidentialité médicale ...) < / p>
Un algorithme est randomisé si son comportement est déterminé non seulement par son entrée, mais également par des valeurs produites par un générateur de nombres aléatoires. C'est pourquoi vous analysez ce que l'on attend. P>
Une seule analyse de cas est sur l'entrée uniquement. P>
Un peu en retard et c'est plus un long commentaire, mais c'est quelque chose que je pense être important à ajouter. Tout algorithme avec temps attendu t peut devenir le pire cas o (t) algorithme, l'inégalité de Markov nous dit que si le temps prévu est alors avec une probabilité d'au moins 1/2 l'algorithme prendra moins de 2T des opérations, afin que nous puissions simplement Exécutez l'algorithme et si cela prend plus de 2 t des opérations, nous nous arrêtons et que nous courons cela, ce faisant, ce faisant au plus, les temps de journal (1 / delta) nous donneront une probabilité d'échec de la plupart des Delta. Nous obtenons donc une complexité de temps O (t * journal (1 / delta)) avec une probabilité d'échec delta. Mais puisque LOG est si petit, ceci est pour toutes les raisons pratiques d'un algorithme O (t) avec une probabilité d'échec 0. Par exemple, si nous choisissons Delta d'être la probabilité 2 atomes sélectionnés au hasard de l'univers observable serait le même atome que nous obtenons un journal (1 / delta) = 260 afin que nous puissions simplement dire que nous obtenons O (t) avec 0 probabilité d'échec. P>
Voir Quora.com / ...