![]() |
1
4
42未丢弃
如果一个数组
反过来,对于
在每一步中,二进制搜索应通过抽样一个可能性,并确定其一侧的所有输入也需要拒绝(如上所述),拒绝所有大于或小于所需输入的输入。
(编辑:如果
数组变小了在每个步骤中,至少删除数组的一个元素,除非它等于42。这是因为如果元素不是42,那么该元素(可能与其他元素一起)将被删除。 如果数组越来越小(假设42没有采样点),并且42从未被删除,那么在某个点,42将被采样,或者数组将为空 结论如果数组是空的,并且由于42没有被丢弃,就没有42。 如果我们对42进行采样,因为没有向数组引入新的元素,42就从那里开始。 证明! 其他评论为了证明递归算法有效,您需要证明它
它的结束是因为在每个递归步骤中,数组都变小了(但不能降到[]以下)。它产生了正确的结果,因为42从未被删除或添加过——所以最后,如果我们找不到42,那是因为它从未存在过。你的论点不应该依赖于任何具体的例子,除了我认为的基本情况,否则它可能是统计的。你需要在数学意义上“证明”它。 |
![]() |
2
1
对于一个简单的正确性证明:您需要证明您的算法能够成功地完成它的设计目的。 所以,以输入案例数据的语句为前提。并指出它应隐含输出所需的岗位条件。这证明了算法的正确性。 P:关于给定输入的语句 Q:所需输出的语句。 证明P表示Q。 小心角落的箱子。 在任何情况下都要确保算法的终止。 如果它是递归算法,则需要严格证明该算法终止/退出。
对于此类问题,您也可以使用 矛盾证明 . 首先尝试假设 如果不存在42,算法将产生真值。 或 如果存在42,算法将返回false . 然后,通过你的算法流程证明你的假设是正确的,并试图证明这是不可能的,一个矛盾。 |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |