Reduce the complexity of boolean_algebra/quine_mc_cluskey.py

This commit is contained in:
MaximSmolskiy 2023-04-01 22:26:45 +03:00
parent 56a40eb3ee
commit e622141a76

View File

@ -92,30 +92,23 @@ def selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]:
temp = [] temp = []
select = [0] * len(chart) select = [0] * len(chart)
for i in range(len(chart[0])): for i in range(len(chart[0])):
count = 0 count = sum(chart[j][i] == 1 for j in range(len(chart)))
rem = -1
for j in range(len(chart)):
if chart[j][i] == 1:
count += 1
rem = j
if count == 1: if count == 1:
rem = max(j for j in range(len(chart)) if chart[j][i] == 1, default=-1)
select[rem] = 1 select[rem] = 1
for i in range(len(select)): for i in range(len(select)):
if select[i] == 1: if select[i] != 1:
for j in range(len(chart[0])): continue
if chart[i][j] == 1: for j in range(len(chart[0])):
for k in range(len(chart)): if chart[i][j] != 1:
chart[k][j] = 0 continue
temp.append(prime_implicants[i]) for k in range(len(chart)):
chart[k][j] = 0
temp.append(prime_implicants[i])
while True: while True:
max_n = 0 counts = [chart[i].count(1) for i in range(len(chart))]
rem = -1 max_n = max(counts)
count_n = 0 rem = counts.index(max_n)
for i in range(len(chart)):
count_n = chart[i].count(1)
if count_n > max_n:
max_n = count_n
rem = i
if max_n == 0: if max_n == 0:
return temp return temp
@ -123,9 +116,10 @@ def selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]:
temp.append(prime_implicants[rem]) temp.append(prime_implicants[rem])
for i in range(len(chart[0])): for i in range(len(chart[0])):
if chart[rem][i] == 1: if chart[rem][i] != 1:
for j in range(len(chart)): continue
chart[j][i] = 0 for j in range(len(chart)):
chart[j][i] = 0
def prime_implicant_chart( def prime_implicant_chart(