首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重力排序:这有可能是通过编程实现的吗?

重力排序:这有可能是通过编程实现的吗?
EN

Stack Overflow用户
提问于 2010-03-21 23:15:18
回答 16查看 12K关注 0票数 19

最近我一直在考虑在排序算法中使用面向对象的设计。然而,我无法找到一种适当的方法来使这种排序算法更接近于在O(n)时间内进行排序。

好吧,这是我一个星期以来一直在想的事情。我有一组输入数据。我将为每个输入数据分配一个质量(假设输入数据为Mass类型和Sphere类型。如果我们假设所有物体都是完美的球形物体,形状与其质量成正比,那么最重的物体首先接触地面。)我将把我所有的输入数据放置在与地球相同距离的空间中。我会让他们自由落体。根据万有引力定律,最重的物体首先撞击地面。他们点击的顺序会给我排序的数据。这在某种程度上是很有趣的,但实际上,我觉得这应该是可能的使用OO,我已经学到了至今。

真的有可能用重力拉力来进行排序吗?或者我是愚蠢/疯狂的?

编辑:发现所有物体同时击中地面,所以我引入了球形物体的概念。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2010-03-22 00:00:23

问题是,尽管OOP的一个想法可能是对现实世界建模,但这并不意味着在现实世界中物体所需的时间与用计算机模拟它所需的时间之间存在直接的对应关系。

想象一下您的过程所需的实际步骤:

  1. 必须为数据集中的每个项构造一个对象。在大多数现代硬件上,这本身就需要迭代,因此您的策略O(n)充其量也是如此。
  2. 每个物体都需要模拟重力的影响。同样,实现这一点的最明显、最直接的方法是迭代。
  3. 在您的编程模型中,每个对象降落在“地球”表面的时间必须被捕获,并且通过一些特定于实现的机制,相应的对象将需要被插入到一个有序的列表中。

考虑到这一问题,进一步引入了额外的复杂因素。扪心自问:你需要将这些物体定位到多高的位置才能启动?明显地足够高,以至于最大的物体实际上会坠落;也就是说,离地球更远,比最大物体的半径更远。但你怎么知道那有多远?您需要首先确定集合中最大的对象;这同样(可能)需要迭代。另外,人们可能会想象,这种模拟可以是多线程的,以尝试模拟物体实际下落的概念的实时行为;但是,您会发现自己试图向集合中添加项(显然需要花费非零时间的操作),同时可能会检测到新的碰撞。因此,这也会造成线程问题。

简而言之,我很难想象这个想法是如何在没有特殊硬件的情况下使用OOP正确实现的。尽管如此,这确实是个好主意。它让我想起了珠子分类--这个算法虽然和你的想法不一样,但它也是一种排序解决方案,它利用了重力这一物理概念,而且毫不奇怪,需要专门的硬件。

票数 21
EN

Stack Overflow用户

发布于 2010-03-21 23:18:36

你刚刚重申了这个问题。计算引力效应的顺序最多有O的排序算法,你想要击败的。

票数 9
EN

Stack Overflow用户

发布于 2010-03-21 23:20:00

引力计算仅在现实世界中是免费的。在程序中,你需要给它建模。它将是复杂度最小的另一个n。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2489190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档