Estoy trabajando en un proyecto en el que tengo varias cadenas únicas en un Conjunto (o podría ser una matriz). Estoy tratando de escribir una función que devuelva la cadena en ese Conjunto con el "valor" más alto.
El "valor" está determinado por una jerarquía que contiene una serie de otras cadenas, cada una de las cuales reside dentro de su propio nivel. Por ejemplo:
Nivel 1 (más alto) A1, A2, A3, A4...
Nivel 2 B1, B2, B3, B4...
Nivel 3 (más bajo) C1, C2, C3 ...
Entonces, por ejemplo, si las cadenas en mi conjunto inicial son [C2, C3, A2, B1], entonces espero que se devuelva A2. En situaciones en las que hay un vínculo de "valor", se puede devolver la primera cadena.
Una posible solución podría ser iterar a través de esa estructura jerárquica (que podría ser una matriz de matrices) comenzando en el nivel más alto y luego verificando si el valor actualmente iterado está contenido en el Conjunto. Si es así, entonces ese valor podría ser devuelto.
¿Alguien puede pensar en una mejor manera de estructurar / lograr esto? ¡Gracias!
Su enfoque general suena razonable, aunque una forma un poco mejor sería no tener una jerarquía de matrices , sino una jerarquía de conjuntos . Verificar si un elemento existe en un Conjunto es O(1) , a diferencia de una matriz, que es O(n) . De esta manera, el algoritmo general es O(n ^ 2) , no O(n ^ 3) .
for (const levelSet of hierarchy) { for (const str of inputStrings) { if (levelSet.has(str)) return str; } }A menos que el nivel se pueda predecir a partir de la estructura de una cadena sin iterar a través de la jerarquía, no creo que haya una solución menos compleja.
Si el nivel se puede predecir sin iterar, por ejemplo, si una cadena que comienza con A está en la primera jerarquía, y así sucesivamente, probablemente se puede abaratar al iterar sobre cada cadena en la entrada y no tocar el estructura jerárquica. (dependiendo del cálculo involucrado en la determinación del nivel de jerarquía de una cadena dada)