📅  最后修改于: 2023-12-03 15:27:18.430000             🧑  作者: Mango
在计算机科学中,算法通常被分为确定性和非确定性算法两种类型,两者之间有很大的差异。
确定性算法是指,它的执行流程是完全由算法本身决定的,每一次执行都是一样的,最终得到的结果也是唯一的。这种算法常见的有顺序结构、分支结构和循环结构等。
顺序结构算法是一种简单的算法,它的执行流程按照代码编写顺序进行,没有任何条件和判断。
a = 1
b = 2
c = a + b
print(c)
分支结构算法是一种有条件的算法,它的执行流程取决于条件是否成立,如果条件成立则执行一步操作,否则执行另外一步操作。
a = 1
b = 2
if a > b:
c = a - b
else:
c = b - a
print(c)
循环结构算法是一种重复执行一定操作的算法,常见的有for和while两种。
for i in range(0, 5):
print(i)
i = 0
while i < 5:
print(i)
i += 1
以上三种算法都是确定性算法,它们执行的流程和得到的结果都是唯一的。
非确定性算法是指,它的执行有一定的随机性或不确定性,在不同的情况下可能会有不同的结果。这种算法常见的有搜索算法、优化算法等。
搜索算法是一种通过枚举方式来搜索目标的算法,例如广度优先搜索和深度优先搜索,每一次搜索结果都是不确定的。
def search(d, target):
if d == target:
return True
if d > target:
return False
return search(d + 1, target) or search(d * 2, target)
print(search(1, 16))
优化算法是一种通过不断迭代来寻求更优解的算法,例如贪心算法和遗传算法,每一次迭代都可能得到不同的结果。
def knapsack(w, v, c):
n = len(w)
f = [0] * (c + 1)
for i in range(n):
for j in range(c, w[i] - 1, -1):
f[j] = max(f[j], f[j - w[i]] + v[i])
return f[c]
w = [2, 3, 4, 5]
v = [3, 4, 5, 6]
c = 8
print(knapsack(w, v, c))
以上两种算法都是非确定性算法,它们执行的流程和得到的结果都是不确定的。
确定性算法和非确定性算法是算法设计中的两种基本思想,二者在执行流程和结果上都存在差异。在实际应用中,根据具体情况选择不同类型的算法可以更好地解决问题。