From e622141a76ed7ebac154d264e9f6b25ef76a9870 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Sat, 1 Apr 2023 22:26:45 +0300 Subject: [PATCH] Reduce the complexity of boolean_algebra/quine_mc_cluskey.py --- boolean_algebra/quine_mc_cluskey.py | 40 ++++++++++++----------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/boolean_algebra/quine_mc_cluskey.py b/boolean_algebra/quine_mc_cluskey.py index 6788dfb28..50a37d68f 100644 --- a/boolean_algebra/quine_mc_cluskey.py +++ b/boolean_algebra/quine_mc_cluskey.py @@ -92,30 +92,23 @@ def selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]: temp = [] select = [0] * len(chart) for i in range(len(chart[0])): - count = 0 - rem = -1 - for j in range(len(chart)): - if chart[j][i] == 1: - count += 1 - rem = j + count = sum(chart[j][i] == 1 for j in range(len(chart))) if count == 1: + rem = max(j for j in range(len(chart)) if chart[j][i] == 1, default=-1) select[rem] = 1 for i in range(len(select)): - if select[i] == 1: - for j in range(len(chart[0])): - if chart[i][j] == 1: - for k in range(len(chart)): - chart[k][j] = 0 - temp.append(prime_implicants[i]) + if select[i] != 1: + continue + for j in range(len(chart[0])): + if chart[i][j] != 1: + continue + for k in range(len(chart)): + chart[k][j] = 0 + temp.append(prime_implicants[i]) while True: - max_n = 0 - rem = -1 - count_n = 0 - for i in range(len(chart)): - count_n = chart[i].count(1) - if count_n > max_n: - max_n = count_n - rem = i + counts = [chart[i].count(1) for i in range(len(chart))] + max_n = max(counts) + rem = counts.index(max_n) if max_n == 0: return temp @@ -123,9 +116,10 @@ def selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]: temp.append(prime_implicants[rem]) for i in range(len(chart[0])): - if chart[rem][i] == 1: - for j in range(len(chart)): - chart[j][i] = 0 + if chart[rem][i] != 1: + continue + for j in range(len(chart)): + chart[j][i] = 0 def prime_implicant_chart(