【发布时间】:2017-02-01 07:05:50
【问题描述】:
有一串数字。
seqNum <- sample(1:15, 30, replace = T)
[1] 10 7 6 5 4 1 15 11 7 15 1 2 3 14 8 3 5 10 8 3 14 8 14 3 14 12 15 12 10 14
定义“循环”:从序列中的第一个数字开始,两个重复数字之间的所有数字都被定义为一个循环。例如,上面给定序列中的第一个循环是“7 6 5 4 1 15 11”。将其从序列中删除,然后重复上一个方法以查找下一个循环。
去掉第一个循环后的序列变成:
10 15 1 2 3 14 8 3 5 10 8 3 14 8 14 3 14 12 15 12 10 14
第二个循环是“3 14 8”。
去掉第二个循环后的序列变成:
10 15 1 2 5 10 8 3 14 8 14 3 14 12 15 12 10 14
第三个循环是“10 15 1 2 5”。 去掉第三个循环后的序列变成:
8 3 14 8 14 3 14 12 15 12 10 14
第四个循环是“8 3 14”。 去掉第四个循环后的序列变成:
14 3 14 12 15 12 10 14
第五个循环是“14 12 15 12 10”。(总是使用 2 个最接近的重复数字) 去掉第五个循环后的序列变成:
14 3
完成。
注意:
“循环”必须至少包含 3 个数字
-
如果两个循环认为是同一个循环
- 包含相同的编号
- 相对顺序相同,例如循环“1 2 3 4”与循环“3 4 1 2”或“4 1 2 3”或“2 3 4 1”相同,但与循环“1 3 2”不同4”或“2 1 3 4”等。
想要:
查找给定序列中的所有循环,并给出每个唯一循环的计数。
期望的结果:
count loop
1 1 7-6-5-4-1-15-11
2 2 3-14-8
3 1 10-15-1-2-5
4 1 14-12-15-12-10
我知道这是一个很长的问题,但我会感谢任何提示。谢谢!!
PS:这里假设要在一个很长的数字序列上搜索循环,比如总共大约 10^8,请使用 sample(1:1024, 100000, replace = T) 进行测试。
【问题讨论】:
-
你能在你的样本上使用
set.seed(),这样你的数字是可重复的 -
两个 10 之间的数字 7 6 5 4 1 15 11 7 15 1 2 3 14 8 3 5 可以是一个循环吗?
-
@SymbolixAU,我稍微修改了示例序列以显示更多情况。
-
@Rahul,总是从头开始搜索循环。虽然一对 15 确实形成了一个循环,但是一对 7 先出现,去掉那个“7”循环后,“15”循环就被打破了。我回答你的问题了吗?
标签: r