【发布时间】:2015-09-06 19:32:50
【问题描述】:
我在做一些信号分析,其中一部分是寻找最长的子序列
我有如下字典:
sequenceDict = {
0: [168, 360, 470],
1: [279, 361, 471, 633, 729, 817],
2: [32, 168, 170, 350, 634, 730, 818],
3: [33, 155, 171, 363, 635, 731, 765, 819],
4: [352, 364, 732, 766, 822],
5: [157, 173, 353, 577, 637, 733, 823, 969],
6: [158, 174, 578, 638, 706, 734, 824],
7: [159, 175, 579, 707, 735],
8: [160, 464, 640, 708, 826],
9: [173, 709, 757, 827],
10: [174, 540, 642, 666, 710],
11: [253, 667, 711],
12: [254, 304, 668],
13: [181, 255, 831],
14: [256, 340, 646, 832],
16: [184, 416],
17: [417],
18: [418],
19: [875],
20: [876],
23: [217],
24: [168, 218, 880],
25: [219, 765, 881],
26: [220, 766],
27: [221],
28: [768],
29: [3, 769],
30: [344, 476, 706]}
这些本质上总是另一个数组的排序索引,我想找到最长的递增序列(就像longest increasing subsequence),通过从每个键中顺序选择一个数字(键2紧跟在键1之后,所以开),例如, 从键 0 和 1 来看,[360, 361] 是一个序列,而 [470, 471] 是另一个序列。 我称这些递增序列,因为这些数字应该严格增加 1。
我看过patience sorting之类的东西,但由于这个问题略有不同,并且还有一个序列树,是否有任何已知的python实现,或者除了生成所有可能的其他有效方法来自这个 dict 的序列,然后运行耐心排序?
【问题讨论】:
-
能否减少示例中的数据量。我们真的不需要太多来了解问题以及您期望的解决方案。你真的需要发布你尝试过的东西。
-
dict 中的每个数组似乎都已排序。这是给定的,还是只是巧合?
-
@haraldkl:这是给定的,相应地编辑了问题。
-
@PeterWood:减少了问题中的数据。正如我所提到的,我唯一的想法是蛮力方法。实现的链接已发布,唯一的其他内容是 for 循环。
-
@haraldkl 序列需要在keys的序列中“从每个key中依次选择一个数字(key 2紧跟在key 1之后,以此类推)”,如果不清楚,请提出,我会更新问题。
标签: python algorithm signal-processing