为什么我可以看一下图并立即找到与另一点最接近的点,但是我花了O(n)时间来编程?


122

让我澄清一下:

给定一个散点图,该散点图具有给定数量的点n,如果我想在思维上找到最接近点的任何点,我可以立即忽略图中的大多数点,将选择范围缩小到附近的一些小而恒定的点。

但是,在编程中,给定一组点n,以便找到与任何一个点最接近的点,它需要检查每隔一点,即时间。O(n)

我猜测图形的视觉效果可能相当于我无法理解的某些数据结构;因为通过编程,通过将点转换为更结构化的方法(例如四叉树),可以在时间中找到中与个点最接近的点,或者将时间。Ñ ķ 日志Ñ ø登录Ñ knklog(n)O(logn)

但是,仍然没有已知的摊分算法(我可以找到)用于数据重组后的测点。O(1)

那么,为什么仅凭视觉检查就可以做到这一点?


36
您已经了解了所有要点,并大致了解了它们的位置。您眼中的“软​​件驱动程序”已经为您解释图像做出了艰苦的工作。打个比方,您认为这项工作“免费”,而实际上却并非如此。如果您已经具有将点位置分解为八叉树表示形式的数据结构,则可以比O(n)做得更好。在信息甚至到达意识部分之前,大脑的潜意识部分会进行大量预处理。永远不要忘记这些类比。
理查德·廷格

20
我认为至少您的一种假设不能成立。假设所有点均以“小”扰动排列在一个圆上,并且另外1个点P为圆的中心。如果要查找最接近P的点,则无法消除图形中的任何其他点。
collapsar 2014年

4
因为我们的大脑真的很棒!听起来很便宜,但这是真的。对于我们的(显然是大规模并行的)图像处理的工作方式,我们真的并不了解很多。
卡尔·威索夫特

7
好吧,基本上,您的大脑没有注意到就使用了空间划分。这看起来确实很快的事实并不意味着它是恒定的时间-您正在使用有限的分辨率,并且您的图像处理软件是为此目的而设计的(甚至可能处理所有并行问题)。您正在使用一亿个小的CPU进行预处理的事实并没有使您陷入事实-它只是在许多小的处理器上执行复杂的操作。并且不要忘记对2D纸的绘图-它本身必须至少为。On O(1)O(n)
a安2014年

9
不确定是否已经提到过,但是人脑的工作方式与SISD von Neumann类型计算系统完全不同。在我看来,这里特别重要的是,人脑本质上是平行的,尤其是在处理感官刺激时:您可以同时听到,看到和感觉到多种事物,并且(大致而言)可以意识到所有这些同时进行。我专注于发表评论,但看到我的书桌,一罐汽水,挂在门上的外套,书桌上的笔等。您的大脑可以同时检查许多点。
Patrick87 2014年

Answers:


115

您的心理行为模型不正确。实际上,您分两个步骤进行操作:

  1. 在时间内消除所有距离过长的点。O(1)
  2. 以时间测量接近的个点。Θ mΘ(m)

如果您玩过滚球或冰壶之类的游戏,应该很熟悉-您不需要检查距离目标很远的物体,但是您可能需要测量最接近的竞争者。

为了说明这一点,哪个绿点最接近红点?(只有1个像素多一点,但是最接近一个像素。)为了使事情变得更容易,点甚至按距离进行了颜色编码。

点云

该图片包含个几乎在一个圆上的点,总共绿色点。步骤1可以消除除个点以外的所有点,而步骤2则需要检查个点中的每个点。没有对的先验约束。Ñ » 10 m=10n10mmm

通过物理观察,您可以将问题的大小从整个个点缩小为一个受限制的点候选集。此步骤不是众所周知的计算步骤,因为它基于连续过程。连续过程不受通常关于计算复杂性的直觉,尤其不受渐进分析的影响。nm

现在,您可能会问,为什么连续过程不能完全解决问题?如何得出这个点,为什么我们不能将过程优化为?m = 1mm=1

答案是我作弊:我提出了一组点,这些点由个最接近的点和个点组成。通常,确定哪些点在精确的边界内需要进行逐点执行的精确观察。粗略的淘汰过程可让您排除许多明显的非候选人,但仅确定剩下的候选人就需要枚举它们。n mmnm

您可以在离散的计算环境中对该系统进行建模。假设点在数据结构中表示,该数据结构将它们分类为网格上的单元格,即,点存储在单元格列表中。如果要查找最接近的点,并且包含该点的单元格最多包含一个其他点,则只需检查包含的单元格和8个相邻的单元格即可。这9个单元格中的点总数为。该模型尊重人类模型的一些关键特性:X ÿ X 0ÿ 0(x,y)(x,y)(x0,y0)m

  • m可能是无界的-退化点的恶化情况总是可能的,例如,点几乎位于一个圆上。
  • 实际效率取决于选择与数据匹配的标度(例如,如果点在纸上并且单元格为1公里宽,则您将不会节省任何费用)。

9
此外,并非所有图形都可以投影到平原上,以使Euklidian距离与图形中的距离匹配(例如,如果边缘权重未形成度量标准)。
拉斐尔

5
@Raphael我将问题理解为与计算几何有关,而不是图论,但这确实是一个附加的麻烦。
吉尔斯2014年

2
@Gilles 完成。我刚刚学会了术语“ 计算几何学”
格里特2014年

2
这可能是挑剔的选择,我能理解您要显示的内容,但是作为色盲人士,“选择最接近绿色的红色”会导致很多人在刮擦哪个点。只是将来需要考虑的事情-选择红色/绿色以外的任何其他颜色组合!
tpg2114 2014年

3
@ tpg2114不要忘记红色/绿色不是唯一的色盲类型。与“除红色/绿色以外的任何其他颜色组合”相比,用形状(或颜色以外的任何属性)显示它仍然更具包容性。
Jonathan Van Matre 2014年

42

原因是数据已放入针对该查询优化的“数据结构”中,并且在准备图形时的预处理时间应包括在与点数成比例的测量时间中,得出O(n)那里的复杂性。

如果将坐标放在列出每个点的X和Y坐标的表中,则需要花费更多的精力来计算点之间的距离,对距离列表进行排序并选择最小的。

例如,查询在视觉上无法正常运行,例如查看夜空,并且-仅基于您的视图和每颗恒星的坐标表-定位距离地球最近的恒星或星象符号之间距离最小的恒星它组成的星星。在这里,您将需要一个可缩放和可旋转的3D模型,以便从视觉上确定它,而计算机会认为这与您的原始模型本质上是相同的问题。


2
+1-我向下滚动,寻找恰好说明这一点的人。传入数据的表示很重要-只需尝试查找排序列表与未排序列表的中位数即可!
cloudfeet 2014年

21

这个问题从错误的前提开始。您只是认为您可以在脑海中找到点中的最近点,但实际上,如果不能找到。感觉就像是因为您习惯于处理非常小的图,但是当我们处理渐近复杂性时,小的示例可能会误导您。如果您尝试使用具有十亿个点的散点图来执行此操作,则会很快发现您无法在时间内执行此操作。O 1 O(1)O(1)


8
想象一下在一个圆上放置十亿个点,但是所有点都稍微受到干扰,因此您的点形成了一个模糊的环。要通过眼睛找到最靠近中心的点,我看不出有比逐个检查所有点更好的方法。
Nick Alger 2014年

4
@NickAlger所以它更像是O(numberOfPointsAboutTheSameDistanceFromTheTargetPointAsTheClosestPoint),不一定与n。无论哪种方式,我认为对此的回答都应该从人的思维方式和查询方式提出可能的数据结构。只是说不是O(1)感到...懒惰?不足?
Dukeling 2014年

5
@Dukeling O(某物)是指最坏的情况。如果有任何布局无法使人脑在恒定时间内做到这一点,那么绝对不是O(1)。如果存在一定的极限X,人脑可以在恒定时间内处理X点,但根本不能处理X * 2点-则不是O(1)。
Peteris 2014年

3
@Dukeling它必须依赖于n,因为在最坏的情况下它等于n,并且如果给定n个任意点,则必须期望它不可能比C * n操作更快。
Peteris 2014年

2
@Peteris我猜我们对于“必须依赖于n”的含义以及如何确定最接近的上限没有意见。
Dukeling 2014年

15

外观检查的优越性取决于关键的前提,而这些前提通常无法保证:

  • 缩放:您专注于感兴趣区域的图形表示。这意味着,几何已按比例缩小以适合您的视野。在常规设置中,这已经需要时间进行预处理。O(n)

  • 计数:(请参阅Nick Alger对DW给出的答案的评论),假设一个点数超过了视网膜细胞的数量-您甚至都不会识别出所有涉及的点。

  • 方差:(请参见Nick Alger对DW给出的答案的评论)假设正则(例如六边形)网格上的一组点受到小的随机扰动。如果这些干扰变得小于视网膜(或任何其他重叠网格)的分辨率,您将不仅难以检测实际的最小距离,而且极有可能选择错误的点对。

假设心理过程涉及某种几何表示形式的栅格化(相对于距离矩阵),则这些过程不会随问题实例的大小而任意缩放。换句话说,对于一般设置,将需要在运行预处理采样过程。在人类视觉检查中,此预处理的参数在感知设备(视网膜细胞数,视网膜面积)中进行了硬连线,从而使该处理阶段看起来为。O(n)O(1)


1
OP必须考虑所有点的视觉检查,因为必须由将这些点都考虑在内的任何系统来完成。我认为这就是为什么他考虑摊销复杂度。另一方面,除了稀有的人以外,大多数人不会记住从一个问题到下一个问题的图表。而且,眼睛使用光栅图像的事实意味着扫描是在恒定的时间内进行的,并且在相关部分上以足够的精度聚焦是对数的。无论如何,长距离的微小变化都不会被感知到(请参见我的答案中的Weber-Fechner定律)。O(n)O(log(n))
2014年

据我了解,OP将排除在外,以应用一种算法来计算所有个点的NN,为以后的重复查找做准备。我的意思是,恒定距离的栅格扫描不会满足所有问题实例的需要,因为距离差异可能会低于网格线间距,或者可能大于网格点的数量。在对数时间中专注于相关部分并不能解决所有点几乎都在中心为1点的圆上的问题,因为所有点都是相关的(尽管我可能误会了你)。O(n)nO(nlogn)n
collapsar 2014年

15
  1. 计算机正在解决另一个问题。它需要点列表,而不是点的栅格化图像。从列表转换为图像(即“绘制”点)需要O(n)时间。

    快!最接近(1,2):

    • (9,9)
    • (5,2)
    • (3,-2)
    • (4、3)
    • (0,4)
    • (1,9)

    难得多吧?我敢打赌,如果我将清单加倍,那么您将需要做两倍的工作。

  2. 您不知道您的大脑正在做多少工作。您不会“仅仅知道”哪一点更接近。您的大脑正在进行计算工作,以找出该答案并使其可用。大脑在每个点上并行工作,因此完成时间大致保持不变,但是所需的工作量仍然随着点数的增加而增加。


13

出于同样的原因,当您查看三角形并知道它是三角形时,您会忘记进行的数百万次计算而没有注意到它。

神经网络

实际上,您是一个经过训练并根据海量数据加载的神经网络。

以婴儿形状分类游戏为例:

在此处输入图片说明

当孩子第一次与之互动时,他们很可能会尝试将形状插入错误的孔中,这是因为他们尚未训练大脑或遇到足够的数据来建立网络。他们无法对边缘,大小等进行假设,以确定哪种形状适合孔。

这对您来说似乎很明显(我希望),因为您已经建立了这些连接,甚至可能认为它很直观,而不必将其分解,例如,您只知道三角形适合该三角形,而无需估算尺寸,计算边缘等。这是不正确的,您已经在潜意识中完成了所有这些工作,唯一有意识的想法就是三角形。进行视觉计算,理解其代表的含义,理解各个元素的含义,然后估算它们的距离,因此发生了数百万次的计算,事实是您拥有大量的信息要查询的数据库,这使得此过程变得更加简单。

你的大脑不是二元的

您的大脑处理的数据不是二进制的(据我们所知),不是对还是错,它拥有许多我们用来解释数据的状态,即使我们遵循正确的方法,也会经常出错过程,这是因为数据经常更改。我可能会猜测,我们的大脑的功能更像量子计算机,在量子计算机中,这些位将处于近似状态直到被读取。也就是说,如果我们的大脑完全像计算机一样工作,那么它真的是未知的。

因此,用于处理二进制数据的算法将无法正常工作。您无法比较两者。在您的脑海中,您正在使用概念来执行包含大量信息的丰富数据类型,并且能够在未明确定义它们的情况下制作链接。看到三角形后,您可能会想到Pink Floyd的月球罩的阴暗面。

在此处输入图片说明

回到散点图,没有理由在计算机上使用位图无法完成此操作,并且无法测量半径增加的点到另一个点之间的距离。它可能是您最接近人类的近似值。由于数据限制,而且由于我们的大脑不一定关心计算复杂性并采取复杂的方法来做事,因此速度可能会慢得多。

如果n是点数,则不会是O(1),甚至不会是O(n),相反,它的复杂度现在取决于从所选点到图像边界的最大线性距离。

tl; dr

您的大脑不是二进制计算机。



8

您忘记了重要的一步:在您要查看的图形上绘制所有这些点

这必然是O(n)运算。

之后,计算机可以使用图像识别软件以与人眼几乎相同的方式找到最靠近中心的近似点。这是O(sizeOfImage)操作的最坏情况。

为了使人类能够像计算机一样操作,请记住,计算机会获得一列坐标,并且此时只能查看一个坐标。


1
如果选择恒定的“分辨率”,则可以使用一种算法,即每个点的时间为O(log(分辨率))来绘制它们,并标识出所有“接近”兴趣点的点。O(log(resolution))模糊地类似于这样一个事实,即在纸上精确绘制点要比不精确地绘制点花费更长的时间。还要注意,提高分辨率将增加消除非候选点的算法的每点成本,但会减少消除后非最近点的数量。
超级猫

7

我对这个问题的解释:

我不认为这个问题会被简单地视为一个计算几何复杂性问题。应该更好地理解为这样说:我们认为有能力在可能的时间恒定地找到答案。解释这种看法的原因,直到这种解释和人类的局限性,一台计算机也可以做到。

因此,这个问题可能应该首先被视为心理学家的问题。问题可能与您对时间和精力的看法有关。您能大脑真正感知到时间与时间之间的差异吗?具体的反例并不重要,因为在感知问题上,我们倾向于本能地考虑平均成本(复杂性可能是从心理上精确定义一个概念)。更准确地说,我们对普通情况比对特殊情况更感兴趣,因为我们觉得我们无法随时回答问题。O(1)O(log(n))

韦伯-费希纳定律可能会进一步加强这一定律,该定律规定我们的感知将以实际物理度量的对数尺度进行度量。换句话说,我们感知到相对变化,而不是绝对变化。例如,这就是为什么以分贝为单位测量声音强度的原因。

如果将其应用于我们用于查找最接近点的时间的感知,则不再是而是,其中是我的正好发明了“ 心理复杂性 ”的朗道符号。O(log(n))Oψ(log(log(n)))Oψ

实际上,我在作弊,因为散点图大小的心理感知也遵循对数律,这应该在这种简单的复杂性关系中得到补偿。尽管如此,对于我们来说,这意味着散点图总是看起来要比实际简单得多,尤其是对于大型散点图而言。但是无论我们感知到什么大小,如果我们有内置的对数算法来找到最接近的点(例如神经元四叉树),那么感知的处理时间将由来从实际意义上讲,这可能与常量在感觉上是无法区分的,因此必须在常量上添加一些常量时间以开始识别过程并确认结果。Oψ(log(log(n)))

考虑到生理限制

当考虑图像采集步骤时,上述结论得到进一步维持。

OP谨慎地分离了适当的数据结构(例如“四叉树”)的构造,该结构在多个查询中摊销。

对于大多数不记住图像的人来说,这是行不通的。我认为为每个查询扫描图像,但这并不意味着扫描所有点:不是第一次,也不是以后的查询。

眼睛以恒定的时间扫描光栅图像, 其大小与所拍摄场景的大小相同,并且具有由视网膜结构定义的固定分辨率(请参见下文)。因此,它获得恒定的信息量,可能无法区分所有点。然后,它可以专注于图像的相关部分,以区分另一个时间相关点,还可能包含更改眼睛的方向和焦点的时间。从理论上讲,这种操作可能必须重复进行,导致对数聚焦,但是我相信在感知实践中,聚焦视力最多还有一个额外的步骤。TscanTscan

扫描可能会导致大脑中的结构被分析以找到答案。它可能仍然包含很多点。尽管我不知道大脑是如何进行的,但可以认为这是一种聚焦过程,它花费的对数时间最短,甚至可能更少。此过程将应用于大小有限的感知图像。这当然意味着有一定数量的点,尽管它可能很大。因此,要处理的信息有一个固定的上限。假设对数处理,并重新使用以上分析,则感知的处理时间为。mOψ(log(log(m)))

人眼的分辨率由视杆数决定,视杆数约为1.25亿个。大约是。使用以2为底的日志,可以得到大约 ,即大约5步,无论一个步骤需要多少成本。取而代之,使用大约500兆像素的眼睛分辨率的估计值不会更改最终结果。Ô 227 227log2(27)

在不知道要使用的实际单位的情况下,这仅表明处理的变化与其他恒定时间操作的顺序最差。因此,很自然地,发现最接近点的感知时间是恒定的。。。我们是确定最接近的点还是仅确定一组更接近的点。

关于反例和可能的解决方案

当然,建立反例很容易,这些反例会使眼睛很难确定一小部分较近的点。这就是OP实际上要求一种能够快速消除大多数点(除最接近点之外)的算法的原因。在许多答案中都解决了在几个闭合点之间选择的可能困难的问题,最接近点的范例是几乎在参考点周围的一个圆上。通常,Weber-Fechner定律排除了能够在足够长的距离上区分小距离变化的可能性。实际上,可能会由于存在其他点而增强了这种效果,尽管这些点被消除了,但可能会使距离的感知失真。因此,尝试找出最接近的点将是一项艰巨的任务,并且很可能需要特定的检查步骤,例如使用仪器,这将完全破坏恒定时间的感觉。但这显然超出了OP所考虑的实验范围,因此不太相关。

待解决的问题,即OP实际提出的问题,是是否有一种方法可以消除大多数点,除了可能剩下的一些似乎与参考点距离非常相似的点。

根据我们对感知的恒定时间背后可能隐藏的内容的分析,可以认为在时间内完成此操作的计算机解决方案是令人满意的。另一方面,依靠摊销成本真的不可接受,因为大脑不会那样做,afaik。O(log(n))

拒绝摊销成本不允许使用计算机解决方案,因为必须考虑所有要点。这凸显了大脑和人类感知能力的主要差异:它可以使用模拟计算,其性质与数字计算完全不同。当数十亿个点无法用眼睛辨别时,通常情况就是这样,眼睛没有分辨率,只能看到带有各种阴影的大云。但是,眼睛然后可以专注于相关的较小部分,并看到包含相关点的有限数量的点。不必单独知道所有点。为了使计算机执行相同的操作,您必须为其提供类似的传感器,而不是每个点的精确数字坐标。这是一个非常不同的问题。

在某些方面,“仅视觉检查”比数字计算功能强大得多。这也归因于传感器的物理特性,而不仅仅是大脑可能更大的计算能力。


我不认为您的大脑是否可以在涉及感知的任务中区分与。由于存在人类感知的硬参数(主要是分辨率),因此您可以认为处理感知信息始终为。还要注意,当您完成一项任务时,您会在和之间区分开来,例如,在带有标记节点的平衡二进制堆的图形表示中定位给定数字。请注意,感知限制并不重要,因为您仅在本地检查图形。O log nO 1 O 1 O log nO(1)O(logn) O(1)O(1)O(logn)
collapsar 2014年

量表的另一面也因人类的感知而失真:大多数增加的功能将产生“永远”的值,即使台计算机如果有知觉也会大笑。n
拉斐尔

@collapsar我的答案的第一个近似值实际上是一个关于可感知内容的问题,是对随后内容的介绍。这被进一步发展为答案,该答案要小得多。然后,必须将其与相同时间的恒定时间的其他任务进行比较,并且在感知上可能没有太大区别。对于您的二进制堆示例,情况并非如此。对不起,我迟到了:网络中断了几个小时。Oψ(log(log(n)))
2014年

4

我们有考试中的学生,他们被问到可以对数组进行排序的速度有多快时,会声称计算机是愚蠢的,并且需要n * log(n)(或更糟),而人类却可以更快地做到。

我教授的回答总是:我将列出10.000个项目。让我们看看您是否可以想出一种比计算机更快的方法。

然后:当您尝试找到最接近的点时,涉及多少个处理核心?您不是单处理器机器,而是神经网络,在执行此类任务时具有一定的灵活性。


1
加上对数据的了解的各个方面以及需要排序时可以使用的资源。例如,如果您的同学需要分类无法完全适合他们房间的东西。
托尔比约恩Ravn的安德森

@ThorbjørnRavnAndersen:这是一个很好的了解空间复杂性的重要因素,“东西不能完全适合房间” 8 ^)
Zane 2014年

3

我相信@ Patrick87为您提供了线索:您的眼睛和大脑是一台大型并行计算机。有人认为这不能解释问题,因为对于任意大的问题,有限数量的并行处理器没有什么区别。

但这确实在这里:正如许多人所暗示的那样,您的眼睛(和大脑)解决此问题的能力有限;这是因为在正常人的视线范围内无法容纳任何数量的点。首先,您的眼睛必须能够区分它们,如果太多,那么它们将非常靠近以至于您的眼睛不会察觉到差异。底线:对于足够多的点(适合极少数人),它的速度很快。在其他情况下,它将失败。

因此,您可以在O(1)中解决大脑可以轻松进行处理的小而简单的情况下的问题。除此之外,它不能,因此甚至都不是O(any),因为它很可能会失败。


1

没有人提到在具有空间索引的计算机上可以很快解决此问题。这等效于绘制图像中的点,以便您的眼睛快速扫描并消除大多数点。

Google和其他公司使用一种非常好的索引算法来查找最近的点,称为Geohash。http://en.wikipedia.org/wiki/Geohash

我认为这将使比赛更加有利于计算机。我对使用线性思维的一些答案没有印象。


Θ(n) Θ(lgn)

关键是,空间索引使其大致上就像人类看着乱七八糟的点在屏幕上一样容易。
reinierpost 2014年

1

如果考虑在欧几里得空间中的n维点集合中找到最接近的邻居的情况,那么复杂度通常会随着其变大(即大于数据集的大小)而受到维数的限制。

O(logd2n)

每当可以以足够小的失真将图嵌入到欧氏空间中时,在图中找到最接近节点的问题就具有欧氏表达式。并且使用带有权重的邻接表,我们仍然需要构建邻接表。

O(1)


-1

其他答案也不错,但是将原始问题的基本推理/前提延伸到极端以显示出某些错误的禅宗反问题如何呢?[这也是AI研究的核心悖论]:

如果我可以用人类的智慧思考,为什么我不能创造出像人类一样思考和思考的计算机?

有多种方法可以回答您的问题,但是基本上,我们的思维过程和大脑知觉能力不一定是内省的,而我们对它们的内省确实会产生误导。例如,我们可以识别对象,但是我们无法感知/解释允许这种情况发生的拟算法过程。此外,还有许多心理学实验表明,我们对现实的理解存在细微的扭曲,特别是时间感知,例如时间感知

科学家通常认为/推测,人脑实际上确实采用了算法,但是它们的功能与计算机化算法不同,并且大脑中通过神经网络进行的并行处理量非常大,无法与之相比。顺序计算机算法。在哺乳动物中,整个大脑体积的很大一部分专用于视觉处理。

换句话说,人脑在许多方面都是高度优化的视觉计算机,实际上它们在许多方面确实具有超越当前世界上最大的超级计算机的能力,例如在对象识别等方面,这是由于缺陷(相比之下)与经过数百万年的高度调整/发展/优化的生物学相比,它是由​​人为构建的软件/硬件。


O(f(n))

-2

通常来说,您要解决两个不同的问题,如果您参加同一个比赛,那么对你们俩来说,复杂度都是O(1)。为什么?让我们简化情况-假设您有一条带有一个红点和n个绿点的线。您的任务是找到最接近红点的绿点。一切都在图表上。现在,您所做的事情与您的程序正在做的事情基本上是相同的-只是从红点“走开”(在两个方向上),并检查您正在查看的像素是白色/黑色(背景)还是绿色。现在复杂度为O(1)。

有趣的是,某些数据表示方法可以立即给出一些问题的答案(O(1))。基本示例非常简单-只需在黑色图像上计算白色像素(每个像素值为0 =黑色或1 =白色)。您需要做的就是仅添加所有像素值-1个白色像素和1000个像素的复杂度相同,但这取决于图像大小-O(m),m = image.width * image.height。有可能更快地做到吗?当然,我们需要做的就是使用不同的方法来存储图像即积分图像在此处输入图片说明 现在计算结果为O(1)(如果已经计算出积分图像)。另一种方法是将所有白色像素存储在array / vector / list / ...中,然后计算其大小-O(1)。


O(1)O(1)

@FrankW-那么“走开”的复杂性是什么?我并不是想说你错了,我只是想知道。计算数组/向量/列表的大小-通常数组大小是恒定的,因此不需要计算向量-我不确定,我会说这取决于实现方式(但在大多数实现方式中,最有可能只是实现范围)一个对象,因此无需计数),列表-您是对的,它不是O(1)-我的错误。
cyriel

kkO(#pixels)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.