随机数列,生成两次,如何保证最大程度的不同

m
miked
楼主 (北美华人网)
一个盒子里有10个0, 10个1, 10个2, 10个3
每次从这个盒子里取出一个数字,取出后就不放回, 按照取出顺序排成一个40个元素组成的数列。这个数列中有10个0, 10个1, 10个2, 10个3.
学生a,这样排列一次,就得到一个数列 A 学生b,这样排列一次,就得到一个数列 B
如果A,B相应的元素,如果是一样的,我们计算这样一样的所有元素的个数。这个个数越小越好。比如没有一样的。那么一样的所有原数的个数为0.
请问有什么方法,能编程,最快的得到这样的A和B?


d
doduso
随机怎么能保证最小呢 这个是个depth first tree traversal problem 自己想吧
小城往事
回复 1楼miked的帖子
如果你人为控制让它不同,这就不叫随机了
咸鱼红烧肉
这个标题就给我看笑了。
G
Gsn001
又看一遍题
d
destiny2008
要生成两个尽可能不相同的数列,可以采用以下策略:
1. 生成数列A   首先随机地从盒子中取出一个数字,直到盒子为空,得到数列A。
2. 生成数列B   使用某种策略生成数列B,确保它与数列A的重复项最少。   一个简单的策略是:首先对数列A进行某种转换,例如将其反转;然后从转换后的数列A中取数,直到取完或得到一个与A尽量不相同的数列B。   
d
destiny2008
import random
def generate_sequence():   box = [0]*10 + [1]*10 + [2]*10 + [3]*10   random.shuffle(box)   return box
def count_same_elements(seq1, seq2):   return sum(1 for a, b in zip(seq1, seq2) if a == b)
# 生成数列A seqA = generate_sequence()
# 生成数列B: 我们可以选择简单地反转A来得到B seqB = seqA[::-1]
# 计算两数列中相同元素的数量 same_count = count_same_elements(seqA, seqB) print(f"相同元素的数量: {same_count}")
G
Gsn001
同意楼上 反转A即可。 数列是偶数 不会出现反转后 中间元素相同的情况