gpu
import random import threading N = 100 res_dic = {} def compute_combination(n, x): numerator = 1 denominator = 1 breaker = n - x for i in range(n, breaker, -1): numerator *= i breaker = x + 1 for i in range(1, breaker, 1): denominator *= i return int(numerator / denominator) def gen_column(num, newer): random_breaker = N - 1 replace_index = random.randint(0, random_breaker) if newer[replace_index] == 0: newer[replace_index] = 1 if newer.count(0) == num: return newer else: gen_column(num, newer) def enumerate_column(num): combination = compute_combination(N, num) i = 0 while i < combination: model_list = [0 for ii in range(0, N, 1)] gen_column(num, model_list) if model_list in res_dic[num]: i -= 1 if model_list not in res_dic[num]: res_dic[num].append(model_list) if len(res_dic[num]) == combination: return res_dic[num] i += 1 print(num, len(res_dic[num]), combination) NO_LIST = [95, 85, 80, 79, 74] for i in NO_LIST: res_dic[i] = [] class MyThread(threading.Thread): def __init__(self, func, args, name): threading.Thread.__init__(self) self.name, self.func, self.args = name, func, args def run(self): self.func(self.args) threads_list = [] for i in res_dic: thread_instance = MyThread(enumerate_column, (i), enumerate_column.__name__) threads_list.append(thread_instance) for t in threads_list: t.setDaemon = False t.start() for t in threads_list: t.join() a, b, c, d, e = res_dic i, min_, target_ = 0, N, 3 for ai in res_dic[a]: for bi in res_dic[b]: for ci in res_dic[c]: for di in res_dic[d]: for ei in res_dic[e]: final_dic = {} for ii in range(0, 6, 1): final_dic[ii] = 0 for ii in range(0, N, 1): l_ = [] l_.append(ai[ii]) l_.append(bi[ii]) l_.append(ci[ii]) l_.append(di[ii]) l_.append(ei[ii]) count_ = l_.count(1) final_dic[count_] += 1 compare_ = 0 for ii in range(0, target_, 1): compare_ += final_dic[ii] min_ = min(min_, compare_) print(min_)