Add files via upload
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
def fibonacci_recursive_series(n):
|
||||
series = []
|
||||
def fib_recursive(num):
|
||||
if num <= 0:
|
||||
return 0
|
||||
elif num == 1:
|
||||
return 1
|
||||
else:
|
||||
return fib_recursive(num - 1) + fib_recursive(num - 2)
|
||||
for i in range(n + 1):
|
||||
series.append(fib_recursive(i))
|
||||
print(f"Recursive Fibonacci Series up to {n}:")
|
||||
print(series)
|
||||
|
||||
def fibonacci_iterative_series(n):
|
||||
series = []
|
||||
if n >= 0:
|
||||
series.append(0)
|
||||
if n >= 1:
|
||||
series.append(1)
|
||||
a, b = 0, 1
|
||||
for _ in range(2, n + 1):
|
||||
a, b = b, a + b
|
||||
series.append(b)
|
||||
print(f"Iterative Fibonacci Series up to {n}:")
|
||||
print(series)
|
||||
|
||||
|
||||
# Menu-driven program
|
||||
def menu():
|
||||
while True:
|
||||
print("\n=== Fibonacci Calculator ===")
|
||||
print("1. Recursive Fibonacci Series")
|
||||
print("2. Iterative Fibonacci Series")
|
||||
print("3. Exit")
|
||||
|
||||
choice = input("Enter your choice (1-3): ")
|
||||
|
||||
if choice == '1':
|
||||
n = int(input("Enter the value of n: "))
|
||||
fibonacci_recursive_series(n)
|
||||
elif choice == '2':
|
||||
n = int(input("Enter the value of n: "))
|
||||
fibonacci_iterative_series(n)
|
||||
elif choice == '3':
|
||||
print("Exiting program...")
|
||||
sys.exit()
|
||||
else:
|
||||
print("Invalid choice! Please enter 1, 2, or 3.")
|
||||
|
||||
|
||||
# Run the menu
|
||||
menu()
|
||||
@@ -0,0 +1,42 @@
|
||||
import heapq
|
||||
import itertools
|
||||
|
||||
def build_huffman_tree(freq):
|
||||
heap = []
|
||||
counter = itertools.count() # unique sequence count
|
||||
for ch, weight in freq.items():
|
||||
heap.append([weight, next(counter), [ch]]) # add counter as second element
|
||||
heapq.heapify(heap)
|
||||
|
||||
while len(heap) > 1:
|
||||
low = heapq.heappop(heap)
|
||||
high = heapq.heappop(heap)
|
||||
combined_weight = low[0] + high[0]
|
||||
combined_node = [low[2], high[2]]
|
||||
heapq.heappush(heap, [combined_weight, next(counter), combined_node])
|
||||
|
||||
return heap[0]
|
||||
|
||||
def assign_codes(node, prefix="", codebook={}):
|
||||
# node is [char] for leaf, or [left, right] for internal node
|
||||
if len(node) == 1 and isinstance(node[0], str):
|
||||
codebook[node[0]] = prefix
|
||||
else:
|
||||
assign_codes(node[0], prefix + "0", codebook)
|
||||
assign_codes(node[1], prefix + "1", codebook)
|
||||
return codebook
|
||||
|
||||
def huff_en(txt):
|
||||
freq = {}
|
||||
for c in txt:
|
||||
freq[c] = freq.get(c, 0) + 1
|
||||
|
||||
root = build_huffman_tree(freq)
|
||||
codes = assign_codes(root[2]) # Note: root[2] because of tie-breaker
|
||||
|
||||
print("Huffman Codes:")
|
||||
for ch in sorted(codes):
|
||||
print(f"{ch}: {codes[ch]}")
|
||||
|
||||
txt="abbbbbbcccddddddddee"
|
||||
huff_en(txt)
|
||||
@@ -0,0 +1,31 @@
|
||||
def fractional_knapsack(weights, values, capacity):
|
||||
n = len(values)
|
||||
ratio = [(values[i] / weights[i], weights[i], values[i]) for i in range(n)]
|
||||
ratio.sort(reverse=True)
|
||||
total_value = 0.0
|
||||
knapsack_items = []
|
||||
for r, w, v in ratio:
|
||||
if capacity == 0:
|
||||
break
|
||||
if w <= capacity:
|
||||
capacity -= w
|
||||
total_value += v
|
||||
knapsack_items.append((w, v, 1)) # 1 = full item taken
|
||||
else:
|
||||
# Take fraction of the item
|
||||
fraction = capacity / w
|
||||
total_value += v * fraction
|
||||
knapsack_items.append((w, v, fraction))
|
||||
capacity = 0
|
||||
return total_value, knapsack_items
|
||||
|
||||
values = [60, 100, 120]
|
||||
weights = [10, 20, 30]
|
||||
capacity = 50
|
||||
|
||||
max_value, items_taken = fractional_knapsack(weights, values, capacity)
|
||||
|
||||
print("Maximum Value in Knapsack:", max_value)
|
||||
print("Items taken (weight, value, fraction):")
|
||||
for item in items_taken:
|
||||
print(item)
|
||||
@@ -0,0 +1,31 @@
|
||||
def knapsack_01(weights, values, capacity):
|
||||
n = len(values)
|
||||
dp = [[0 for _ in range(capacity + 1)] for _ in range(n + 1)]
|
||||
|
||||
for i in range(1, n + 1):
|
||||
for w in range(1, capacity + 1):
|
||||
if weights[i - 1] <= w:
|
||||
dp[i][w] = max(values[i - 1] + dp[i - 1][w - weights[i - 1]], dp[i - 1][w])
|
||||
else:
|
||||
dp[i][w] = dp[i - 1][w]
|
||||
|
||||
w = capacity
|
||||
items_taken = []
|
||||
for i in range(n, 0, -1):
|
||||
if dp[i][w] != dp[i - 1][w]:
|
||||
items_taken.append((weights[i - 1], values[i - 1]))
|
||||
w -= weights[i - 1]
|
||||
items_taken.reverse() # optional: maintain original order
|
||||
return dp[n][capacity], items_taken
|
||||
|
||||
|
||||
values = [60, 100, 120]
|
||||
weights = [10, 20, 30]
|
||||
capacity = 50
|
||||
|
||||
max_value, items = knapsack_01(weights, values, capacity)
|
||||
|
||||
print("Maximum Value in Knapsack:", max_value)
|
||||
print("Items taken (weight, value):")
|
||||
for item in items:
|
||||
print(item)
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
def is_safe(board, row, col):
|
||||
for i in range(row):
|
||||
if board[i] == col or abs(board[i] - col) == abs(i - row):
|
||||
return False
|
||||
return True
|
||||
|
||||
def solve_n_queens_first(board, row, n):
|
||||
if row == n:
|
||||
return board[:] # Return the first solution found
|
||||
|
||||
for col in range(n):
|
||||
if is_safe(board, row, col):
|
||||
board[row] = col
|
||||
result = solve_n_queens_first(board, row + 1, n)
|
||||
if result: # If solution found, return immediately
|
||||
return result
|
||||
board[row] = -1 # Backtrack
|
||||
return None # No solution in this path
|
||||
|
||||
def print_solution(board, n):
|
||||
for row in range(n):
|
||||
line = ['Q' if i == board[row] else '.' for i in range(n)]
|
||||
print(" ".join(line))
|
||||
print()
|
||||
|
||||
def n_queens_one_solution(n):
|
||||
board = [-1] * n
|
||||
solution = solve_n_queens_first(board, 0, n)
|
||||
if solution:
|
||||
print("One valid n-Queens solution:")
|
||||
print_solution(solution, n)
|
||||
else:
|
||||
print("No solution exists.")
|
||||
|
||||
# Example: 8-Queens
|
||||
n_queens_one_solution(8)
|
||||
Reference in New Issue
Block a user