tengo una lista de palabras
Vestíbulo de entrada Puertas y ventanas de entrada Seguridad Escaleras Cuartos de lavado Guardas internas y pasamanos Salas de vertederos de basura Área de almacenamiento de basureros Elevadores Áreas de almacenamiento y casilleros Paredes interiores Techos y pisos Niveles de iluminación interior Grafiti Revestimiento exterior Terrenos exteriores Pasarelas exteriores Barreras de balcones Penetración de agua en elementos exteriores del edificio Estacionamiento Zona Otras Instalaciones
Quiero obtener todas las combinaciones de las palabras en conjuntos de pares.
Entrance Doors and Windows, Security StairwellsVestíbulo de entrada, cubo de basura
etc...
La oración es "¿Qué es más importante para ti?
Encontré los siguientes ejemplos usando permutaciones de N elementos con complejidad de tiempo de ejecución en O(N!)
function getPermutations(sentence, word) { const matches = sentence.split(" ").filter(w => w.includes(word)); let permutations = permute(matches); return { word: matches, permutations } } function permute(permutation) { var length = permutation.length, result = [permutation.slice()], c = new Array(length).fill(0), i = 1, k, p; while (i < length) { if (c[i] < i) { k = i % 2 && c[i]; p = permutation[i]; permutation[i] = permutation[k]; permutation[k] = p; ++c[i]; i = 1; result.push(permutation.slice()); } else { c[i] = 0; ++i; } } return result; } console.log(getPermutations("THIS IS AN ISSUE FROM GIHAN", "IS"))Y este ejemplo:
function permute(permutation) { var length = permutation.length, result = [permutation.slice()], c = new Array(length).fill(0), i = 1, k, p; while (i < length) { if (c[i] < i) { k = i % 2 && c[i]; p = permutation[i]; permutation[i] = permutation[k]; permutation[k] = p; ++c[i]; i = 1; result.push(permutation.slice()); } else { c[i] = 0; ++i; } } return result; } console.log(permute([1, 2, 3]));