Python 创建一个序列,每个元素中有两个元素满足特定的距离标准

Python 创建一个序列,每个元素中有两个元素满足特定的距离标准,python,algorithm,list,sequence,permutation,Python,Algorithm,List,Sequence,Permutation,给定一个不同项目序列Sa,我们希望创建一个序列Sb(由Sa中的相同项目组成,但顺序不同),以便序列S=Sa+Sb(序列Sb紧跟在序列Sa之后)满足以下属性: 对于所有项目I,项目I在S中两次出现之间的距离(位置数)至少为某个数字T 如果项目I和J在Sa中位于N个位置内,则I和J在Sb中不在N个位置内 我已经能够相当简单地用Python编写第一个约定。然而,第二个是我挣扎的地方。基本上,我只想要这两样东西: 我希望第二个序列中的项目与第一个序列中出现的项目“足够远” 我不希望第一个序列的邻居

给定一个不同项目序列Sa,我们希望创建一个序列Sb(由Sa中的相同项目组成,但顺序不同),以便序列S=Sa+Sb(序列Sb紧跟在序列Sa之后)满足以下属性:

  • 对于所有项目I,项目I在S中两次出现之间的距离(位置数)至少为某个数字T
  • 如果项目I和J在Sa中位于N个位置内,则I和J在Sb中不在N个位置内
我已经能够相当简单地用Python编写第一个约定。然而,第二个是我挣扎的地方。基本上,我只想要这两样东西:

  • 我希望第二个序列中的项目与第一个序列中出现的项目“足够远”
  • 我不希望第一个序列的邻居也是第二个序列中的邻居(N表示项目被视为邻居的距离)
以下是我目前掌握的情况:

import random

clips = list(range(10)) # arbitrary items
choice_pool = clips[:]
Sa = clips[:]
random.shuffle(Sa)
Sb = []
count = len(Sa)

threshold = 0.5*len(clips) # the minimum distance the item has to be away from itself in the concatenated sequence
while len(Sb) != len(Sa):
    jj = random.randint(0, len(choice_pool) - 1)
    # we want clip a1 to be at least threshold away from clip b1
    if count - Sa.index(choice_pool[jj]) >= threshold:
        Sb.append(choice_pool[jj])
        del choice_pool[jj]
        count += 1

print("Sa:", Sa)
print("Sb:", Sb)
print("S :", Sa + Sb)

对于如何在始终保证这样一个序列存在(而不是以无限循环结束)的情况下实现第二个约定,您有什么建议吗?谢谢。

我会从等式中剔除随机性的可能性。有了随机性,你永远无法保证自己不会陷入无限循环。该算法有更好的改进,但这是基础

import itertools as it

def filter_criteria(sequence):
    #put your filters here return True if you find a sequence that works
    pass 

for sb_try in it.permutations(sa, len(sa)):
   if filter_criteria(sa+sb_try):
       return sb_try

return "no permutation matches"

我会从等式中去掉随机性的可能性。有了随机性,你永远无法保证自己不会陷入无限循环。该算法有更好的改进,但这是基础

import itertools as it

def filter_criteria(sequence):
    #put your filters here return True if you find a sequence that works
    pass 

for sb_try in it.permutations(sa, len(sa)):
   if filter_criteria(sa+sb_try):
       return sb_try

return "no permutation matches"

是否有任何
Sb
去了,或者您需要一种方法来随机选择所有此类安排中的一种?@user58697,我需要一种方法来随机选择所有此类安排中的一种。是否有任何
Sb
去了,或者您需要一种方法来随机选择所有此类安排中的一种?@user58697,我需要一种方法来随机选择所有此类安排中的一种。