Table des matières
Divide and Conquer
Exemple de méthode diviser pour régner : recherche binaire
Programmation dynamique
Cas de programmation dynamique : problème de changement de pièce minimum
Algorithme glouton
Cas de l'algorithme glouton : problème de changement minimum de pièces
Algorithme de retour en arrière
Maison interface Web js tutoriel Comment concevoir un algorithme ? Introduction aux paradigmes algorithmiques courants

Comment concevoir un algorithme ? Introduction aux paradigmes algorithmiques courants

Oct 22, 2020 pm 07:22 PM
javascript 前端 算法

Comment concevoir un algorithme ? Introduction aux paradigmes algorithmiques courants

Comment concevoir un algorithme ? L'article suivant analysera pour vous les paradigmes d'algorithmes courants. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Clarifiez d'abord trois concepts :

Algorithme : Le processus de résolution de problèmes étape par étape.

Paradigme : Un mode de réflexion sur un problème.

Paradigme algorithmique : Une approche générale pour construire des solutions efficaces aux problèmes.

Cet article traite de certains paradigmes d'algorithmes couramment utilisés, tels que

  • Algorithme Diviser pour régner
  • Programmation dynamique
  • Algorithme gourmand
  • Algorithme de Backtracking

Divide and Conquer

Parmi les algorithmes de tri, le point commun des deux algorithmes, fusion et tri rapide, est l'algorithme diviser pour régner.

Diviser pour mieux régner est une conception d'algorithme courante. L'idée est de décomposer le problème en sous-problèmes plus petits qui sont similaires au problème d'origine. Les sous-problèmes sont généralement résolus de manière récursive et les solutions aux sous-problèmes sont combinées pour résoudre le problème d'origine.

La logique de la méthode diviser pour régner peut être divisée en trois étapes :

  1. Diviser le problème d'origine en sous-problèmes plus petits.
  2. Résolvez le sous-problème de manière récursive et renvoyez la solution au sous-problème une fois la solution terminée.
  3. Fusionnez les solutions aux sous-problèmes dans la solution au problème d'origine.

Exemple de méthode diviser pour régner : recherche binaire

Ce qui suit est une recherche binaire mise en œuvre à l'aide de diviser pour régner.

function binarySearchRecursive(array, value, low, high) {
    if (low <= high) {
        const mid = Math.floor((low + high) / 2);
        const element = array[mid];

        if (element < value) {
            return binarySearchRecursive(array, value, mid + 1, high);
        } else if (element > value) {
            return binarySearchRecursive(array, value, low, mid - 1);
        } else {
            return mid;
        }
    }
    return null;
}

export function binarySearch(array, value) {
    const sortedArray = quickSort(array);
    const low = 0;
    const high = sortedArray.length - 1;

    return binarySearchRecursive(array, value, low, high);
}
Copier après la connexion

Veuillez noter que la fonction binarySearch ci-dessus est destinée aux autres, tandis que binarySearchRecursive est l'endroit où la méthode diviser pour mieux régner est implémentée.

Programmation dynamique

La programmation dynamique est une technique d'optimisation utilisée pour résoudre des problèmes complexes en les divisant en sous-problèmes plus petits. Cela ressemble beaucoup à la méthode diviser pour régner, mais au lieu de décomposer le problème en sous-problèmes indépendants puis de les combiner ensemble, la programmation dynamique décompose uniquement le problème en sous-problèmes indépendants .

La logique de l'algorithme est divisée en trois étapes :

  1. Définir les sous-problèmes.
  2. Répétez pour résoudre les sous-problèmes.
  3. Identifier et résoudre les problèmes de base.

Cas de programmation dynamique : problème de changement de pièce minimum

Il s'agit d'une question d'entretien courante appelée problème de changement de pièce. Le problème du changement de pièces est un moyen de déterminer combien de nombres spécifiques de pièces peuvent être utilisés pour rendre la monnaie, compte tenu de la quantité de monnaie. Le problème du changement minimum de pièces consiste simplement à trouver le nombre minimum de pièces requis pour utiliser une dénomination monétaire donnée. Par exemple, si vous avez besoin de monnaie pour 37 cents, vous pouvez utiliser 1,2 cent, 1,5 cent, 1,1 centime et 1,2 cent.

function minCoinChange(coins, amount) {
    const cache = [];
    const makeChange = (value) => {
        if (!value) {
            return [];
        }
        if (cache[value]) {
            return cache[value];
        }
        let min = [];
        let newMin;
        let newAmount;
        for (let i = 0; i < coins.length; i++) {
            const coin = coins[i];
            newAmount = value - coin;
            if (newAmount >= 0) {
                newMin = makeChange(newAmount);
            }
            if (newAmount >= 0 && 
            (newMin.length < min.length - 1 || !min.length) && (newMin.length || !newAmount)) {
                min = [coin].concat(newMin);
            }
        }
        return (cache[value] = min);
    }
    return makeChange(amount);
}
Copier après la connexion

Dans le code ci-dessus, le paramètre coins représente la dénomination ([1, 2, 5, 10, 20, 50] en RMB). Pour éviter le double comptage, un cache est utilisé. La fonction makeChange est implémentée de manière récursive et est une fonction interne avec accès à cache.

console.log(minCoinChange([1, 2, 5 10, 20], 37)); // => [2, 5, 10, 20]
console.log(minCoinChange([1, 3, 4], 6)) // => [3, 3]
Copier après la connexion

Algorithme glouton

L'algorithme glouton est lié à la solution optimale actuelle et tente de trouver une solution optimale globale. Contrairement à la programmation dynamique, elle ne prend pas en compte la situation globale. Les algorithmes gloutons ont tendance à être simples et intuitifs, mais ne constituent peut-être pas la solution globale optimale.

Cas de l'algorithme glouton : problème de changement minimum de pièces

Le problème des pièces résolu par la programmation dynamique ci-dessus peut également être résolu par un algorithme glouton. Que cette solution soit optimale ou non dépend de la dénomination utilisée.

function minCoinChange(coins, amount) {
    const change = [];
    let total = 0;
    for (let i = coins.length; i>= 0; i--) {
        const coin = coins[i];
        while (total + coin <= amount) {
            change.push(coin);
            total += coin;
        }
    }
    return change;
}
Copier après la connexion

Comme vous pouvez le constater, l'algorithme glouton est bien plus simple que la solution de programmation dynamique. Regardons le même cas de solution pour comprendre la différence entre les deux :

console.log(minCoinChange([1, 2, 5 10, 20], 37)); // => [2, 5, 10, 20]
console.log(minCoinChange([1, 3, 4], 6)) // => [4, 1, 1]
Copier après la connexion

L'algorithme glouton donne la solution optimale au premier problème, mais le second n'est pas la solution optimale (il devrait être [3,3]).

L'algorithme glouton est plus simple et plus rapide que l'algorithme de programmation dynamique, mais la solution obtenue n'est peut-être pas la solution optimale. L'

Algorithme de retour en arrière

L'algorithme de retour en arrière est idéal pour trouver et créer des solutions étape par étape.

  1. Essayez de résoudre le problème dans un sens.
  2. Si cela ne fonctionne pas, revenez en arrière et répétez l'étape 1 jusqu'à ce que vous trouviez une solution appropriée.

Pour l'algorithme de backtracking, j'écrirai un autre article pour présenter des algorithmes plus complexes. Je n'ai pas encore trouvé quoi écrire. C'est peut-être pour écrire un programme pour résoudre le Sudoku. Si cela vous intéresse, veuillez suivre mon compte officiel !

Les algorithmes sont sans fin. J'espère que cet article pourra vous aider à comprendre certains paradigmes algorithmiques courants.

Recommandations d'apprentissage gratuites associées : Tutoriel vidéo js

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

CLIP-BEVFormer : superviser explicitement la structure BEVFormer pour améliorer les performances de détection à longue traîne CLIP-BEVFormer : superviser explicitement la structure BEVFormer pour améliorer les performances de détection à longue traîne Mar 26, 2024 pm 12:41 PM

Écrit ci-dessus et compréhension personnelle de l'auteur : À l'heure actuelle, dans l'ensemble du système de conduite autonome, le module de perception joue un rôle essentiel. Le véhicule autonome roulant sur la route ne peut obtenir des résultats de perception précis que via le module de perception en aval. dans le système de conduite autonome, prend des jugements et des décisions comportementales opportuns et corrects. Actuellement, les voitures dotées de fonctions de conduite autonome sont généralement équipées d'une variété de capteurs d'informations de données, notamment des capteurs de caméra à vision panoramique, des capteurs lidar et des capteurs radar à ondes millimétriques pour collecter des informations selon différentes modalités afin d'accomplir des tâches de perception précises. L'algorithme de perception BEV basé sur la vision pure est privilégié par l'industrie en raison de son faible coût matériel et de sa facilité de déploiement, et ses résultats peuvent être facilement appliqués à diverses tâches en aval.

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Jun 03, 2024 pm 01:25 PM

Les défis courants rencontrés par les algorithmes d'apprentissage automatique en C++ incluent la gestion de la mémoire, le multithread, l'optimisation des performances et la maintenabilité. Les solutions incluent l'utilisation de pointeurs intelligents, de bibliothèques de threads modernes, d'instructions SIMD et de bibliothèques tierces, ainsi que le respect des directives de style de codage et l'utilisation d'outils d'automatisation. Des cas pratiques montrent comment utiliser la bibliothèque Eigen pour implémenter des algorithmes de régression linéaire, gérer efficacement la mémoire et utiliser des opérations matricielles hautes performances.

Explorez les principes sous-jacents et la sélection d'algorithmes de la fonction de tri C++ Explorez les principes sous-jacents et la sélection d'algorithmes de la fonction de tri C++ Apr 02, 2024 pm 05:36 PM

La couche inférieure de la fonction de tri C++ utilise le tri par fusion, sa complexité est O(nlogn) et propose différents choix d'algorithmes de tri, notamment le tri rapide, le tri par tas et le tri stable.

L'intelligence artificielle peut-elle prédire la criminalité ? Explorez les capacités de CrimeGPT L'intelligence artificielle peut-elle prédire la criminalité ? Explorez les capacités de CrimeGPT Mar 22, 2024 pm 10:10 PM

La convergence de l’intelligence artificielle (IA) et des forces de l’ordre ouvre de nouvelles possibilités en matière de prévention et de détection de la criminalité. Les capacités prédictives de l’intelligence artificielle sont largement utilisées dans des systèmes tels que CrimeGPT (Crime Prediction Technology) pour prédire les activités criminelles. Cet article explore le potentiel de l’intelligence artificielle dans la prédiction de la criminalité, ses applications actuelles, les défis auxquels elle est confrontée et les éventuelles implications éthiques de cette technologie. Intelligence artificielle et prédiction de la criminalité : les bases CrimeGPT utilise des algorithmes d'apprentissage automatique pour analyser de grands ensembles de données, identifiant des modèles qui peuvent prédire où et quand les crimes sont susceptibles de se produire. Ces ensembles de données comprennent des statistiques historiques sur la criminalité, des informations démographiques, des indicateurs économiques, des tendances météorologiques, etc. En identifiant les tendances qui pourraient échapper aux analystes humains, l'intelligence artificielle peut donner du pouvoir aux forces de l'ordre.

PHP et Vue : une combinaison parfaite d'outils de développement front-end PHP et Vue : une combinaison parfaite d'outils de développement front-end Mar 16, 2024 pm 12:09 PM

PHP et Vue : une combinaison parfaite d'outils de développement front-end À l'ère actuelle de développement rapide d'Internet, le développement front-end est devenu de plus en plus important. Alors que les utilisateurs ont des exigences de plus en plus élevées en matière d’expérience des sites Web et des applications, les développeurs front-end doivent utiliser des outils plus efficaces et plus flexibles pour créer des interfaces réactives et interactives. En tant que deux technologies importantes dans le domaine du développement front-end, PHP et Vue.js peuvent être considérés comme une arme parfaite lorsqu'ils sont associés. Cet article explorera la combinaison de PHP et Vue, ainsi que des exemples de code détaillés pour aider les lecteurs à mieux comprendre et appliquer ces deux éléments.

Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Jun 06, 2024 pm 12:33 PM

01Aperçu des perspectives Actuellement, il est difficile d'atteindre un équilibre approprié entre efficacité de détection et résultats de détection. Nous avons développé un algorithme YOLOv5 amélioré pour la détection de cibles dans des images de télédétection optique haute résolution, en utilisant des pyramides de caractéristiques multicouches, des stratégies de têtes de détection multiples et des modules d'attention hybrides pour améliorer l'effet du réseau de détection de cibles dans les images de télédétection optique. Selon l'ensemble de données SIMD, le mAP du nouvel algorithme est 2,2 % meilleur que YOLOv5 et 8,48 % meilleur que YOLOX, permettant ainsi d'obtenir un meilleur équilibre entre les résultats de détection et la vitesse. 02 Contexte et motivation Avec le développement rapide de la technologie de télédétection, les images de télédétection optique à haute résolution ont été utilisées pour décrire de nombreux objets à la surface de la Terre, notamment des avions, des voitures, des bâtiments, etc. Détection d'objets dans l'interprétation d'images de télédétection

Questions fréquemment posées par les enquêteurs front-end Questions fréquemment posées par les enquêteurs front-end Mar 19, 2024 pm 02:24 PM

Lors des entretiens de développement front-end, les questions courantes couvrent un large éventail de sujets, notamment les bases HTML/CSS, les bases JavaScript, les frameworks et les bibliothèques, l'expérience du projet, les algorithmes et les structures de données, l'optimisation des performances, les requêtes inter-domaines, l'ingénierie front-end, les modèles de conception et les nouvelles technologies et tendances. Les questions de l'intervieweur sont conçues pour évaluer les compétences techniques du candidat, son expérience en matière de projet et sa compréhension des tendances du secteur. Par conséquent, les candidats doivent être parfaitement préparés dans ces domaines pour démontrer leurs capacités et leur expertise.

Application d'algorithmes dans la construction de 58 plateformes de portraits Application d'algorithmes dans la construction de 58 plateformes de portraits May 09, 2024 am 09:01 AM

1. Contexte de la construction de la plateforme 58 Portraits Tout d'abord, je voudrais partager avec vous le contexte de la construction de la plateforme 58 Portraits. 1. La pensée traditionnelle de la plate-forme de profilage traditionnelle ne suffit plus. La création d'une plate-forme de profilage des utilisateurs s'appuie sur des capacités de modélisation d'entrepôt de données pour intégrer les données de plusieurs secteurs d'activité afin de créer des portraits d'utilisateurs précis. Elle nécessite également l'exploration de données pour comprendre le comportement et les intérêts des utilisateurs. et besoins, et fournir des capacités côté algorithmes ; enfin, il doit également disposer de capacités de plate-forme de données pour stocker, interroger et partager efficacement les données de profil utilisateur et fournir des services de profil. La principale différence entre une plate-forme de profilage d'entreprise auto-construite et une plate-forme de profilage de middle-office est que la plate-forme de profilage auto-construite dessert un seul secteur d'activité et peut être personnalisée à la demande. La plate-forme de mid-office dessert plusieurs secteurs d'activité et est complexe ; modélisation et offre des fonctionnalités plus générales. 2.58 Portraits d'utilisateurs de l'arrière-plan de la construction du portrait sur la plate-forme médiane 58

See all articles