如何创建可排序的长嵌套列表?

时间:2018-06-13 03:06:02

标签: arrays math numbers

说明

我想创建一个列表,理想情况下是无限制的,但我可以使用至少1,000个初始项目,它们可以在每个初始列表项之间创建无限数量的列表,并且相同随后创建的每个项目都是无限的。

创意1:

列表以1项开头,我们称之为x。 然后,我可以在x的左侧或右侧添加1个项目,如果在左侧,则需要更小,在右侧需要更大。 一次尝试是使用整数,所以如果x500,我们现在有[499, 500, 501],我们继续[498, 499, 500, 501, 502]。 现在,我需要在项目之间添加项目,例如在500501之间添加项目,所以让我们使用小数并添加500.5,然后在500.5501之间添加项目{1}},以便500.75,等等......

问题:

此方法只会运行38次,直到我们达到500.999999999999之后,我运行的任何程序,编程语言(JavaScript)或Excel都将停止添加小数位。

此外,我应该能够在500.5500.75之间进行操作,并再次在其间创建一个列表,该列表将在37次迭代后停留在500.749999999999,依此类推。 / p>

创意2:

使用字母。然后可以按字母顺序对结果进行排序。从L开始,向左添加K,向右添加M[K, L, M]。 在LM之间,我们可以创建LM,然后在LMM之间添加LMM,依此类推。

问题:

这一点的限制是,在左边我们只能转到A而在右边我们只能到达Z,远远低于所需的1,000个项目。

有没有人有任何建议?也许是字母和数字的组合? (但是如何对它进行排序?)或者某些我不知道的公式?感谢。

1 个答案:

答案 0 :(得分:1)

我可以想到多种解决方案。哪种方法最有效取决于您的编程语言。

首先,您可以继续使用浮点数的想法,但是使用扩展精度包或具有扩展精度浮点数的语言。在Python中,您可以使用标准decimal模块。在开始之前,您可以将数字的精度设置得足够高,以覆盖可能添加的数字的数量。对于1000次添加,使用302个小数位就足够了。某些语言或包具有无限的精度,您无需提前设置精度。

其次,你可以使用有理数。 Python有fractions模块,因为Python的整数是任意精度,所以分数也是如此。

第三,你可以使用2元组的正整数来实现你自己的分数。元组(a, b)&#39;代表&#39;积极的有理数a/b,但你实现了这些理性&#39;你自己。您从(1, 1)开始。那么(a, b)当且仅当(c, d)时,a*d < b*c小于(a, b)。您使用(a, b+1)将元组(a+1, b)缩小,然后使用(a, b)将其设置为更大。您会在(c, d)(a+c, b+d)之间使用(0, 'A')获得一个元组。如果整数是任意精度,这种方法效果最好。

第四,你可以使用2元组,第一个元素是一个整数,第二个元素是一个字符串。 (-1, 'A')之前的元组为(0, 'Z')(0, 'ZA')之后的元组为(1, 'Z'),或者您可以使用(0, 'A')。正如您所知,(0, 'B')(0, 'AB')之间的元组是'L'

第五,你可以模拟二进制搜索树(BST)。由于您需要列表而不是实际BST,因此您可以通过使列表中的每个项目代表BST中的节点来模拟一个,其中'R'表示左子,''表示右子。您使用单个项'L'(空字符串)开始列表,该字符串表示BST的根。要获取最左侧项目左侧的项目,请将'R'连接到字符串的末尾以获取所需的项目。要获取最右侧项目右侧的项目,请将'R'连接到字符串的末尾。为了获得两个相邻项目之间的项目,我们意识到必须是另一个项目的初始部分。如果左侧项长于右侧,请将'L'连接到左侧项目。如果左项比右项短,则将1连接到右项。请注意,此方法与使用从'L'开始的分数同构,并且添加1/2同构以减去'R的幂并添加1/2同构为添加fractions的力量。但是字符串避免了有限精度问题。

我也可以想到其他可能性。如果我要实现你的想法,我会使用Python中的dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.google.android.gms:play-services-vision:11.6.2' implementation 'com.android.support:appcompat-v7:27.0.2' implementation 'com.rmtheis:tess-two:9.0.0' implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.12' implementation 'com.android.support.constraint:constraint-layout:1.1.1' } ,因为它们很好地集成到了语言中。然后订购,打印等已经用语言处理。