如何实现猜对后降低选中概率的动态权重作者随机选取
高效实现思路
数据结构设计:嵌套字典完全可行
直接用嵌套字典存储即可,外层键为历史时期,内层键为作者名,值为该作者被猜对的次数(初始值设为1,保证第一次选取时有正常概率)。示例结构:
period_authors = { "periodOne": {"Author1": 1, "Author2": 1}, "periodTwo": {"Author3": 1, "Author4": 1} }
这种结构的优势:
- 快速定位任意作者的计数,更新操作耗时O(1)
- 天然按历史时期分组,方便后续扩展(比如按时期筛选作者)
加权随机选取作者
核心逻辑是让被猜对次数越多的作者,选中概率越低。具体步骤:
- 收集所有作者与权重:遍历嵌套字典,为每个作者计算权重,权重设为
1 / 猜对次数——次数越多,权重越小,选中概率越低。 - 加权随机选择:用语言自带的加权随机工具实现,比如Python的
random.choices:
import random def select_author(period_authors): authors = [] weights = [] for period, author_counts in period_authors.items(): for author, count in author_counts.items(): authors.append(author) weights.append(1 / count) # 选取1个作者 return random.choices(authors, weights=weights, k=1)[0]
猜对后的更新逻辑
当用户猜对某作者的所属时期后,直接找到该作者的计数并加1即可:
def update_author_count(period_authors, target_period, target_author): period_authors[target_period][target_author] += 1
可选优化点
- 设置计数上限:比如将最大计数设为5,避免某个作者权重趋近于0,彻底失去被选中的机会,保证所有作者都有出场可能。
- 缓存权重列表:如果作者数量极大,可维护一个全局的作者-权重缓存字典,每次更新计数时同步更新缓存,避免每次选作者都遍历全量数据。
内容的提问来源于stack exchange,提问作者M3mber
相关产品推荐
相关产品推荐

