在计算机科学中,确定性算法是一种算法,它在给定特定输入的情况下始终产生相同的输出,而底层机器始终通过相同的状态序列。确定性算法是迄今为止研究最多、最熟悉的一种算法,也是最实用的算法之一,因为它们可以有效地在真实机器上运行。
形式上,确定性算法计算数学函数;一个函数对于其域中的任何输入都有一个唯一的值,算法是一个产生这个特定值作为输出的过程。
什么使算法具有不确定性?
多种因素可能导致算法以非确定性或非确定性的方式运行:
- 如果它使用输入以外的外部状态,例如用户输入、全局变量、硬件定时器值、随机值或存储的磁盘数据。
- 如果它以对时间敏感的方式运行,例如如果它有多个处理器同时写入相同的数据。在这种情况下,每个处理器写入其数据的精确顺序将影响结果。
- 如果硬件错误导致其状态以意想不到的方式改变。
- 虽然真正的程序很少是纯粹的确定性的,但人类和其他程序更容易推断出具有确定性的程序。出于这个原因,大多数编程语言,尤其是函数式编程语言,都努力防止上述事件的发生,除非在受控条件下。