¿Cómo escribiría una función para calcular todos los vectores de asignación posibles de 2n usuarios, donde n usuarios se asignan al grupo 0 (control) yn usuarios se asignan al grupo 1 (tratamiento)?

A pesar del comentario de Michael Lamar, probé una implementación simple de Python solo dando los vectores de asignación de cualquier grupo.

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

def pick(n, users, beg=0):
end = len(users)
if n < 0 or end - beg < n:
return [] if n == 0:
return [[]] if end - beg == n:
return [users[beg : end]] result = pick(n, users, beg + 1)
for sub_result in pick(n - 1, users, beg + 1):
sub_result.insert(0, users[beg])
result.append(sub_result)
return result if __name__ == '__main__':
n = 3
users = range(1, 2 * n + 1) i = 1
for result_item in pick(n, users):
print "%d: %s" % (i, str(result_item))
i = i + 1

Salida de muestra cuando n == 3 es

1: [4, 5, 6]
2: [3, 5, 6]
3: [3, 4, 6]
4: [3, 4, 5]
5: [2, 5, 6]
6: [2, 4, 6]
7: [2, 4, 5]
8: [2, 3, 6]
9: [2, 3, 5]
10: [2, 3, 4]
11: [1, 5, 6]
12: [1, 4, 6]
13: [1, 4, 5]
14: [1, 3, 6]
15: [1, 3, 5]
16: [1, 3, 4]
17: [1, 2, 6]
18: [1, 2, 5]
19: [1, 2, 4]
20: [1, 2, 3]

¿Cuántas n-tuplas hay para un conjunto de 2n elementos? Es “2n elegir n”, en otras palabras, n combinaciones de conjunto de 2n elementos. Python tiene una función incorporada para calcular combinaciones.

de combinaciones de importación de itertools
opciones de definición (n):
lista de retorno (combinaciones (rango (2 * n), n))

Aquí está mi implementación de Python. Básicamente para cada bucle creo dos listas. Para 2n = 6 las listas iniciales son
list_previous: [0, 1, 2, 3, 4, 5]
list_next: [[1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5], [4, 5], [5], []]
A continuación, agrego cada valor individual de list_next al elemento correspondiente de list_previous y actualizo list_previous como tal:
list_previous = [[0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [1, 2], [1, 3], [1, 4] , [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]
list_next se puede actualizar usando list_previous:
[[2, 3, 4, 5], [3, 4, 5], [4, 5], [5], [], [3, 4, 5], [4, 5], [5], [], [4, 5], [5], [], [5], [],
[]]
Sigo actualizando hasta que la longitud de los elementos en list_previous alcanza n = 3.

global two_n; dos_n = 50
global n; n = dos_n / 2

def list_check (val):
if isinstance (val, list): devuelve val
de lo contrario: return [val]

def posible_assigment (list_previous, list_next):
escasez = n – 1
si falta == 0:
return list_previous

mientras escasez> 0:
new_previous = []
para idx, anterior en enumerate (list_previous):
para el siguiente en list_next [idx]:
new_previous.append (list_check (anterior) + list_check (siguiente))

list_previous = new_previous
list_next = [rango (i [-1] + 1, two_n) para i en list_previous]
escasez- = 1

return list_previous

list_previous = [i para i en el rango (two_n)]
list_next = [rango (i + 1, two_n) para i en list_previous]

all_possible_combinations = possible_assigment (list_previous, list_next)

print all_possible_combinations

Aquí está el resultado para 2n = 6:
[[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 1, 5], [0, 2, 3], [0, 2, 4], [ 0, 2, 5], [0, 3, 4], [0, 3, 5], [0, 4, 5], [1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]

More Interesting

¿Www.bubble.is volverá obsoleta la industria del outsourcing de desarrollo web y de aplicaciones?

¿Construir un teclado para Android o iOS es un pequeño proyecto que puedo hacer con mi conocimiento justo de programación?

Cómo diseñar una aplicación móvil gratuita sin codificación

¿Qué curso es mejor de estos tres: desarrollo de aplicaciones móviles, desarrollo de aplicaciones web o desarrollo de aplicaciones de software?

¿Puedo desarrollar una aplicación para iOS con una pila LAMP?

¿Cómo ayuda la empresa de desarrollo de aplicaciones móviles en el crecimiento de su negocio?

¿Es esta una buena idea para una aplicación de planificación de bodas?

Cómo escribir código para aplicaciones

Quiero proporcionar un servicio en línea a través de una aplicación. ¿Cuál es el costo para crear una aplicación y los gastos del sitio web?

Tengo muchas ganas de cambiar la carrera profesional del marketing tecnológico al desarrollo de aplicaciones móviles iOS. ¿Cómo puedo hacer que suceda?

¿Dónde puedo obtener un buen tutorial sobre Unity3d para desarrollo 2D usando boo?

¿Cuál es la explicación de las razones por las cuales el IO programado no funciona muy bien cuando el dispositivo IO es un disco duro o una pantalla gráfica?

¿Hay alguna manera de simular la aplicación de iOS con un IDE en Windows?

¿Cuál es la mejor página de destino para un sitio web móvil? ¿La página de contacto o la página de inicio?

¿Cuál es la capacidad del multiplataforma que funciona en la plataforma iOS?