Accueil Finances personnelles 10 Problèmes algorithmiques Encore à résoudre - les nuls

10 Problèmes algorithmiques Encore à résoudre - les nuls

Table des matières:

Vidéo: Comment corriger un algorithme en JavaScript ? (Mini projet #2) [M0L12] 2024

Vidéo: Comment corriger un algorithme en JavaScript ? (Mini projet #2) [M0L12] 2024
Anonim

Les algorithmes existent depuis des siècles, donc on pourrait penser que les scientifiques auraient déjà découvert et résolu tous les algorithmes. Malheureusement, le contraire est vrai. Résoudre un algorithme particulier présente souvent quelques questions de plus que l'algorithme ne résout pas et qui ne semble pas apparente jusqu'à ce que quelqu'un ait trouvé la solution.

Les algorithmes sont une série d'étapes utilisées pour résoudre un problème, et vous ne devez pas les confondre avec d'autres entités, telles que des équations. Un algorithme n'est jamais une solution à la recherche d'un problème. Personne ne créerait une série d'étapes pour résoudre un problème qui n'existe pas encore (ou pourrait ne jamais exister).

Cette liste concerne les problèmes algorithmiques qui pourraient servir à un but si quelqu'un devait trouver une solution pour eux.

Traiter les recherches de texte

De nombreuses recherches de texte impliquent l'utilisation d'expressions régulières - une sorte de raccourci qui indique à l'ordinateur ce qu'il doit trouver. La grammaire utilisée pour l'expression régulière dépend de la langue ou de l'application, mais vous trouvez des expressions régulières utilisées dans un certain nombre d'endroits, y compris les traitements de texte, les applications de messagerie, les boîtes de dialogue de recherche et toutes sortes d'autres termes pour une gamme d'éléments de texte.

L'un des problèmes actuels avec les expressions régulières est qu'il semble que chaque environnement d'application possède un ensemble de règles similaires, mais avec juste assez de différences pour rendre difficile la création d'un terme de recherche. Le problème de hauteur d'étoile généralisé cherche à découvrir s'il existe une syntaxe d'expression régulière généralisée. Si c'est le cas, l'algorithme résultant permettrait à quelqu'un d'apprendre une seule méthode de création d'expressions régulières pour effectuer des recherches.

Différencier les mots

Lorsque vous travaillez avec des caractères, un ordinateur voit des chiffres, pas des lettres. Les chiffres sont en fait juste une série de 0 et 1 à l'ordinateur et n'ont pas de sens. La combinaison de caractères en chaînes rend la série de 0 et de 1 plus longue. Par conséquent, comparer deux chaînes de caractères, ce qu'un humain peut faire en un coup d'œil, peut prendre du temps dans un ordinateur, et la confusion est probable entre les conjugués. Par exemple, à moins que vous soyez prudent dans la construction de l'algorithme, un ordinateur pourrait confondre enlist et écouter. Plus important, l'ordinateur aurait besoin de temps pour discerner la différence entre les deux. Le problème des mots de séparation cherche à trouver l'algorithme le plus petit (et le plus rapide) possible (un automate fini déterministe, DFN, dans ce cas) pour effectuer la séparation des mots.Le but est d'accepter un mot et de rejeter un autre, donné deux mots d'une longueur particulière.

Déterminer si une application va se terminer

L'un des problèmes proposés par Alan Turing en 1936 est de savoir si un algorithme, étant donné la description d'un programme et d'une entrée, pourrait déterminer si le programme s'arrêterait (le problème d'arrêt). Lorsque vous travaillez avec une application simple, il est facile de déterminer dans de nombreux cas si le programme va s'arrêter ou continuer à fonctionner dans une boucle sans fin. Cependant, à mesure que la complexité du programme augmente, il devient plus difficile de déterminer le résultat de l'exécution du programme avec une entrée donnée. Une machine de Turing ne peut pas faire cette détermination; le résultat est un code buggé avec des boucles infinies. Aucune quantité de tests utilisant la technologie actuelle ne peut résoudre ce problème.

Un hypercomputeur est un modèle informatique qui va au-delà de la machine de Turing pour résoudre des problèmes tels que le problème de l'arrêt. Cependant, de telles machines ne sont pas possibles en utilisant la technologie actuelle. Si c'était possible, vous seriez en mesure de leur demander toutes sortes d'impondérables auxquels les ordinateurs ne peuvent pas actuellement répondre. Cet article vous donne une bonne idée de ce qui se passerait si quelqu'un était capable de résoudre ce problème.

Créer et utiliser des fonctions unidirectionnelles

Une fonction unidirectionnelle est une fonction facile à utiliser pour obtenir une réponse dans un sens, mais presque impossible à utiliser avec l'inverse de cette réponse. En d'autres termes, vous utilisez une fonction à sens unique pour créer quelque chose comme un hachage qui apparaîtrait comme faisant partie d'une solution de cryptographie, d'identification personnelle, d'authentification ou d'autres besoins de sécurité des données.

L'existence d'une fonction unidirectionnelle est moins mystérieuse et plus une question de preuve. De nombreux systèmes de télécommunications, de commerce électronique et d'e-banking reposent actuellement sur des fonctions censées être unilatérales, mais personne ne sait vraiment si elles sont à sens unique. L'existence d'une fonction unidirectionnelle est actuellement une hypothèse, pas une théorie. Si quelqu'un était capable de prouver qu'une fonction unidirectionnelle existe, les problèmes de sécurité des données seraient plus faciles à résoudre du point de vue de la programmation.

Multiplier de très grands nombres

De très grands nombres existent dans de nombreux endroits. Par exemple, pensez à effectuer les calculs impliquant des distances vers Mars, ou peut-être Pluton. Des méthodes existent actuellement pour effectuer la multiplication sur de très grands nombres, mais elles ont tendance à être lentes car elles nécessitent plusieurs opérations à compléter. Le problème se produit lorsque les nombres sont trop grands pour tenir dans les registres du processeur. À ce stade, la multiplication doit se produire en plus d'une étape, ce qui ralentit considérablement les choses. Les solutions actuelles comprennent:

  • algorithme de multiplication complexe de Gauss
  • multiplication de Karatsuba
  • méthodes de transformée de Fourier

Même si de nombreuses méthodes actuellement disponibles donnent des résultats acceptables, elles prennent du temps, et Lorsque vous avez beaucoup de calculs à effectuer, le problème de temps peut devenir critique. Par conséquent, la multiplication des grands nombres est l'un de ces problèmes qui nécessite une meilleure solution que ceux disponibles aujourd'hui.

Diviser une ressource équitablement

Diviser les ressources équitablement peut ne pas sembler difficile, mais les humains, étant le genre envieux, pourraient voir la ressource inégalement divisée à moins de trouver un moyen d'assurer à chacun que la division est juste. C'est le problème du gâteau-coupe sans envie. Bien sûr, quand vous coupez un gâteau, peu importe à quel point vous essayez de le faire, il y a toujours la perception que la division est injuste. Créer une répartition équitable des ressources est important dans la vie quotidienne pour minimiser les conflits entre les parties prenantes dans toute organisation, rendant tout le monde plus efficace.

Deux solutions existent déjà pour un problème de coupe de gâteau sans envie avec un nombre spécifique de personnes, mais aucune solution générale n'existe. Quand il y a deux personnes impliquées, la première coupe le gâteau et la seconde choisit la première pièce. De cette manière, les deux parties sont assurées d'une division égale. Le problème devient plus difficile avec trois personnes, mais vous pouvez essayer la solution Selfridge-Conway pour le problème. Cependant, après avoir atteint quatre personnes, aucune solution n'existe.

Réduction du temps de calcul de la distance d'édition

La distance d'édition entre deux chaînes est le nombre d'opérations nécessaires pour transformer une chaîne dans l'autre chaîne. Le calcul de la distance tourne autour des opérations de distance Levenshtein, qui sont la suppression, l'insertion ou la substitution d'un caractère dans la chaîne. Cette technique particulière voit l'utilisation dans les interfaces de langage naturel, la quantification de séquence d'ADN, et toutes sortes d'autres endroits où vous pouvez avoir deux chaînes similaires qui nécessitent une sorte de comparaison ou de modification. Un certain nombre de solutions à ce problème existent actuellement, toutes assez lentes. En fait, la plupart d'entre eux prennent un temps exponentiel, de sorte que le temps requis pour effectuer une transformation s'ajoute rapidement au point où les humains peuvent voir des pauses dans le traitement de l'entrée. La pause n'est pas si mauvaise lorsque vous utilisez un traitement de texte qui effectue des vérifications automatiques des mots et transforme un mot mal orthographié en mot correct. Cependant, lorsque vous utilisez des interfaces vocales, la pause peut devenir tout à fait perceptible et provoquer des erreurs chez l'opérateur humain.

Résolution rapide des problèmes

Alors que l'apprentissage automatique décolle et que nous comptons de plus en plus sur les ordinateurs pour résoudre les problèmes, la question de la rapidité avec laquelle un ordinateur peut résoudre un problème devient critique. Le problème P versus NP demande simplement si un ordinateur peut résoudre un problème rapidement lorsqu'il peut vérifier rapidement la solution au problème. En d'autres termes, si l'ordinateur peut raisonnablement vérifier qu'une réponse humaine à un problème est correcte en temps polynomial ou moins, peut-il également résoudre le problème lui-même en temps polynomial ou moins?

Cette question a été discutée à l'origine dans les années 1950 par John Nash dans des lettres adressées à la National Security Agency (NSA) et encore une fois dans des lettres entre Kurt Gödel et John von Neumann. En plus de l'apprentissage automatique (et de l'IA en général), ce problème particulier concerne de nombreux autres domaines, notamment les mathématiques, la cryptographie, la recherche algorithmique, la théorie des jeux, le traitement multimédia, la philosophie et l'économie.

Jouer le jeu de la parité

Au début, résoudre un jeu peut ne pas sembler utile dans la vie réelle. Oui, les jeux sont amusants et intéressants, mais ils ne fournissent pas vraiment de base pour faire quelque chose d'utile - du moins, c'est la théorie générale. Cependant, la théorie des jeux entre en jeu dans un grand nombre de scénarios de la vie réelle, dont beaucoup impliquent des processus complexes que quelqu'un peut comprendre plus facilement en tant que jeux que comme processus réels. Dans ce cas, le jeu aide les gens à comprendre la vérification automatisée et la synthèse du contrôleur, entre autres choses. Vous pouvez en savoir plus sur le jeu de parité. En fait, vous pouvez le jouer.

Comprendre les problèmes spatiaux

Pour replacer ce problème particulier dans son contexte, pensez à déplacer des boîtes dans un entrepôt ou à d'autres situations dans lesquelles vous devez considérer l'espace dans lequel les choses bougent. Évidemment, si vous avez beaucoup de boîtes dans un grand entrepôt et qu'elles ont toutes besoin d'un chariot élévateur à fourche, vous ne voulez pas essayer de trouver comment les stocker de manière optimale en les réorganisant physiquement. C'est ici que vous devez résoudre le problème en visualisant une solution.

Cependant, la question est de savoir si tous les problèmes spatiaux ont une solution. Dans ce cas, pensez à l'un des puzzles de ces enfants qui vous permet de mettre une photo ensemble en faisant glisser les petits carreaux autour. Il semble qu'une solution devrait exister dans tous les cas, mais dans certains cas, un mauvais point de départ peut entraîner une situation sans solution.

Des mathématiciens comme Sam Loyd utilisent souvent des puzzles pour illustrer des problèmes mathématiques complexes, dont certains n'ont pas de solution aujourd'hui. Visiter ces sites est amusant parce que vous avez non seulement des divertissements gratuits, mais aussi de la matière à réflexion. Les problèmes que ces puzzles soulèvent ont des applications pratiques, mais ils sont présentés de façon amusante.

10 Problèmes algorithmiques Encore à résoudre - les nuls

Le choix des éditeurs

Tableaux et pointeurs en C ++ - le nom du tableau des mannequins

Tableaux et pointeurs en C ++ - le nom du tableau des mannequins

Est un pointeur sur le tableau lui-même. Le tableau est une séquence de variables stockée en mémoire. Le nom du tableau pointe vers le premier élément. C'est une question intéressante sur les pointeurs: Pouvez-vous avoir un en-tête de fonction, comme la ligne suivante, et juste utiliser sizeof pour déterminer comment ...

Boost Bibliothèques et C ++ - mannequins

Boost Bibliothèques et C ++ - mannequins

De nombreux développeurs utilisent les bibliothèques Boost car elles fournissent un code de haute qualité une partie de Boost est en train d'être normalisée pour être incluse dans la bibliothèque standard. L'une des meilleures choses à propos de Boost est que la bibliothèque elle-même est gratuite. Le site Web de Boost tient à faire savoir aux développeurs qu'ils ne ...

Casser les programmes Mis à part C ++ - les mannequins

Casser les programmes Mis à part C ++ - les mannequins

Le programmeur peut casser un seul programme en fichiers sources distincts généralement appelés modules. Ces modules sont compilés séparément dans le code machine par le compilateur C ++, puis combinés au cours du processus de génération pour générer un seul programme. Ces modules sont également connus par les geeks du compilateur en tant qu'unités de traduction C ++. Le processus de combinaison ...

Le choix des éditeurs

Comment régler les paramètres via l'affichage d'informations sur votre Nikon D5200 - mannequins

Comment régler les paramètres via l'affichage d'informations sur votre Nikon D5200 - mannequins

L'information l'affichage ne sert pas uniquement à vérifier les paramètres de prise de vue actuels; Cela vous donne également un accès rapide à certains des paramètres les plus critiques. La touche de cette fonction est le bouton Information Edit, situé à l'arrière de l'appareil photo, à droite du viseur. Voici comment cela fonctionne: Afficher les informations ...

Met en surbrillance le mode d'affichage sur votre Nikon D7100 - mannequins

Met en surbrillance le mode d'affichage sur votre Nikon D7100 - mannequins

En mode d'affichage hautes lumières sur votre Nikon D7100 pense que l'appareil photo peut être surexposé clignoter dans le moniteur de l'appareil photo. L'un des problèmes de photo les plus difficiles à corriger dans un programme de retouche photo est connu sous le nom de surbrillance dans certains cercles et de surbrillance dans d'autres. Les deux termes signifient que les zones les plus claires de ...

Comment régler les paramètres via la bande de contrôle Nikon D3300 - les tétines

Comment régler les paramètres via la bande de contrôle Nikon D3300 - les tétines

Présentes en bas à gauche Au coin du Nikon D3300, le bouton i active une bande de contrôle qui vous donne un accès rapide à certains paramètres de prise de vue critiques. Voici comment utiliser la bande de contrôle pour la photographie dans le viseur: Affichez l'écran d'informations. Vous pouvez le faire en appuyant sur le bouton Info. Appuyez sur le bouton i. Le haut ...

Le choix des éditeurs

Comment imprimer vos diapositives et notes Keynote - Les tétines

Comment imprimer vos diapositives et notes Keynote - Les tétines

Lorsque vous créez une présentation dans Snow Leopard Application Keynote, vous ne pouvez pas toujours vouloir imprimer des documents. Cependant, si vous présentez un long diaporama avec beaucoup d'informations que vous aimeriez que votre public se souvienne, rien ne vaut les documents qui incluent des images réduites de vos diapositives (et, facultativement, les notes de votre présentateur). Vous pouvez ...

Comment réorganiser ou supprimer les signets - les mannequins

Comment réorganiser ou supprimer les signets - les mannequins

Safari enregistre vos signets et vos dossiers de signets dans l'ordre dans lequel vous les créez, en les ajoutant au bas d'une liste toujours croissante. Si vous continuez à ajouter des marque-pages au menu Signets sans les placer dans des dossiers, vous pouvez constater que vous avez un nombre de signets gazillion indiqué bon gré mal gré et que vous ne vous en souvenez plus ...

Pour ouvrir et utiliser l'iDisk de Snow Leopard - les mannequins

Pour ouvrir et utiliser l'iDisk de Snow Leopard - les mannequins

Avec un compte MobileMe actif, iDisk est disponible et vous fournit un espace de stockage supplémentaire. Pour connaître l'espace de stockage utilisé et pour configurer l'accès à votre dossier Public, ouvrez les Préférences Système, cliquez sur l'icône MobileMe, puis sur le bouton iDisk pour afficher les paramètres. Vos paramètres iDisk sont disponibles dans les Préférences Système. Le ...