


Explication détaillée de l'algorithme d'arrangement complet des chaînes et du débordement de mémoire de JS
Cet article partage principalement avec vous l'algorithme de permutation complet de JS pour les chaînes et une explication détaillée du débordement de mémoire. Étant donné une chaîne, trouvez la permutation complète de toutes les combinaisons de caractères dans la chaîne. Les caractères contenus ne sont pas répétés.
输入:"abc" 输出:["abc","acb","bac","bca","cab","cba"]
J'ai rencontré un problème lors de la mise en œuvre de l'algorithme, que je n'arrive toujours pas à résoudre. Mais l'algorithme de permutation totale est très important, j'ai donc écrit cet article pour l'enregistrer.
Algorithme 1 : Récursion
Idée d'algorithme :
Lorsque la longueur de la chaîne est de 1, affichez la chaîne
-
Lorsque la longueur est supérieure à 1, prenez la première lettre de la chaîne, recherchez l'arrangement complet de la chaîne de longueur -1 et insérez la première lettre dans n'importe quelle position de chaque arrangement.
Implémentation de l'algorithme :
function permutate(str) { //保存每一轮递归的排列结果 var result = []; //初始条件:长度为1 if (str.length == 1) { return [str] } else { //求剩余子串的全排列,对每个排列进行遍历 var preResult = permutate(str.slice(1)); for (var j = 0; j < preResult.length; j++) { for (var k = 0; k < preResult[j].length + 1; k++) { //将首字母插入k位置 var temp = preResult[j].slice(0, k) + str[0] + preResult[j].slice(k); result.push(temp); } } return result; } }
L'algorithme ne devrait pas être difficile à comprendre. Mais lorsque la chaîne passée en paramètre est "abcdefghijkl"
, l'espace utilisé pour l'arrangement est 12!=479001600
, et une utilisation excessive de la mémoire entraîne un débordement de mémoire. Si vous exécutez sur votre propre PC, vous pouvez utiliser node --max-old-space-size=8192
pour modifier la mémoire. Mais je dois exécuter sur Codewars, donc la mémoire ne peut pas être modifiée. Mon idée était donc d'utiliser l'optimisation de la récursion de queue. Haha, l'optimisation de la récursivité de la queue de Node ? Peu importe, essayons d’abord.
Algorithme 2 : Récursion de queue
function permutate(str,result) { 'use strict'; let tempArr = []; //终止条件str长度为0 if (str.length == 0) { return result } else { //第一次递归时,插入首字母 if(result.length === 0){ tempArr.push(str[0]); }else{ for (let i = 0; i < result.length; i++) { let item = result[i]; let itemLen = item.length; for (let j = 0; j < itemLen+1; j++) { let temp = item.slice(0, j) + str[0] + item.slice(j); tempArr.push(temp); } } } //递归截取了第一个字符的子串 return permutate(str.slice(0),tempArr); } } permutate("abcdefghijkl",[]);
Le premier paramètre de la fonction est la chaîne de cette récursion, et le deuxième paramètre est le résultat de l'arrangement complet des x premiers caractères.
L'idée est :
Obtenir à chaque fois la première lettre de la chaîne récursive actuelle
Si la longueur du deuxième paramètre ; est 0 indique qu'il s'agit de la première récursion, et le résultat de cette initialisation est
[首字母]
. Supprimez ensuite la première lettre de la chaîne récursive et passez la chaîne restante à la récursion suivantePour chaque récursion suivante, prenez la première lettre de la chaîne récursive et insérez-la dans le x premiers caractères À toutes les positions de l'arrangement complet, recherchez l'arrangement complet de x+1 caractères
-
de manière récursive jusqu'à ce que le premier paramètre soit une chaîne vide, puis le deuxième paramètre est tout le caractères de la chaîne arrangement complet.
Ce n'est peut-être pas facile à comprendre, mais sachez simplement qu'il s'agit d'une récursion de queue. Bien que la récursion de queue ne soit valable qu'en mode strict ES6, elle ne fonctionne toujours pas après avoir ajouté
'use strict';
. En fait, je pense qu'il ne s'agit pas d'un débordement de la pile d'appels de fonction, mais d'un débordement du tas stockant les variables. Il n’y a donc probablement pas de solution. Après tout, quel que soit l’arrangement complet, la complexité spatiale est O(n !).
Algorithme 3 : Boucle
Enfin, je publierai le code de la boucle. C'est inutile, alors utilisez-le simplement pour élargir vos idées.
function perm(str) { let result = [],tempArr = []; let subStr = str; while (subStr.length !== 0) { if (result.length === 0) { result.push(str[0]); } else { for (let i = 0; i < result.length; i++) { let item = result[i]; let itemLen = item.length; for (let j = 0; j < itemLen+1; j++) { let temp = item.slice(0, j) + subStr[0] + item.slice(j); tempArr.push(temp); } } result = tempArr; tempArr = []; } subStr = subStr.slice(1); } return result; }
Recommandations associées :
Méthode de mise en œuvre de l'algorithme de permutation et de combinaison complète JS
Question amusante JavaScript : Arrangement complet et déduplication
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)

Sujets chauds

Pour les disques durs mécaniques ou les disques SSD SATA, vous ressentirez l'augmentation de la vitesse d'exécution du logiciel. S'il s'agit d'un disque dur NVME, vous ne la ressentirez peut-être pas. 1. Importez le registre sur le bureau et créez un nouveau document texte, copiez et collez le contenu suivant, enregistrez-le sous 1.reg, puis cliquez avec le bouton droit pour fusionner et redémarrer l'ordinateur. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

Selon le rapport, Dae Woo Kim, directeur de Samsung Electronics, a déclaré que lors de la réunion annuelle 2024 de la Korean Microelectronics and Packaging Society, Samsung Electronics terminerait la vérification de la technologie de mémoire HBM à liaison hybride à 16 couches. Il est rapporté que cette technologie a passé avec succès la vérification technique. Le rapport indique également que cette vérification technique jettera les bases du développement du marché de la mémoire dans les prochaines années. DaeWooKim a déclaré que Samsung Electronics avait réussi à fabriquer une mémoire HBM3 empilée à 16 couches basée sur la technologie de liaison hybride. À l'avenir, la technologie de liaison hybride empilée à 16 couches sera utilisée pour la production en série de mémoire HBM4. ▲ Source de l'image TheElec, comme ci-dessous. Par rapport au processus de liaison existant, la liaison hybride n'a pas besoin d'ajouter de bosses entre les couches de mémoire DRAM, mais connecte directement les couches supérieure et inférieure de cuivre au cuivre.

Selon des informations publiées sur ce site Web le 3 septembre, le média coréen etnews a rapporté hier (heure locale) que les produits de mémoire mobile à structure empilée « de type HBM » de Samsung Electronics et SK Hynix seraient commercialisés après 2026. Des sources ont indiqué que les deux géants coréens de la mémoire considèrent la mémoire mobile empilée comme une source importante de revenus futurs et prévoient d'étendre la « mémoire de type HBM » aux smartphones, tablettes et ordinateurs portables afin de fournir de la puissance à l'IA finale. Selon des rapports précédents sur ce site, le produit de Samsung Electronics s'appelle LPWide I/O memory, et SK Hynix appelle cette technologie VFO. Les deux sociétés ont utilisé à peu près la même voie technique, à savoir combiner emballage en sortance et canaux verticaux. La mémoire LPWide I/O de Samsung Electronics a une largeur de 512 bits.

Selon les informations de ce site Web le 6 mai, Lexar a lancé la mémoire d'overclocking DDR57600CL36 de la série Ares Wings of War. L'ensemble de 16 Go x 2 sera disponible en prévente à 00h00 le 7 mai avec un dépôt de 50 yuans, et le prix est de 50 yuans. 1 299 yuans. La mémoire Lexar Wings of War utilise des puces mémoire Hynix A-die, prend en charge Intel XMP3.0 et fournit les deux préréglages d'overclocking suivants : 7600MT/s : CL36-46-46-961.4V8000MT/s : CL38-48-49 -1001.45V En termes de dissipation thermique, cet ensemble de mémoire est équipé d'un gilet de dissipation thermique tout en aluminium de 1,8 mm d'épaisseur et est équipé du tampon de graisse en silicone thermoconducteur exclusif de PMIC. La mémoire utilise 8 perles LED haute luminosité et prend en charge 13 modes d'éclairage RVB.

Selon les informations de ce site le 7 juin, GEIL a lancé sa dernière solution DDR5 au Salon international de l'informatique de Taipei 2024 et a proposé les versions SO-DIMM, CUDIMM, CSODIMM, CAMM2 et LPCAMM2. ▲ Source de l'image : Wccftech Comme le montre l'image, la mémoire CAMM2/LPCAMM2 présentée par Jinbang adopte un design très compact, peut fournir une capacité maximale de 128 Go et une vitesse allant jusqu'à 8533 MT/s. Certains de ces produits peuvent même l'être. stable sur la plateforme AMDAM5 Overclocké à 9000MT/s sans aucun refroidissement auxiliaire. Selon les rapports, la mémoire de la série Polaris RGBDDR5 2024 de Jinbang peut fournir jusqu'à 8 400

Certains utilisateurs ont rencontré une invite d'erreur de mémoire lors de l'utilisation de Win10, appelée « La mémoire ne peut pas être écrite ». Que se passe-t-il ? Ci-dessous, l'éditeur partagera avec vous la solution à l'invite système de Windows 10 « La mémoire ne peut pas être écrite » 1. Appuyez sur win+r pour ouvrir la fonction d'exécution sur l'ordinateur, entrez services et msc, puis cliquez sur OK. 2. Recherchez le service Windows Management Instrumentation dans la fenêtre des services, cliquez sur « Arrêter », puis cliquez sur OK. 3. Appuyez toujours sur win+r pour ouvrir la fonction d'exécution de l'ordinateur et entrez

Selon un rapport d'enquête TrendForce, la vague de l'IA a un impact significatif sur les marchés de la mémoire DRAM et de la mémoire flash NAND. Dans l'actualité de ce site du 7 mai, TrendForce a déclaré aujourd'hui dans son dernier rapport de recherche que l'agence avait augmenté les augmentations de prix contractuels pour deux types de produits de stockage ce trimestre. Plus précisément, TrendForce avait initialement estimé que le prix du contrat de mémoire DRAM au deuxième trimestre 2024 augmenterait de 3 à 8 %, et l'estime désormais à 13 à 18 % en termes de mémoire flash NAND, l'estimation initiale augmentera de 13 à 8 % ; 18 %, et la nouvelle estimation est de 15 % ~ 20 %, seul eMMC/UFS a une augmentation inférieure de 10 %. ▲Source de l'image TrendForce TrendForce a déclaré que l'agence prévoyait initialement de continuer à

Explication détaillée de la méthode de conversion du type int en chaîne en PHP Dans le développement PHP, nous rencontrons souvent le besoin de convertir le type int en type chaîne. Cette conversion peut être réalisée de différentes manières. Cet article présentera en détail plusieurs méthodes courantes, avec des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Utilisez la fonction intégrée strval() de PHP. PHP fournit une fonction intégrée strval() qui peut convertir des variables de différents types en types de chaîne. Lorsque nous devons convertir le type int en type chaîne,
