


'La machine la plus importante jamais construite', Alan Turing et la Machine de Turing
Le calcul est un concept familier que la plupart d'entre nous comprennent intuitivement. Prenons comme exemple la fonction f (x) = x + 3. Lorsque x vaut 3, f (3) = 3 + 3. La réponse est 6, très simple. Évidemment, cette fonction est calculable. Mais certaines fonctions ne sont pas si simples, et déterminer si elles peuvent être calculées n’est pas trivial, ce qui signifie qu’elles ne mèneront peut-être jamais à une réponse définitive.
En 1928, les mathématiciens allemands David Hilbert et Wilhelm Ackermann ont proposé un problème appelé Entscheidungsproblem (c'est-à-dire le « problème de détermination »). Au fil du temps, la question qu’ils se posaient conduirait à une définition formelle de la calculabilité, une définition qui permettrait aux mathématiciens de répondre à une multitude de nouvelles questions et de jeter les bases de l’informatique théorique.
Cette définition a été proposée par un étudiant diplômé de 23 ans nommé Alan Turing, qui a écrit un article fondateur en 1936 qui non seulement introduisait le concept d'informatique, mais aussi formellement exprimé et prouvé un problème fondamental en mathématiques, créant une base de connaissances pour l’invention des ordinateurs électroniques. La grande vision de Turing était de fournir des réponses concrètes aux problèmes informatiques sous la forme d'une machine abstraite, qui fut plus tard baptisée machine de Turing par son directeur de thèse, Alonzo Church.
Une machine de Turing est abstraite car elle n'existe pas (et ne peut pas) exister physiquement en tant qu'appareil tangible. Il s’agit plutôt d’un modèle conceptuel de calcul : si cette machine peut calculer une fonction, alors la fonction est calculable.
# 🎜 🎜#Quand Alan Turing a inventé la machine de Turing en 1936, il a également créé l'informatique moderne.
Alan Turing et sa machine de TuringÇa fonctionne comme ça : Une machine de Turing peut lire et changer symboles sur une bande infiniment longue comme dicté par un tableau de règles. La bande est composée de « cellules » et chaque cellule ne peut stocker qu’un seul symbole. Les machines de Turing utilisent des têtes de bande pour lire et réécrire le contenu des cellules. Chaque règle du tableau de règles détermine ce que la machine de Turing doit faire en fonction de son état actuel et du symbole qu'elle lit. Une machine de Turing peut entrer dans un état final (un « état d'acceptation » ou un « état de rejet ») en fonction de l'endroit où elle s'est arrêtée, en décidant d'accepter ou de rejeter l'entrée. Ou bien une machine de Turing reste coincée dans une boucle infinie et ne cesse de lire la bande.
La meilleure façon de comprendre une machine de Turing est de penser à un exemple simple comme celui-ci. Imaginons qu'une machine de Turing soit conçue pour nous dire si une entrée donnée est le nombre zéro. Nous entrerons le numéro 0001 avec un espace (#), ce qui signifie que "#0001#" est la partie pertinente de notre bande.
La machine de Turing démarre à partir d'un état initial, appelons-le q0, où elle lit la cellule la plus à gauche de la bande et trouve une zone vide. En règle générale, dans l'état q0, si le signe est #, laissez-le tel quel, puis déplacez une cellule vers la droite et changez l'état de la machine en q1. Après cette étape, la machine est dans l'état q1 et sa tête va lire le deuxième symbole 0.
Maintenant, nous recherchons les règles qui s'appliquent à ces conditions. Nous trouvons une règle qui dit : "Conservez l'état q1 et déplacez la tête d'une cellule vers la droite." Cela nous laisse dans la même position (dans l'état q1, la lecture est toujours 0), nous continuons donc à nous déplacer vers la droite jusqu'à ce que la tête soit affichée. enfin, un autre numéro 1 est lu.
Lorsque nous avons consulté à nouveau la table de règles, nous avons trouvé une nouvelle règle : "Si 1 est rencontré, transition vers q2, qui est l'état de rejet." arrêté Exécutez-le et répondez « Non » à la question initiale « 0001 est-il zéro ?
En revanche, si l'entrée est "#0000#", la machine de Turing rencontrera # après tous ces zéros. Lorsque nous consultons la table de règles, nous trouvons une règle qui dit que cela signifie que la machine entre dans l'état q3, un état « d'acceptation ». La machine répond désormais « oui » à la question « « 0000 » est-il nul ?
Alan Turing a aidé à définir le calcul, les algorithmes et les machines de Turing.
Répondre aux questions de jugement avec des machines abstraites
Turing a utilisé sa machine abstraite pour construire un modèle informatique pour répondre au problème Entscheidungs , qui demande formellement : étant donné un ensemble d'axiomes mathématiques, s'il existe un processus mécanique ( C'est-à-dire un ensemble d'instructions, nous l'appellerions aujourd'hui un algorithme) qui peut toujours déterminer si une affirmation donnée est vraie ?
Supposons que nous voulions trouver un algorithme pour nous dire si la position des pièces dans un certain jeu d'échecs est réalisable. Dans ce cadre, les axiomes sont les règles qui régissent les mouvements raisonnables aux échecs. Pouvons-nous y parvenir en suivant une séquence finie de processus étape par étape ? Bien que l'analyse de certaines positions d'échecs puisse prendre plus de temps que notre vie, un algorithme peut générer toutes les positions possibles et les comparer une par une à l'entrée, de tels algorithmes existent dans le jeu d'échecs. Par conséquent, nous disons que les échecs sont « décidables ».
Cependant, en 1936, les mathématiciens américains Church et Turing ont utilisé différentes méthodes pour prouver qu '«il n'existe pas de méthode générale capable de résoudre tous les exemples du problème Entscheidungs Par exemple, certains jeux tels que Game of de John Conway». La vie est indécidable : aucun algorithme ne peut déterminer si un certain modèle émergera du modèle initial.
Turing a montré qu'une fonction est calculable s'il existe un algorithme capable d'effectuer la tâche requise. Parallèlement, il a également montré que l’algorithme est un processus pouvant être défini par une machine de Turing. Par conséquent, une fonction calculable est une fonction qui peut être calculée par une machine de Turing. Cela semble être une manière détournée de définir la calculabilité, mais c'est la meilleure que nous ayons.
Michael Sipser, informaticien théoricien au MIT, a déclaré : « Ce n'est pas que vous puissiez choisir de le définir d'une autre manière. Je pense que les gens s'accordent généralement sur le fait que la thèse de Church-Turing propose que les algorithmes soient le concept informel de n'importe quel modèle de calcul raisonnable peut faire. D'autres mathématiciens ont proposé différents modèles de calcul qui, bien que superficiellement différents, sont en réalité les mêmes : ils peuvent faire ce qu'une machine de Turing peut faire et vice versa.
Quelques années seulement après que le philosophe, logicien et mathématicien Kurt Gödel ait montré que les mathématiques sont incomplètes, Church et Turing ont également montré que certains problèmes mathématiques avec cette feuille de travail sont indécidables. Aussi complexe que soit l’algorithme, il ne peut pas nous dire si la réponse est oui ou non. Les deux événements furent des coups dévastateurs pour Hilbert, qui avait espéré que les mathématiques fourniraient des réponses simples et idéalisées. Mais ce n'est pas mal : s'il existait une solution générale au problème de l'Entscheidungs, cela signifierait que tous les problèmes mathématiques pourraient être réduits à de simples calculs mécaniques.
Machines de Turing universelles et probabilistes
En plus de répondre à ces questions fondamentales, les machines de Turing ont également directement influencé le développement des ordinateurs modernes à travers une variante appelée Machine de Turing universelle. Il s'agit d'une machine de Turing spéciale qui peut simuler n'importe quelle entrée de n'importe quelle autre machine de Turing. Il pourrait lire les descriptions (ainsi que les règles et les bandes d'entrée) d'autres machines de Turing et simuler leur comportement sur ses propres bandes d'entrée, produisant ainsi la même sortie que la machine simulée, tout comme les ordinateurs d'aujourd'hui peuvent lire n'importe quel programme et l'exécuter de la même manière.
En 1945, le mathématicien, informaticien et physicien hongro-américain John von Neumann a proposé une architecture informatique : l'architecture von Neumann, qui a transformé le concept d'une machine de Turing universelle en machines réelles devenues possibles.
Lorsque Sanjeev Arora, informaticien théoricien à l'Université de Princeton, enseigne ce concept, il met l'accent sur une vision philosophique plus large. Il a dit : "Il existe deux concepts d'universel. L'un est qu'il peut faire fonctionner n'importe quelle autre machine de Turing, mais l'autre concept plus important est qu'il peut exécuter n'importe quel calcul que vous proposez dans l'univers. " tout processus physique peut être modélisé ou simulé à l'aide d'algorithmes, et les algorithmes peuvent être simulés par des machines de Turing.
Une autre variante remarquable et de plus en plus utile est la machine probabiliste de Turing. Contrairement aux machines de Turing conventionnelles, qui ont des réponses bien définies à chaque entrée, les machines de Turing probabilistes peuvent générer plusieurs réponses basées sur des probabilités. Cela signifie qu’il peut produire des résultats différents pour la même entrée à différents moments. Il est également surprenant que pour certains problèmes, cette stratégie probabiliste soit plus efficace qu'une approche purement déterministe. Le concept de machines probabilistes de Turing s'est avéré très utile dans des domaines tels que l'optimisation et l'apprentissage automatique.
Ces machines abstraites sont peut-être la meilleure preuve que poser des questions fondamentales peut être l'une des choses les plus utiles qu'un scientifique puisse faire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide complet pour vérifier la configuration HDFS dans les systèmes CentOS Cet article vous guidera comment vérifier efficacement la configuration et l'état de l'exécution des HDF sur les systèmes CentOS. Les étapes suivantes vous aideront à bien comprendre la configuration et le fonctionnement des HDF. Vérifiez la variable d'environnement Hadoop: Tout d'abord, assurez-vous que la variable d'environnement Hadoop est correctement définie. Dans le terminal, exécutez la commande suivante pour vérifier que Hadoop est installé et configuré correctement: HadoopVersion Check HDFS Fichier de configuration: Le fichier de configuration de base de HDFS est situé dans le répertoire / etc / hadoop / conf / le répertoire, où Core-site.xml et hdfs-site.xml sont cruciaux. utiliser

La commande de fermeture CENTOS est arrêtée et la syntaxe est la fermeture de [options] le temps [informations]. Les options incluent: -H Arrêtez immédiatement le système; -P éteignez l'alimentation après l'arrêt; -r redémarrer; -t temps d'attente. Les temps peuvent être spécifiés comme immédiats (maintenant), minutes (minutes) ou une heure spécifique (HH: mm). Des informations supplémentaires peuvent être affichées dans les messages système.

La politique de sauvegarde et de récupération de GitLab dans le système CentOS afin d'assurer la sécurité et la récupérabilité des données, Gitlab on CentOS fournit une variété de méthodes de sauvegarde. Cet article introduira plusieurs méthodes de sauvegarde courantes, paramètres de configuration et processus de récupération en détail pour vous aider à établir une stratégie complète de sauvegarde et de récupération de GitLab. 1. MANUEL BACKUP Utilisez le Gitlab-RakegitLab: Backup: Créer la commande pour exécuter la sauvegarde manuelle. Cette commande sauvegarde des informations clés telles que le référentiel Gitlab, la base de données, les utilisateurs, les groupes d'utilisateurs, les clés et les autorisations. Le fichier de sauvegarde par défaut est stocké dans le répertoire / var / opt / gitlab / backups. Vous pouvez modifier / etc / gitlab

L'installation de MySQL sur CENTOS implique les étapes suivantes: Ajout de la source MySQL YUM appropriée. Exécutez la commande YUM Install MySQL-Server pour installer le serveur MySQL. Utilisez la commande mysql_secure_installation pour créer des paramètres de sécurité, tels que la définition du mot de passe de l'utilisateur racine. Personnalisez le fichier de configuration MySQL selon les besoins. Écoutez les paramètres MySQL et optimisez les bases de données pour les performances.

Un guide complet pour consulter les journaux GitLab sous Centos System Cet article vous guidera comment afficher divers journaux GitLab dans le système CentOS, y compris les journaux principaux, les journaux d'exception et d'autres journaux connexes. Veuillez noter que le chemin du fichier journal peut varier en fonction de la version Gitlab et de la méthode d'installation. Si le chemin suivant n'existe pas, veuillez vérifier le répertoire d'installation et les fichiers de configuration de GitLab. 1. Afficher le journal GitLab principal Utilisez la commande suivante pour afficher le fichier journal principal de l'application GitLabRails: Commande: sudocat / var / log / gitlab / gitlab-rails / production.log Cette commande affichera le produit

La formation distribuée par Pytorch sur le système CentOS nécessite les étapes suivantes: Installation de Pytorch: La prémisse est que Python et PIP sont installés dans le système CentOS. Selon votre version CUDA, obtenez la commande d'installation appropriée sur le site officiel de Pytorch. Pour la formation du processeur uniquement, vous pouvez utiliser la commande suivante: pipinstalltorchtorchVisionTorChaudio Si vous avez besoin d'une prise en charge du GPU, assurez-vous que la version correspondante de CUDA et CUDNN est installée et utilise la version Pytorch correspondante pour l'installation. Configuration de l'environnement distribué: la formation distribuée nécessite généralement plusieurs machines ou des GPU multiples uniques. Lieu

Activer l'accélération du GPU Pytorch sur le système CentOS nécessite l'installation de versions CUDA, CUDNN et GPU de Pytorch. Les étapes suivantes vous guideront tout au long du processus: CUDA et CUDNN Installation détermineront la compatibilité de la version CUDA: utilisez la commande NVIDIA-SMI pour afficher la version CUDA prise en charge par votre carte graphique NVIDIA. Par exemple, votre carte graphique MX450 peut prendre en charge CUDA11.1 ou plus. Téléchargez et installez Cudatoolkit: visitez le site officiel de Nvidiacudatoolkit et téléchargez et installez la version correspondante selon la version CUDA la plus élevée prise en charge par votre carte graphique. Installez la bibliothèque CUDNN:

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.
