Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def reverse_relation(R):
- l = len(R)
- s = [[0 for j in range(l)] for i in range(l)]
- for i in range(0, len(R)):
- for j in range(0, len(R)):
- s[j][i] = R[i][j]
- return s
- def analyze_relation(R):
- p1 = 0
- p2 = 0
- p3 = 0
- for i in range(0, len(R)):
- for j in range(0, len(R)):
- if (i == j) & (R[i][j] == True):
- p1 += 1
- if R[i][j] <= R[j][i]:
- p2 += 1
- if p1 == len(R):
- reflexive = True
- else:
- reflexive = False
- if p2 == len(R) * len(R):
- symmetric = True
- else:
- symmetric = False
- for i in range(0, len(R)):
- for j in range(0, len(R)):
- for x in range(0, len(R)):
- if ((R[i][j] & R[j][x]) <= R[i][x]):
- p3 += 1
- if p3 == len(R) * len(R) * len(R):
- transitive = True
- else:
- transitive = False
- print("Рефлексивность:", reflexive)
- print("Симметричность:", symmetric)
- print("Транзитивность:", transitive)
- print("Сюръективность:", is_surjective(R))
- print("Инъективность:", is_injective(R))
- def is_surjective(R):
- reverse_relation(R)
- for i in range(len(R)):
- if sum(R[i]) == 0:
- return False
- return True
- def is_injective(R):
- for i in range(len(R)):
- for j in range(len(R)):
- if R[i][j] == 1 and sum([R[k][j] for k in range(len(R))]) > 1:
- return False
- return True
- def print_relation(R):
- for row in R:
- print(list(map(int, row)))
- A1 = ["Иванов", "Петров", "Сидоров", "Петечкин", "Васечкин"]
- n1 = len(A1)
- R1 = [[0 for _ in range(n1)] for _ in range(n1)]
- R1_list = [("Иванов", "Петров"), ("Петров", "Сидоров"),
- ("Иванов", "Петечкин")] # отношение задано перечислением своих элементов
- for p in R1_list:
- ind1 = A1.index(p[0])
- ind2 = A1.index(p[1])
- R1[ind1][ind2] = 1
- print_relation(R1)
- analyze_relation(R1)
- print("\n")
- R1 = reverse_relation(R1)
- print_relation(R1)
- analyze_relation(R1)
- print("\n")
- A2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
- n2 = len(A2)
- # отношение задается предикатом - логическим условием
- def F(x, y):
- return (x + y) % 2 == 0 # отношение: сумма x и y четна
- R2 = [[0 for _ in range(n2)] for _ in range(n2)]
- for i in range(n2):
- for j in range(n2):
- R2[i][j] = int(F(A2[i], A2[j]))
- print_relation(R2)
- analyze_relation(R2)
- print("\n")
- R2 = reverse_relation(R2)
- print_relation(R2)
- analyze_relation(R2)
- print("\n")
- A3 = [1, 2, 3, 4]
- n3 = len(A3)
- R3 = [[0 for _ in range(n3)] for _ in range(n3)]
- R3_list = [(1, 1), (1, 4), (4, 1), (2, 2), (3, 3), (4, 4)]
- for p in R3_list:
- ind1 = A3.index(p[0])
- ind2 = A3.index(p[1])
- R3[ind1][ind2] = 1
- print_relation(R3)
- analyze_relation(R3)
- print("\n")
- R3 = reverse_relation(R3)
- print_relation(R3)
- analyze_relation(R3)
- print("\n")
- A4 = ["a", "b", "c", "d", "e"]
- n4 = len(A4)
- R4 = [[0 for _ in range(n4)] for _ in range(n4)]
- R4_list = [("a", "a"), ("a", "b"), ("a", "c"), ("b", "b"), ("b", "d"), ("c", "c"), ("d", "d"), ("e", "e")]
- for p in R4_list:
- ind1 = A4.index(p[0])
- ind2 = A4.index(p[1])
- R4[ind1][ind2] = 1
- print_relation(R4)
- analyze_relation(R4)
- print("\n")
- R4 = reverse_relation(R4)
- print_relation(R4)
- analyze_relation(R4)
- print("\n")
- A5 = ["x", "y", "z"]
- n5 = len(A5)
- R5 = [[0 for _ in range(n5)] for _ in range(n5)]
- print_relation(R5)
- analyze_relation(R5)
- print("\n")
- R5 = reverse_relation(R5)
- print_relation(R5)
- analyze_relation(R5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement