¿Cuál es la forma más eficiente de encontrar todos los subconjuntos únicos de una matriz de caracteres?

Hay dos tipos de subconjuntos: uno es un subconjunto de un conjunto y otro es un subconjunto de un conjunto múltiple.

Enumerar todos los subconjuntos únicos de un conjunto:
Para cada elemento del conjunto, tiene dos opciones: puede elegir este elemento o ignorarlo. Si la cardinalidad del conjunto es ‘n’, entonces el número de subconjunto será 2 ^ n. Aquí hay un código C ++ para enumerar todos los subconjuntos:

//Compute all the subsets of 'arr' and stores it in 'result'
void combinationAux(vector &arr, int pos, vector &subset, vector<vector > & result)
{
if(pos == arr.size())
{
result.push_back(subset);
return;
}
subset.push_back(arr[pos]);
combination(arr, pos + 1, subset, result);
subset.pop_back();
combination(arr, pos + 1, subset, res);
} vector<vector > combination(vector &arr)
{
vector subset;
vector<vector > result;
combinationAux(arr, 0, subset, result);
return result;
}

//Compute all the subsets of 'arr' and stores it in 'result'
void combinationAux(vector &arr, int pos, vector &subset, vector<vector > & result)
{
if(pos == arr.size())
{
result.push_back(subset);
return;
}
subset.push_back(arr[pos]);
combination(arr, pos + 1, subset, result);
subset.pop_back();
combination(arr, pos + 1, subset, res);
} vector<vector > combination(vector &arr)
{
vector subset;
vector<vector > result;
combinationAux(arr, 0, subset, result);
return result;
}

Enumeración de todos los subconjuntos únicos de un conjunto múltiple:
Un Multiset puede representarse mediante un conjunto de 2 tuplas (a, m (a)), donde a es un elemento de multiset ym (a) es su multiplicidad. Para cada 2 tuplas (a, m (a)), tiene m (a) + 1 opciones para elegir ‘a’. Aquí hay un código C ++ para enumerar todos los subconjuntos de un multiset:

//This function computes all the subsets for multiset 'arr' and stores
//it in 'result'
void combinationAux(vector<pair > &arr, int pos, vector &subset, vector<vector > &result)
{
if(pos == num.size())
{
result.push_back(subset);
return;
}

para (int i = 0; i <= arr [pos] .second; i ++)
{
para (int j = 1; j <= i; j ++)
{
subset.push_back (arr [pos] .first);
arr [pos] .second -;
}
combinación (arr, pos + 1, subconjunto, resultado);
para (int j = 1; j <= i; j ++)
{
subset.pop_back ();
arr [pos] .second ++;
}
}
}

combinación de vector <vector > (vector <pair > & arr)
{
vector subconjunto;
resultado del vector <vector >;
combinaciónAux (arr, 0, subconjunto, resultado);
resultado de retorno;
}

More Interesting

¿Cuáles son las posibles preguntas formuladas en una entrevista (más reciente) si ha mencionado Java en su currículum?

¿Puedo usar el enfoque de fuerza bruta para resolver preguntas de algoritmos en la entrevista técnica?

¿Crear una lista vinculada individualmente sin la prueba de head == nulo para inserción?

¿Cuáles son las preguntas comunes que se hacen en las entrevistas sobre colecciones de Java?

¿Cuáles son algunas preguntas comunes de entrevista de nivel universitario sobre motores de CI?

¿Cuál es el mejor libro para prepararse para una entrevista de desarrollador junior de Java?

¿Cuál es la mejor manera de prepararse para las entrevistas de Java?

¿Cómo podemos encontrar el padre de un nodo en un árbol binario dado si no tiene un puntero para el padre?

Si mi currículum es débil, ¿qué puedo tener en mi cuenta de GitHub para ser contratado como desarrollador de software básico?

¿Cuáles son algunas preguntas ingeniosas que le han hecho en una entrevista técnica?

¿Cuál es su consejo para un graduado de CS que acaba de reprobar sus 12 entrevistas técnicas?

¿Cuál es la pregunta de codificación más difícil que enfrentó en una entrevista?

¿Cuáles son las preguntas formuladas por L&T durante las entrevistas en el campus?

¿Cuáles son algunos de los temas / conceptos más importantes para el examen APAC de Google para estudiantes universitarios de 2016?

¿Cómo encuentra la distancia de edición entre una cadena dada y un RegExp?