Algorithm 重复项查找算法中的比较数

Algorithm 重复项查找算法中的比较数,algorithm,list,search,Algorithm,List,Search,假设我们有一个包含N个元素的排序列表。我在一本教科书中读到,确定此列表是否有重复项的算法必须至少执行n-1比较(这意味着n-1是比较次数的下限)。我不理解这一点,因为假设第一个和第二个元素是重复的,那么算法只需在执行一次比较后返回“是”。我错了什么?是否有任何简单的证明:代码“N-1 < /代码>下限?< P>当谈到复杂性时,你永远不会只考虑一个输入,否则总是会有一些 O(1)< /Cord>算法返回预期答案。 无论给定的输入是什么(根据规范),算法都应该工作 因此,对于您来说,n-1是任何算法

假设我们有一个包含N个元素的排序列表。我在一本教科书中读到,确定此列表是否有重复项的算法必须至少执行
n-1
比较(这意味着
n-1
是比较次数的下限)。我不理解这一点,因为假设第一个和第二个元素是重复的,那么算法只需在执行一次比较后返回“是”。我错了什么?是否有任何简单的证明:代码“N-1 < /代码>下限?

< P>当谈到复杂性时,你永远不会只考虑一个输入,否则总是会有一些<代码> O(1)< /Cord>算法返回预期答案。 无论给定的输入是什么(根据规范),算法都应该工作


因此,对于您来说,
n-1
是任何算法(基于比较)最坏情况复杂性的下限,即对于任何算法,您可以找到一个输入,它至少需要进行
n-1
比较。

您可能混淆了“下限”和“最坏/最佳情况”这两个术语

输入顺序决定了最坏/最佳情况,因此,下限或“大ω”可以说是最坏情况下的“n-1”,最佳情况下的“1”


但一般来说,时间复杂度是在最坏的情况下确定的。

您可能会读到,它需要
n-1
比较来确定相反的情况,即所有元素都是唯一的。因为是的,如果它发现前两个元素相等,那么它就不需要再进一步了。书中说
n-1
是比较次数的下限,如果我理解正确的话,这意味着在最坏的情况下(所有元素都是不同的),
n-1
需要比较,所有其他的情况都应该比<代码> N-1 大,而不是小的,我所困惑的是:每一个情况都比最坏的情况要少,比最坏的情况要少,如果我们考虑“代码> N-1/代码>比较是最坏的情况(列表中的每一个元素都是不同的),那么这是正确的,但是如果
n-1
是所有比较集的下限,这意味着每隔一种情况都应该超过
n-1
比较,这让我很困惑。难道
n-1
不是所有比较集的下限吗?这意味着它代表了所有比较数集中最小的比较数,但同时它也代表了最大的比较数,因为它只发生在最坏的情况下,我发现令人困惑的是,你是对的,下限代表了任何可能的输入顺序的至少时间。然而,说最坏情况下的运行时间是Ω(n-1)并不矛盾,因为存在导致算法花费Ω(n-1)时间的输入。所以,一般来说,如果你说这个算法需要Ω(n-1)时间,这意味着任何可能的输入顺序。