【发布时间】:2016-08-19 14:41:06
【问题描述】:
我有一个作业问题,我正在努力解决,需要一些指导来解决。 假设我有一条纸,我从中心折叠它,使左半部分在右半部分后面。然后我按顺序对折叠的部分进行编号,当我展开时得到编号,如下所示。 1:2
如果我折叠两次,展开时得到的数字如下 1:4:3:2
如果我折叠三次,我得到如下 1 8 5 4 3 6 7 2
我想在折叠 n 次时生成数字数组。因此,如果我将它折叠 25 次,我将得到 2^25 个类似序列的数字。
这些是我的观察结果
第一个和最后一个数字始终是 1 和 2。
中间的两个数字总是4和3
索引 1 处的数字是最大数字,倒数第二个位置的数字是第二大数字。
它看起来像二叉搜索树的前序遍历,但我不知道这有什么帮助。
- 我尝试从预序构造二叉树,然后将其转换为中序,假设我可以反转这个过程以获得相同的序列,但我错了。
EDIT :为了在这个生成的数组中搜索一个元素,我可以进行顺序搜索,这将是 O(n) 高效的。但我意识到必须有一种更快的方法来搜索这个系列中的数字。
我无法进行二分搜索,因为它没有排序,并且当完成 25 次以上的折叠时有超过十亿个数字。
我可以使用什么样的搜索策略来查找数字及其索引?
这也是我想将其转换为具有 log(n) 搜索效率的二叉搜索树的原因之一。
编辑 2: 我按照其中一个答案的建议尝试了表格折叠算法,但内存效率不高。我无法在内存中存储超过十亿个数字,因此必须有一种方法可以在不实际创建数字数组的情况下找到数字索引。
【问题讨论】:
-
为什么下面的答案是-1
-
@MichaelMarkidis 对于 SO 是什么,用户之间存在广泛的不同意见:人们互相帮助解决编程问题的社区,或者可能对未来用户有用的高质量问答存档。人们在这个问题上的立场通常可以解释他们的投票。
-
这个序列看起来很眼熟,而且它确实与你得到的位反转有关,所以那里可能有你可以适应的算法。
-
@m69 哦!我还没有想到位反转。我必须探索这些选择。谢谢
标签: java algorithm recursion data-structures