离散曲线下寻找区域的计算复杂度

时间:2018-11-04 16:01:40

标签: algorithm time-complexity calculus

如果我的问题被严重误导或范围狭窄,我深表歉意。数学不是我最擅长的科目。就上下文而言,我试图找出计算离散曲线下面积的计算复杂性。在我感兴趣的特定用例中,y轴是队列的长度,x轴是时间。曲线将始终具有以下边界:它从零开始,由多个带时间戳的样本组成,这些样本大于零,最终缩小为零。我的初步研究得出了解决此问题的两种潜在的数学方法。第一个是域[a,b]上的Reimann和,其中a最初为零,b最终为零(不确定我的理解在那里是否完全正确)。我认为可以在这里找到公式的数学表示形式:

https://en.wikipedia.org/wiki/Riemann_sum#Connection_with_integration

第二个是离散卷积。但是,我无法说出离散卷积和Reamann总和在域[a,b]上的区别和适用性,其中a最初为零,b最终为零。

我的问题是:

  • 两者之间有区别吗?
  • 哪种方法最适用/最有效?
  • 问一种数学方法的计算复杂度是否合适?如果是这样,那么在此特定应用程序中每个应用程序的复杂性是什么?

编辑: 对于增加的上下文,将有一个函数计算平均队列长度,方法是取两条单独曲线下的面积之和,然后除以跨越这两条曲线的总时间间隔。可以在本文的第168页上看到特定的应用程序:https://www.cse.wustl.edu/~jain/cv/raj_jain_paper4_decbit.pdf

2 个答案:

答案 0 :(得分:2)

  

两者之间有区别吗?

discrete convolution需要两个功能。如果第一个对应离散曲线,第二个对应什么?

  

哪种方法最适用/最有效?

Riemann sum积分的近似值。通常用于估计连续曲线下的面积。您当然可以在离散曲线上使用它,但是它不再是近似值了,我不确定您可以称其为“黎曼”总和。

  

问一种数学方法的计算复杂度是否合适?如果是这样,那么在此特定应用程序中每个应用程序的复杂性是什么?

无论如何,计算离散曲线下面积的复杂度在样本数量上是线性的,并且很容易找到原因:您需要对每个样本进行一次或两次处理。


您可能想要的看起来像是trapezoidal rule的黎曼和。选择前两个样本,计算其平均值,然后将其乘以两个样本之间的距离。对每个相邻的对重复上述操作,并将其加总。

答案 1 :(得分:2)

所以,这是针对参考论文中的路由器反馈过滤器的。

该算法经过专门设计,因此您无需存储大量样本和时间戳即可实现它。

它的工作原理是在每个周期内累计 queue_length *时间

  • 在每个“周期”的开始,记录当前队列长度和当前时钟时间,并将当前周期的总数设置为0。(本文定义了周期,因此队列长度在开始时为0,但这并不重要)

  • 每次队列长度更改时,获取新的当前时钟时间,并将(new_clock_time-previous_clock_time)* previous_queue_length 加到总数中。在周期结束时也要这样做。 然后,记录新的新当前队列长度和当前时钟时间。

  • 当您需要计算当前的“平均队列长度”时,它只是(previous_cycle_total + current_cycle_total +(current_clock_time-previous_clock_time)* previous_queue_length)/ total_time_since_previous_cycle_start