最近我一直在考虑在排序算法中使用面向对象的设计。然而,我无法找到一种适当的方法来使这种排序算法更接近于在O(n)时间内进行排序。
好吧,这是我一个星期以来一直在想的事情。我有一组输入数据。我将为每个输入数据分配一个质量(假设输入数据为Mass类型和Sphere类型。如果我们假设所有物体都是完美的球形物体,形状与其质量成正比,那么最重的物体首先接触地面。)我将把我所有的输入数据放置在与地球相同距离的空间中。我会让他们自由落体。根据万有引力定律,最重的物体首先撞击地面。他们点击的顺序会给我排序的数据。这在某种程度上是很有趣的,但实际上,我觉得这应该是可能的使用OO,我已经学到了至今。
真的有可能用重力拉力来进行排序吗?或者我是愚蠢/疯狂的?
编辑:发现所有物体同时击中地面,所以我引入了球形物体的概念。
发布于 2010-03-22 00:00:23
问题是,尽管OOP的一个想法可能是对现实世界建模,但这并不意味着在现实世界中物体所需的时间与用计算机模拟它所需的时间之间存在直接的对应关系。
想象一下您的过程所需的实际步骤:
考虑到这一问题,进一步引入了额外的复杂因素。扪心自问:你需要将这些物体定位到多高的位置才能启动?明显地足够高,以至于最大的物体实际上会坠落;也就是说,离地球更远,比最大物体的半径更远。但你怎么知道那有多远?您需要首先确定集合中最大的对象;这同样(可能)需要迭代。另外,人们可能会想象,这种模拟可以是多线程的,以尝试模拟物体实际下落的概念的实时行为;但是,您会发现自己试图向集合中添加项(显然需要花费非零时间的操作),同时可能会检测到新的碰撞。因此,这也会造成线程问题。
简而言之,我很难想象这个想法是如何在没有特殊硬件的情况下使用OOP正确实现的。尽管如此,这确实是个好主意。它让我想起了珠子分类--这个算法虽然和你的想法不一样,但它也是一种排序解决方案,它利用了重力这一物理概念,而且毫不奇怪,需要专门的硬件。
发布于 2010-03-21 23:18:36
你刚刚重申了这个问题。计算引力效应的顺序最多有O的排序算法,你想要击败的。
发布于 2010-03-21 23:20:00
引力计算仅在现实世界中是免费的。在程序中,你需要给它建模。它将是复杂度最小的另一个n。
https://stackoverflow.com/questions/2489190
复制相似问题