循环遍历表而不检查是否到达表的末尾



我真的不喜欢问关于家庭作业的问题,但是这个问题把我难住了。答案似乎应该如此简单,但我却想不起来!

这个问题来自"数据结构和算法"。由Harry Lewis和Larry Denenberg提出,第一章第一个问题。我们有一个简单的for循环用于顺序搜索。

function SequentialSearch(table T[0...n-1], key K): integer
{Return position of K in table T, if it is present, otherwise -1}
for i from 0 to n - 1 do
if T[i] = K then return i
return -1

很简单,对吧?好的,对于这个循环的每次迭代,有两个检查:(1)检查T[i]是否= K,(2)检查i是否>N - 1。每个循环迭代的运行时是一个常量2。问题是:如何将运行时间减少到1?我怎样才能不去检查它是否存在呢?N - 1(即,如果已经到达表的末端)?

给我们的提示是可以使用哨兵值。嗯,这很简单,除了一个问题,那就是:检查哨兵值如何比检查表的长度改善运行时?不管我是检查表的长度还是检查哨兵值,每次迭代的运行时不是仍然是2吗?

我不期望在这里得到答案。(答案将用伪代码编写。)我只是在如何实现这一点,以减少运行时难住。对我来说,它似乎被简化到尽可能少,但我知道什么?

谢谢!

提示一下:您放入T[n]中的哨兵值不必在每次算法运行时都相同。它可以依赖于K,也就是你要找的值。这有帮助吗?

相关内容

  • 没有找到相关文章

最新更新