with texto strip_tags remove limpiar from eliminar allow all php set powerset

php - texto - string strip_tags



Elementos de potencia de cierta longitud (2)

No soy un experto en PHP, por lo que responderé con pseudocódigo en su lugar. Como parece que está preguntando acerca de las matrices y subsecuencias (aunque use las palabras en inglés "sets" y "subconjuntos"), lo haré. Usaré la notación arr[m:n] para referirme a la construcción de una nueva matriz de longitud n - m + 1 que copia los elementos m, m+1, ..., n de arr .

fun subsequences(arr, len) { answer = new empty array // base case 1: we haven''t got a enough members in the // array to make a subsequence that long, so there are // no subsequences of that length if(arr.length < len) return answer // base case 2: we''re only looking for trivial subsequences if(len <= 0) { trivial = new empty array prepend trivial to answer return answer } // choose the first element in the subsequence nondeterministically for each i from 0 to arr.length - 1 { // since we know the sequence starts with arr[i], the // remainder of the sequence must come from the elements // after index i subanswer = subsequences(arr[i+1:arr.length], len-1) for each subsequence in subanswer, prepend arr[i] to subsequence answer = concat(subanswer, answer) } }

Dado un conjunto de elementos en PHP, deseo crear una nueva matriz bidimensional que contenga solo aquellos elementos del conjunto de potencia que tengan una longitud específica. Como ejemplo, para la siguiente matriz:

array(4) { 0 => ''A'', 1 => ''B'', 2 => ''C'', 3 => ''D'' }

Si fixed_length_power_set( $arr, 2 ) que ejecutar la función fixed_length_power_set( $arr, 2 ) entonces quiero que vuelva:

array(6) { 0 => array(2) { 0 => ''A'', 1 => ''B'' } 1 => array(2) { 0 => ''A'', 1 => ''C'' } 2 => array(2) { 0 => ''A'', 1 => ''D'' } 3 => array(2) { 0 => ''B'', 1 => ''C'' } 4 => array(2) { 0 => ''B'', 1 => ''D'' } 5 => array(2) { 0 => ''C'', 1 => ''D'' } }

Aunque puedo pensar en algunas reglas para generalizar el proceso, por alguna razón no puedo convertirlo en código. ¿Alguien tiene sugerencias?


Use un algoritmo recursivo simple: para el conjunto de todos los subconjuntos de tamaño k de un conjunto de tamaño n ,

  • si n == k , devuelve un conjunto que contiene todo el conjunto;

  • si k == 1 devuelve el conjunto de todos los singletons;

  • de lo contrario, elimine un elemento x del conjunto: ahora necesita todos los subconjuntos de tamaño k-1 del conjunto restante (es decir, aquellos subconjuntos que incluyen x ), así como todos los subconjuntos de tamaño k del conjunto restante (los que no ''t incluyen x ).

En pseudocódigo PHP:

function subsets_n($arr, $k) { if (count($arr) < $k) return array(); if (count($arr) == $k) return array(0 => $arr); $x = array_pop($arr); if (is_null($x)) return array(); return array_merge(subsets_n($arr, $k), merge_into_each($x, subsets_n($arr, $k-1)) ); }

Aquí merge_into_each() agrega x a cada matriz de la colección:

function merge_into_each($x, $arr) { foreach ($arr as &$a) array_push($a, $x); return $arr; }