在玩交易卡游戏时,我经常想知道什么是最有效的数据结构来处理以下问题.
在这样的游戏中,我面对的是一个包含N张牌(N~30..60..100)的牌组的对手,每张牌都是从可能的M牌类型中选出的(M~通常是1000..10000s).卡通常不需要是唯一的,即可以有重复的卡类型.在比赛之前,对手牌组的内容是未知的.
随着游戏的开始和进展,我慢慢地逐卡学习,这是对手使用的牌.有一个数据集包括之前看到的甲板的K(K~通常为100000..100000s)的全部内容.我想使用在特定游戏中获得的逐渐增加的样本来查询该数据集,以制作对手使用的可能甲板的排序列表.
鉴于对合理现代硬件(即可用的几千兆字节RAM)的上述限制,进行此类查询的最有效数据结构是什么?
已知K甲板:
d1 = [1, 4, 6, 3, 4]
d2 = [5, 3, 3, 9, 5]
d3 = [5, 10, 4, 10, 1]
d4 = [3, 7, 1, 8, 5]
Run Code Online (Sandbox Code Playgroud)在第1轮,我透露对手使用卡#5; 因此,我的候选人名单减少到:
d2 = [5, 3, 3, 9, 5] - score 2
d3 = [5, 10, 4, 10, 1] - score 1
d4 = [3, 7, 1, 8, 5] - score 1
Run Code Online (Sandbox Code Playgroud)
d2在结果中排名高于其余部分,因为该套牌中有双5,所以它可能更有可能是
在第2轮,我透露对手使用卡#1; 候选人名单减至:
d3 = [5, 10, 4, 10, 1] …Run Code Online (Sandbox Code Playgroud)