diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-18 23:45:58 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-18 23:45:58 +0400 |
| commit | da81a8f76f56a6b21dda16c8df5f1df5f9b962a3 (patch) | |
| tree | c1d6d7ae405c67384e40b3d327958aa129e07dc8 | |
| parent | 9b53b8e935a648e225508e51f45d83dfaeacd896 (diff) | |
Добавлена программа разбиения множества
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | partition.py | 38 |
2 files changed, 46 insertions, 1 deletions
@@ -1,9 +1,16 @@ CXX=g++ -CXXFLAGS=-Wall -Wpedantic -ggdb -std=c++17 +CXXFLAGS=-Wall -Wpedantic -O2 -std=c++17 SOURCES := $(wildcard *.cpp) EXECS := $(patsubst %.cpp,%.out,$(SOURCES)) +.PHONY: all clean + all: $(EXECS) %.out: %.cpp $(CXX) $(CXXFLAGS) $< -o $@ + +clean: + $(RM) $(EXECS) + $(RM) -r *.dSYM + diff --git a/partition.py b/partition.py new file mode 100644 index 0000000..32677a7 --- /dev/null +++ b/partition.py @@ -0,0 +1,38 @@ +def iterate_partition(pi, f): + pi_prime = [] + for part in pi: + d = {part: set() for part in pi} + for elem in part: + b = f(elem) + for part in pi: + if b in part: + d[part].add(elem) + break + for v in d.values(): + if v: + pi_prime.append(frozenset(v)) + return pi_prime, pi != pi_prime + + +def print_partition(pi): + print(list(map(set, pi))) + + +def main(): + n = 20 + b1 = frozenset(range(1, n)) + b2 = frozenset([20]) + pi = [b1, b2] + f = lambda x: x + 1 if x < n else x + + print_partition(pi) + while True: + pi, changed = iterate_partition(pi, f) + if not changed: + break + print_partition(pi) + + +if __name__ == "__main__": + main() + |