百科问答小站 logo
百科问答小站 font logo



有哪些「上帝算法」? 第1页

  

user avatar   zhang-zi-19 网友的相关建议: 
      

update(20150323):感谢

@Deep Reader

的指正,Dij算法不是指数级的复杂度,是二次幂多项式级的。这个地方是我记混淆了。对不起各位看官了~以及

@Deep Reader

真是人如其名!

不请自来。

答题资格:gis相关开发人员。

我想目前的答案对题主的批评其实是缺少思考的结果,其实题主的上帝算法确实很上帝的,这个算法的时间复杂度确实是常数级的,问题在于目前的计算机没有办法实现这个算法。

请听我细细道来。

五年前跳入GIS这个坑,如今准备出坑了,这五年多的时间里二维空间的一切都让我感到奇妙,总是不时地去思考为什么一涉及到二维的算法,复杂度就恐怖得一比。dijkstra这种指数级复杂度(错误,此处应为O(n^2)感谢 @Deep Reader 指正!)的算法,还得靠A*去减少复杂度,勉强得到近似解。当初看到A*的时候,简直惊为天人,并在自己的代码里模仿A*解决了一个大问题,如今想起来也是颇有感慨。说远了,咱么扯回来哈,我也一直在想为什么空间关系计算机处理起来这么复杂呢?刚开始我得出的答案是:计算机的原生数据结构是一维的,所有高维数据都是通过一维的模拟来实现的。这当然是一个解释,但我觉得还不够,却又想不通到底哪里还不够。直到最近又一次翻开《java设计模式》,当我看到调停者模式的时候,突然恍然大悟!原因就是——计算机的原生数据结构不支持关系的表达

具体的内容就不复述了,可以参加《Java设计模式》的调停者模式一节相关内容。

在这个题目中,之所以人来扯一扯就可以达到O(1),而计算机直奔指数级扬长而去,就是因为原生数据结构不支持关系。

详细说说。

一个二维的无向权值图,一般我们会主要关注它的拓扑关系,在数据结构中,这种拓扑关系可以简单地用一个对象引用+权值来表示。在题主的算法中,还引入了欧拉几何的二维空间关系,此算法利用空间关系改变时,拓扑关系不变的特性来达到找出最优路径的目的。

然而,在计算机处理时,空间关系怎么表达的?(x,y)数值对,注意,在这种表达中,空间关系来源于计算,而非原生的数据机构。换句话说,当两个对象的空间关系发生改变时,我们必须要通过一次“计算”来获得二者当前的空间关系,而现实中,并不需要,因为关系是直接存在于物理世界的原生属性中。

因此,“扯不动”这个关系,对于计算机而言,是非原生的,也就说,计算机原生的数据结构无法表达“扯不动”这个关系,因此,你必须在扯的过程中,不断计算,并加入代码来人工判断是否还能扯得动。然后,你还得计算到底哪一条路径是“绷直”了的,因为“绷直”其实本质上也是一种关系的体现。

我们做个特殊处理,把待求的两个点a,b放在水平轴x上,横向扯动,设a在b的左边。于是,a的x值减小,而同时b的x值开始增大。问题在于,实际中,当a,b开始移动时,由于物理世界原生的关系,你无需去控制其他球和线,它们会“自动”地开始变化,最终达到绷直时的状态。但计算机不行,这个变化的“关系”必须通过你的计算去达到,而计算的次数显然与一共有多少个球相关,最终也会变成指数级(错误,O(n^2))的时间复杂度。

总结起来,其实题主这个算法,对于计算机而言,确实是“上帝算法”了,原因很简单:你做了对于计算机而言,是它的上帝才能做的事情——你的世界里“关系”是原生的。

如果,我是说如果,有一天,计算机内的数据结构原生地支持了关系···我擦,我再跳GIS坑来得及吗?

以上答案是个人思考的结果,不可避免会有不严谨甚至错误的地方。望各位大牛斧正,因为我对空间关系的好奇是无尽的。

最后,考虑到工作关系,虽然可能是废话,但还是说一句:

本答案未经作者允许,禁止转载。


user avatar   windskymagic 网友的相关建议: 
      

你要是问我神舟坑毕业生的行径对不对,那肯定是不对。但你要问我为什么这种公司还能活下来,不涉及道德评判的说,就pc这种夕阳产业,越是黑心,越是不把员工当人的公司,才越有可能活下来不是吗。现在战神系列算是站稳了脚跟,神舟也算是个1.5线游戏本厂商了,再顺带压榨员工开源节流,有什么理由活不下去?




  

相关话题

  计算机专业学生为什么要学《大学物理》,学来干什么? 
  如何看待滴滴章文嵩称,滴滴面临的问题比 AlphaGo 复杂 100 倍? 
  TensorFlow 中 padding 的 SAME 和 VALID 两种方式有何异同? 
  面对大数据杀熟、算法困住骑手,民主促进会中央建议推行算法开发主体责任制,你怎么看? 
  如何看待清华法学院新开的计算法学? 
  ECC内存和普通内存差别有多大? 
  为什么大家都说程序员需要好键盘? 
  如何编程判断一个数是否是质数? 
  计科和软工的区别?报哪个专业好些? 
  如何通俗的解释模糊神经网络? 

前一个讨论
有限次博弈是否存在合作关系?
下一个讨论
曹魏时期,曹操庙的五批从祀人员是出于什么政治考量而确定的?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利