2011-04-27 24 views
13

Cada vez que tengo que hacer esto, "lo invento" de una manera diferente. Es hora de estandarizar. Sospecho que hay algún comando predeterminado que pasé por alto listo para hacer esto, así que lo siento de antemano si la pregunta es demasiado trivial.Generación de combinaciones

¿Cuál es la mejor manera (memoria, el rendimiento) para obtener:

combinations[{1,2,3},2] = {{1,2},{1,3},{2,3}} 

con elementos arbitrarios en la lista de entrada, por supuesto.

+0

Solo es trivial si piensa buscar "subconjuntos". Si, de manera bastante razonable, solo piensa buscar "combinaciones", entonces, ¡acaba de hacer un gran servicio a todas esas futuras personas al preguntar esto! – dreeves

+0

@dreeves ¡Muchas gracias! Ahora, si realmente quieres culparme, mira la tercera línea de código ** Yo ** escribí aquí http://stackoverflow.com/questions/3815496/plotting-linear-inequalities-in-mathematica/3868677#3868677 –

+0

Me llevó dos pasos en el centro de ayuda: combinaciones => Tuples => Subconjuntos (por supuesto que ya lo sabía, por lo que puede haber ayudado) –

Respuesta

17
Subsets[{1, 2, 3}, {2}] 

es la forma incorporada.

+0

Maldita sea, sabía que era demasiado trivial :). ¡Gracias! –

+0

cah, felicitaciones por la insignia Iluminada! –

7

Antes de que se añadiera Subsets como función central, la función Combinatorica KSubsets estaba disponible.

Needs["Combinatorica`"] 

KSubsets[{1, 2, 3}, 2] 

(* {{1, 2}, {1, 3}, {2, 3}} *) 

Combinatorica todavía proporciona funcionalidad adicional, como NextKSubset:

NextKSubset[{1, 2, 3}, {1, 3}] 

(* {2, 3} *) 

Esta última función puede ser muy útil para la gestión de la memoria.

+0

¡Has llegado a 4000! Felicidades ... Ahora 4010 –

+0

@belisarius gracias. :RE –