【问题标题】:scoreboard with efficient time?有效时间的记分牌?
【发布时间】:2016-09-29 20:05:25
【问题描述】:

我想维护一个计分板,其中包含根据他们的分数排序的 n 个玩家,我所做的是: 当玩家 i 获得 x 分时(如果他还不是顶级玩家),我将他的分数与他上方玩家的分数进行比较,必要时交换它们,然后我重复此操作,直到我发现他上方玩家的分数大于他的分数或直到他到达列表的顶部。 问题是它的最坏情况时间为 O (n),可以用 O (log n) 之类的方式完成吗??

【问题讨论】:

  • 在实践中,永远不会达到最坏的情况,而 one-element-bubble-sort 是你能做的最好的。一旦计分板被填充并且相对稳定,一个条目的典型排名变化将主要是几个地方。并且作为奖励:参考的局部性比树或二分搜索更好。

标签: algorithm data-structures


【解决方案1】:

维护一个balanced search tree,映射球员得分。当玩家n的分数变化z时,

  1. 找到n的当前值,比如说y

  2. 删除 n

  3. 的条目
  4. 插入从 n 到 y + z

  5. 的映射

复杂度是对数的。

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多