Я пытаюсь найти способ заставить эту функцию возвращать 2D-список всех подмножеств размера k группы n.п> = к.
функция принимает 2 числа, n, k, поэтому n> = k.и возвращает все возможности подмножества в размере k группы {1,2, ..., n-1}.
для примера, если параметры: fill_k_subsets (3,2),
функция выведет: [[0,1], [0,2], [1,2]]
, что является всеми возможными подмножествами длины 2 из группы{0,1,2} = {0,1, (3-1)} = {1, .., (n-1)} надеюсь, что это достаточно ясно.
хитрость в том, чтобы сделать эторабота без передачи части списка или какого-либо списка в целом, ни кортежа, словаря и т. д., ни подмножества любой рекурсивной функции, ни основной функции, передающей список переменных или подмножеств нерекурсивному, разрешена.Я был бы рад услышать некоторые идеи.большое спасибо.
def fill_k_subsets (n, k):
"""
this is the main function, can't accepts more parameters other then k and n.
accepts n,k natural numbers, and an empty list
all subsets of size k should be stored inside of the empty list
the function does not return or print anything
:param n:
:param k:
:param list:
:return:
"""
if k <= n:
set_list= list
current_subset = [False] * n
k_fill_helper(current_subset, k, 0, 0, set)
def k_fill_helper (current_subset, k, index, выберите):
#this is the recursive function.
#not allowed to accepts any list as a parameter, nor part of the subset
# base case, if chose k items
if k == choose:
fill_set_list(current_subset, set_list)
return None
# if we reached to the end of the list
if index == len(current_subset):
return None
# all subset that that include this index
current_subset[index] = True
k_fill_helper(current_subset, k, index + 1, choose + 1)
# all subset without that index
current_subset[index] = False
k_fill_helper(current_subset, k, index + 1, choose)
deffill_set_list (current_subset, set_list):
work_list=[]
for index, bool_element in enumerate(current_subset):
if bool_element is True:
work_list.append(index)
set_list.append(work_list)