数据集过滤算法的时间复杂度估计

时间:2019-04-26 15:27:35

标签: algorithm time-complexity

美好的一天...

我目前正在为非常特定的几何数据集开发一种过滤算法,但是对于如何估计其时间复杂度我很迷惑。从概念的角度来看,我了解到时间复杂度是n的函数,即算法的输入大小n。让我简要描述一下我的算法:

enter image description here

该算法的输入数据是一个初始数据集和一组应用于该数据集的过滤器。因此,在每个步骤中,算法都会迭代数据集的所有元素,并将过滤器应用于数据集的每个元素,然后确定是否应从数据集中删除该元素,依此类推... < / p>

我的问题是: (I)我觉得应该将n定义为数据集中的元素数量,但是随后我遗漏了一个重要因素:要应用的过滤器数量。如何为时间复杂度估算而考虑算法输入数据中的滤波器数量?

(II)既然我不知道先验地将在每个滤波器中删除多少个元素,那么我如何计算该算法作为n的函数执行的运算次数?

(III)每个滤波器都是我的算法调用的一个独立例程,为了计算算法的时间复杂度,我还应该考虑每个滤波器的时间复杂度吗?如果过滤器是用户定义的,而其复杂性却无法事先知道,该怎么办?

谢谢您对这个问题的澄清或提示...

问候。

1 个答案:

答案 0 :(得分:1)

我不是时间复杂度方面的专家,但是我可以尝试为您提供帮助。

如果我正确理解,您的算法将N个过滤器应用于您的数据,可能每次都会减少数据。每个过滤器线性应用于数据集的每个元素。我们将处理最坏情况下的复杂性,因为它更易于计算/理解。

让我们使用符号:

n:应用过滤器1之前数据集的长度。由于过滤器只能缩小数据集的大小,因此最坏的情况是没有过滤器会缩小数据集,即每个过滤器都应用于n个元素。

T:算法的复杂性

Ci:第i个过滤器的复杂度。由于我不知道您使用的是哪种数据,因此我实在无法更加精确。

M:过滤器数量

所以我们有:

T(n,M)= n C1 + n C2 + ... + n * CM

现在,您不知道过滤器的复杂性是什么,我们无法对其进行更深入的介绍,因为它的变化范围很大。例如,如果将过滤器应用于整数且仅是阈值,则复杂度为O(1),但是如果要测试数字a是否为质数,则复杂度为O(log(a)^ 6)...

但是,如果您可以让所有滤波器C_worst中最差的复杂性陷入困境,则可以使用大Oh表示法进行估算:

T(n,M)= O(M n C_worst)

整数示例:如果a是数据集的最大值,而最差复杂度过滤器在整数输入中是线性的,则我们有T(n,M,a)= O(M n a )