您已经获得了输入数据(项目序列),例如: [1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16] 您的任务是随机选择M非重叠样本(SubSeq ...

问题描述 投票:0回答:0
您的任务是随机选择相同大小N.

的M非重叠样本(子序列)。

,例如,如果任务是选择3个尺寸3的样本,则解决方案之一将是:
[3, 4, 5]
[8, 9, 10]
[11, 12, 13]

我的算法:

选择随机第一个样本:
[11, 12, 13]

输入数据是
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  1. [14, 15, 16]
  2. 从剩余的输入数据中选择随机第二个样本:
  3. [3, 4, 5]
    输入数据(足够大)是
    [6, 7, 8, 9, 10]
  4. [14, 15, 16]
  5. 从剩余的输入数据中选择随机第三个样本:
    [8, 9, 10]
  6. ,当样品太大时,该算法不起作用。如果任务是选择3个尺寸5的样本,则存在一个解决方案,但是如果您使用我的算法并随机选择第一个样本为
    [3, 4, 5, 6, 7]
    ,则该算法将失败。
    
  7. 当然,还有一种明显的蛮力算法:找到所有可能的解决方案,然后随机选择其中之一。但是我希望有更多“聪明”(时空效率)。
  8. 您可以利用整个输入列表作为您的来源构建长度n列表。您的源列表的长度可能不是N的倍数,因此您需要考虑到这一点。
    
    到达:
import random data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] M = 3 N = 3 subs = [] for i in range(0, (len(data) // N) * N, N): subs.append(data[i:i+N]) if len(subs) < M: print("Can't be done") else: for _ in range(M): s = random.choice(subs) print(s) subs.remove(s)

	

python algorithm subsequence
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.