Data structures 用于存储两人游戏结果的最具时间效率的数据结构
如果有两个玩家,一个是赢家,一个是输家,那么在我需要的情况下,存储这些数据的最有效方式是什么Data structures 用于存储两人游戏结果的最具时间效率的数据结构,data-structures,Data Structures,如果有两个玩家,一个是赢家,一个是输家,那么在我需要的情况下,存储这些数据的最有效方式是什么 检查一个给定的玩家是否击败了另一个给定的玩家 列出一个给定玩家击败的所有玩家 列出给定玩家输给的所有玩家 列出一个给定玩家玩过的所有玩家 列出所有游戏结果 我曾考虑使用关键玩家的散列图,并为输家列表赋值,但当列出一个玩家输给的所有玩家时,这似乎并不有效,因为时间复杂度为n^2,而散列图,其中键为玩家,值为输家列表或{对手,结果}将是最容易实现的解决方案,我想说它不是最节省空间的解决方案 对于每个用户
- 检查一个给定的玩家是否击败了另一个给定的玩家
- 列出一个给定玩家击败的所有玩家
- 列出给定玩家输给的所有玩家
- 列出一个给定玩家玩过的所有玩家
- 列出所有游戏结果
我曾考虑使用关键玩家的散列图,并为输家列表赋值,但当列出一个玩家输给的所有玩家时,这似乎并不有效,因为时间复杂度为n^2,而
散列图
,其中键为玩家,值为输家列表或{对手,结果}
将是最容易实现的解决方案,我想说它不是最节省空间的解决方案
对于每个用户,您必须维护一个HashMap
,并且该映射将具有重复的条目。例如,如果一个玩家a
玩了B
并且赢了,a
的HashMap
将有一个{B,“赢”}
的条目,而玩家B
将有一个{a,“输”}
的条目,这不是必需的,因为我们可以暗示如果玩家a
赢了,玩家B
一定输了
我建议使用图形
数据结构来解决这个问题。一个图形G=(V,E)
将V
作为一组用户,而E
则作为一组边,这些边在用户之间具有一个以上的属性,玩家获胜
以下是获得更好想法的视觉表示:
通过此实现,您可以避免在出现HashMap
查询:
1.检查一个给定的玩家(X)
是否击败了另一个给定的玩家(Y)
仅从
X
执行一级DFS
。检查当前播放机是否为Y
。如果播放机是Y
,请检查边缘值。如果边缘值为X
,X
获胜,否则Y
获胜。如果Y
不在边缘列表中,则玩家X
从未玩过Y
时间复杂度:
O(E)
其中E
是节点X
上发生的边缘列表
2.列出某个特定玩家(X)击败的所有玩家从
X
执行一级DFS
。检查边值。如果边值为X
,X
获胜,则将边另一端的节点添加到列表中。时间复杂度:
O(E)
其中E
是节点X
上的边事件列表
3.列出一个给定玩家(X)输给的所有玩家
与2相同
4.列出给定玩家与之一起玩过的所有玩家
与2相同
5.列出所有比赛结果
执行完整的DFS。
时间复杂度:
O(E)
其中E
是边的列表。与其是玩家的哈希图和输家的值列表,不如是玩家的哈希图和{对手,结果}的值lis。这样你就能知道谁是球员,以及每场比赛的结果。