gpt4 book ai didi

algorithm - 更好的随机 "feeling"短序列整数生成器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:16 25 4
gpt4 key购买 nike

我正在尝试找出一种方法来创建在短序列上“感觉”随机的随机数。这是一个问答游戏,其中有四种可能的选择,软件需要在四个位置中选择一个来放置正确答案,然后再用干扰项填充其他三个位置。

显然,arc4random % 4 将在长序列中产生足够多的随机结果,但在短序列中完全有可能(而且经常出现!)有五六个相同的结果号码连续回来。这是我要避免的。

我也不想简单地说“永远不要选择同一个方 block 两次”,因为除了第一个问题之外,每个问题都只有三个可能的答案。目前我正在做这样的事情:

bool acceptable = NO;
do {
currentAnswer = arc4random() % 4;
if (currentAnswer == lastAnswer) {
if (arc4random() % 4 == 0) {
acceptable = YES;
}
} else {
acceptable = YES;
}
} while (!acceptable);

有没有我忽略的更好的解决方案?

最佳答案

如果您的问题是如何使用示例的概率非迭代地计算 currentAnswer,Guffa 可以为您提供答案。

如果问题是如何在不违反等概率的情况下避免随机聚类,并且您知道列表长度的上限,那么请考虑以下有点像取消排序的算法:

from random import randrange
# randrange(a, b) yields a <= N < b

def decluster():
for i in range(seq_len):
j = (i + 1) % seq_len
if seq[i] == seq[j]:
i_swap = randrange(i, seq_len) # is best lower bound 0, i, j?
if seq[j] != seq[i_swap]:
print 'swap', j, i_swap, (seq[j], seq[i_swap])
seq[j], seq[i_swap] = seq[i_swap], seq[j]

seq_len = 20
seq = [randrange(1, 5) for _ in range(seq_len)]; print seq
decluster(); print seq
decluster(); print seq

与实际工作的 Python 代码的任何关系纯属巧合。我很确定先验概率得到了维护,而且它似乎确实打破了集群(偶尔会增加一些)。但我很困所以这只是为了娱乐目的。

关于algorithm - 更好的随机 "feeling"短序列整数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com