在问题here中,在讨论增加 n 时,许多海报继续引用较大的输入。因此,他们中的一些人说不能存在具有O(1 / n)复杂度的算法。现在,假设我们有一个算法,我们通过从现有的大小 m 列表中删除元素来指定我们想要一个大小 n 的列表(因此删除 m - n 元素,显然 n < = m 。显然,增加 n 会缩短计算时间,因为更大 n 意味着更少操作。
n 然后有来引用输入的物理大小(如排序算法中输入列表的大小)或者可以定义更多抽象地在这里?
我知道大O符号是针对渐近行为定义的,但是如果我们有一个算法,其中参数 n 从上面明确界定,就像在这里一样?我们可以说我们假设 n < 米
我知道上面的例子非常愚蠢,但我实际上有一个案例(这里太复杂了,因此这个愚蠢的例子,但它与这个例子有一些相似之处),其中计算时间明显减少为 n 增加, n 也从上面开始限制,并且以不同的方式定义它,使其不受上述限制是不可能的。
提前致谢
答案 0 :(得分:1)
对于您的示例,您会说算法的运行时间是O(m-n)
(或者O(log(m-n))
或O((m-n)^2)
,具体取决于每个项目的删除方式) ,以便您可以以有用的方式实际传达复杂性。可能有一种方法可以重新构建您的问题。符号的全部要点是简明扼要地表达算法的可扩展性。我希望你能找到问题的各种参数的一些功能,它们表达了“难度”。输入(例如m-n
)可能是比大小更抽象的东西,然后是该难度的函数(例如x^2
),它将难度转换为空间或时间要求。
答案 1 :(得分:1)
我将使用传统的符号来重新演示您的示例。我们想要通过从现有的大小为n的列表中删除元素来获得大小为k的列表。在这个例子中,k与n不同,因为n是输入大小,但k只是一个参数。
根据实施情况,可以在O(k)或O(n-k)中完成此问题。如果是O(n-k)实现,输入大小的增加仍会导致更高的复杂性。如果它是O(k),则算法的复杂性仅取决于参数但不取决于输入大小。无论哪种方式,您的输入大小都不会归因于算法复杂性的降低。
是的,一些算法的复杂性仅依赖于参数k,而不是输入大小n,因为我们知道参数k是什么(或者它可以在一个微不足道的时间内计算)。它广泛用于解决NP完全问题。 Parameterized complexity
但是,我仍然不知道任何算法是O(1 / n),其中n是输入的大小。