说明
我想创建一个列表,理想情况下是无限制的,但我可以使用至少1,000个初始项目,它们可以在每个初始列表项之间创建无限数量的列表,并且相同随后创建的每个项目都是无限的。
创意1:
列表以1项开头,我们称之为x
。
然后,我可以在x
的左侧或右侧添加1个项目,如果在左侧,则需要更小,在右侧需要更大。
一次尝试是使用整数,所以如果x
是500
,我们现在有[499, 500, 501]
,我们继续[498, 499, 500, 501, 502]
。
现在,我需要在项目之间添加项目,例如在500
和501
之间添加项目,所以让我们使用小数并添加500.5
,然后在500.5
和501
之间添加项目{1}},以便500.75
,等等......
问题:
此方法只会运行38次,直到我们达到500.999999999999
之后,我运行的任何程序,编程语言(JavaScript)或Excel都将停止添加小数位。
此外,我应该能够在500.5
和500.75
之间进行操作,并再次在其间创建一个列表,该列表将在37次迭代后停留在500.749999999999
,依此类推。 / p>
创意2:
使用字母。然后可以按字母顺序对结果进行排序。从L
开始,向左添加K
,向右添加M
:[K, L, M]
。
在L
和M
之间,我们可以创建LM
,然后在LM
和M
之间添加LMM
,依此类推。
问题:
这一点的限制是,在左边我们只能转到A
而在右边我们只能到达Z
,远远低于所需的1,000个项目。
有没有人有任何建议?也许是字母和数字的组合? (但是如何对它进行排序?)或者某些我不知道的公式?感谢。
答案 0 :(得分:1)
我可以想到多种解决方案。哪种方法最有效取决于您的编程语言。
首先,您可以继续使用浮点数的想法,但是使用扩展精度包或具有扩展精度浮点数的语言。在Python中,您可以使用标准decimal
模块。在开始之前,您可以将数字的精度设置得足够高,以覆盖可能添加的数字的数量。对于1000次添加,使用302个小数位就足够了。某些语言或包具有无限的精度,您无需提前设置精度。
其次,你可以使用有理数。 Python有fractions
模块,因为Python的整数是任意精度,所以分数也是如此。
第三,你可以使用2元组的正整数来实现你自己的分数。元组(a, b)
'代表'积极的有理数a/b
,但你实现了这些理性'你自己。您从(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'
}
,因为它们很好地集成到了语言中。然后订购,打印等已经用语言处理。