看帖神器
北美华人网
追帖动态
头条新闻
每日新帖
最新热帖
新闻存档
热帖存档
文学城
虎扑论坛
未名空间
北美华人网
北美微论坛
看帖神器
登录
← 下载
《看帖神器》官方
iOS App
,体验轻松追帖。
随机数列,生成两次,如何保证最大程度的不同
查看北美华人网今日新帖
最新回复:2023年9月1日 15点15分 PT
共 (8) 楼
返回列表
订阅追帖
只看未读
更多选项
阅读全帖
只看图片
只看视频
查看原帖
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
大约一年
2 楼
随机怎么能保证最小呢 这个是个depth first tree traversal problem 自己想吧
小
小城往事
大约一年
3 楼
回复
1楼miked的帖子
如果你人为控制让它不同,这就不叫随机了
咸
咸鱼红烧肉
大约一年
4 楼
这个标题就给我看笑了。
G
Gsn001
大约一年
5 楼
又看一遍题
d
destiny2008
大约一年
6 楼
要生成两个尽可能不相同的数列,可以采用以下策略:
1. 生成数列A 首先随机地从盒子中取出一个数字,直到盒子为空,得到数列A。
2. 生成数列B 使用某种策略生成数列B,确保它与数列A的重复项最少。 一个简单的策略是:首先对数列A进行某种转换,例如将其反转;然后从转换后的数列A中取数,直到取完或得到一个与A尽量不相同的数列B。
d
destiny2008
大约一年
7 楼
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
大约一年
8 楼
同意楼上 反转A即可。 数列是偶数 不会出现反转后 中间元素相同的情况
请输入帖子链接
收藏帖子
每次从这个盒子里取出一个数字,取出后就不放回, 按照取出顺序排成一个40个元素组成的数列。这个数列中有10个0, 10个1, 10个2, 10个3.
学生a,这样排列一次,就得到一个数列 A 学生b,这样排列一次,就得到一个数列 B
如果A,B相应的元素,如果是一样的,我们计算这样一样的所有元素的个数。这个个数越小越好。比如没有一样的。那么一样的所有原数的个数为0.
请问有什么方法,能编程,最快的得到这样的A和B?
如果你人为控制让它不同,这就不叫随机了
1. 生成数列A 首先随机地从盒子中取出一个数字,直到盒子为空,得到数列A。
2. 生成数列B 使用某种策略生成数列B,确保它与数列A的重复项最少。 一个简单的策略是:首先对数列A进行某种转换,例如将其反转;然后从转换后的数列A中取数,直到取完或得到一个与A尽量不相同的数列B。
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}")