Skip to content

Commit 850a8cc

Browse files
Merge pull request #261 from Anujmishra2005/main
merge_sort.py added
2 parents 4581e40 + 18d291e commit 850a8cc

2 files changed

Lines changed: 88 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
def prism(data, target):
2+
rules = []
3+
classes = set(row[target] for row in data)
4+
5+
for cls in classes:
6+
cls_data = [row for row in data if row[target] == cls]
7+
uncovered = cls_data.copy()
8+
9+
while uncovered:
10+
rule = {}
11+
remaining_features = list(data[0].keys())
12+
remaining_features.remove(target)
13+
14+
while True:
15+
best_feature, best_value, best_coverage = None, None, 0
16+
17+
for feature in remaining_features:
18+
values = set(row[feature] for row in uncovered)
19+
for value in values:
20+
coverage = [row for row in uncovered if row[feature] == value]
21+
if len(coverage) > best_coverage:
22+
best_coverage = len(coverage)
23+
best_feature = feature
24+
best_value = value
25+
26+
if best_feature is None:
27+
break
28+
29+
rule[best_feature] = best_value
30+
uncovered = [row for row in uncovered if row[best_feature] == best_value]
31+
32+
if all(row[target] == cls for row in uncovered):
33+
rules.append((rule.copy(), cls))
34+
uncovered = [row for row in cls_data if not rule_matches(rule, row)]
35+
break
36+
37+
remaining_features.remove(best_feature)
38+
39+
return rules
40+
41+
def rule_matches(rule, row):
42+
for feature, value in rule.items():
43+
if row[feature] != value:
44+
return False
45+
return True
46+
47+
if __name__ == "__main__":
48+
n = int(input("Enter number of rows: "))
49+
features = input("Enter feature names separated by space (last one is target): ").split()
50+
data = []
51+
52+
for _ in range(n):
53+
values = input(f"Enter values for {features} separated by space: ").split()
54+
row = {features[i]: values[i] for i in range(len(features))}
55+
data.append(row)
56+
57+
target = features[-1]
58+
rules = prism(data, target)
59+
60+
print("\nGenerated Rules:")
61+
for r, cls in rules:
62+
print(f"If {r} then {target} = {cls}")
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def merge_sort(arr):
2+
if len(arr) <= 1:
3+
return arr
4+
mid = len(arr) // 2
5+
left_half = merge_sort(arr[:mid])
6+
right_half = merge_sort(arr[mid:])
7+
return merge(left_half, right_half)
8+
9+
def merge(left, right):
10+
merged = []
11+
i = j = 0
12+
while i < len(left) and j < len(right):
13+
if left[i] <= right[j]:
14+
merged.append(left[i])
15+
i += 1
16+
else:
17+
merged.append(right[j])
18+
j += 1
19+
merged.extend(left[i:])
20+
merged.extend(right[j:])
21+
return merged
22+
23+
if __name__ == "__main__":
24+
arr = list(map(int, input("Enter numbers separated by space: ").split()))
25+
sorted_arr = merge_sort(arr)
26+
print("Sorted array:", sorted_arr)

0 commit comments

Comments
 (0)