【发布时间】:2018-07-17 21:01:09
【问题描述】:
TL;DR:我如何证明算法适用于每个 n 值?
概述:
我是一名自学成才的程序员,具有线性代数的数学背景。我最近需要通过编写算法来解决 n=100 的问题来证明关系是递归的。
当我找到解决方案时,我到达那里的方式被认为是不可接受的。与我交谈的人说我的算法是一种“统计”算法,而不是实际证明存在递归关系并证明我的算法可以工作。
我一直在解决一些网站上的问题,例如 codesignal、hackerrank 等,但这是我第一次遇到这种将解决方案推广到正式证明的概念。
问题: 如何证明算法适用于每个 n 值?
示例: 让我们以二分搜索为例,忘记我遇到的实际问题。
如果你有一个由 100 个整数组成的数组,按升序排序,你如何证明你的二分搜索算法适用于任何数组和任何 n?
在下面的例子中,假设我们的数组是
arr = list(range(100))
我提出的问题是:
编写一个递归算法,如果值 '42' 在数组中,则返回 True,否则返回 False。
您如何证明(如形式证明)该算法有效?请注意强调算法从启发式解决方案转变为经过验证的算法背后的思考过程和直觉?
【问题讨论】:
-
你的意思是,任何 排序 数组,对吗?另外,当你说“42”时——只是为了检查,你的意思是数值,而不是字符串?
-
这不是一个真正的编程问题,对于这个站点来说也不够具体。您可能会尝试cs.stackexchange.com,但建议您阅读类似 Knuth 的 The Art of Computer Programming 之类的内容,其中包含许多非正式和正式的证明,包括针对这个问题的 (IIRC) 证明。
标签: algorithm