《算法导论》作为打算机科学范畴的经典讲义,其课后习题不只是测验进修成果的道路,更是深刻懂得算法道理跟利用的关键。本文将供给一份实战指南,帮助读者经由过程处理课后习题,轻松控制编程核心。
排序与查抄:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
def binary_search(arr, x):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == x:
return mid
elif arr[mid] < x:
low = mid + 1
else:
high = mid - 1
return -1
递归与分治:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
L = arr[:mid]
R = arr[mid:]
merge_sort(L)
merge_sort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
静态打算:
def knapsack(weights, values, capacity):
n = len(values)
dp = [[0 for x in range(capacity + 1)] for x in range(n + 1)]
for i in range(n + 1):
for w in range(capacity + 1):
if i == 0 or w == 0:
dp[i][w] = 0
elif 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]
return dp[n][capacity]
贪婪算法:
def activity_selection(start, finish, n):
i = 0
print("Following activities are selected:")
print("0", end=" ")
j = 1
while j < n:
if start[j] >= finish[i]:
print(" ", j, end=" ")
i = j
j += 1
def dijkstra(graph, src):
dist = [float('inf')] * len(graph)
dist[src] = 0
sptSet = [False] * len(graph)
for cout in range(len(graph)):
min = float('inf')
for v in range(len(graph)):
if dist[v] < min and sptSet[v] == False:
min = dist[v]
min_index = v
sptSet[min_index] = True
for v in range(len(graph)):
temp = 0
if graph[min_index][v] > 0 and sptSet[v] == False and
temp + graph[min_index][v] < dist[v]:
dist[v] = temp + graph[min_index][v]
经由过程以上实战指南,读者可能逐步处理《算法导论》的课后习题,从而轻松控制编程核心。一直练习,积聚经验,终极可能纯熟应用所学知识处理现实成绩。