Jira的Lexorank算法用于新故事

时间:2016-11-21 11:20:02

标签: algorithm sorting jira jira-agile lexorank

我希望创建一个大型项目列表,以便轻松插入新项目,并轻松更改该列表中项目的位置。更新项目的位置时,我想更改关于项目顺序的尽可能少的字段。

经过一番研究,我发现Jira的Lexorank算法满足了所有这些需求。 Jira的每个故事都有一个等级字段&#39;包含由3部分构成的字符串:<bucket>|<rank>:<sub-rank>。 (我不知道这些部分是否有实际名称,为了便于参考,这就是我所说的)

有效排名字段的示例:

  • 0|vmis7l:hl4
  • 0|i000w8:
  • 0|003fhy:zzzzzzzzzzzw68bj

将卡片拖到0|vmis7l:hl4以上时,新卡片将获得等级0|vmis7l:hl2,这意味着只需更新此新卡片的等级字段,同时始终可以对整个列表进行排序在这个排名领域。这是相当聪明的,我无法想象Lexorank是唯一使用它的算法。

  1. 这个子排名中使用的这种排序方法是否有名称?
  2. 我的问题与在Jira中创建新卡片有关。每张新卡都以空的子排名开头,并且总是选择排名,使得新卡位于列表的底部。我创建了一堆新故事只是为了看看排名会如何变化,而且排名总是增加8(基数为36)。

    1. 有没有人更具体地知道如何生成新卡的等级?为什么它会增加8?
    2. 我只能想象,经过一段时间(2.7亿张牌)之后,没有更多的牌可以生成,系统需要重新计算所有牌的等级字段,以便为其他牌号腾出空间。

      1. 是否有其他需要重新计算所有等级字段的触发器?
      2. 我认为水桶在重新计算中起作用。我想知道怎么样?

1 个答案:

答案 0 :(得分:0)

  1. 我们在这里谈论一种特殊的索引编制。这不是排序;它只是准备以某种顺序结束商品,以防有人碰巧对它们进行分类(通过任何分类算法)。我知道这种索引的变体已经在图书馆中使用了数十年,甚至是几个世纪,以确保属于同一类却缺乏通用书名的书籍最终在书架上紧挨着,但我从未听说过它。

  2. 也许可以明智地选择8作为折衷方案,甚至可以通过分析典型的用例。考虑以下情况:如果选择较小的增量,则e。 G。 1,则所有票证的排名将类似于[a, b, c, …]。如果您以正确的顺序创建大量票证(最多26张),这将非常有用,因为这样您的等级字段会很小(一个字母)。但是,一旦您在其他两个票证之间移动票证,则必须添加一个字母:[a, b],并在它们之间添加新的票证:[a, an, b]。如果您希望拥有很多,最好在等级[a, i, q, …]之间留出空隙,然后另外一张票也可以得到一个字母:[a, e, i, q, …]。但是,当然,如果您现在从一开始就以正确的顺序创建了许多票证,您很快就会用光字母:[a, i, q, y, z, za, zi, zq, …]。 8可能是一个很好的值,它可以在票证之间留出足够的空隙,而又不会过早增加许多字母的需要。请记住,其他情况(也许不是手动创建的Jira票证)可能会使其他值更合理。

  3. 您是对的,现在会重新计算等级字段,然后,Lexorank称其为“平衡”。基本上,平衡是在以下三种情况之一中发生的:①等级用尽(达到最大值),②等级是由于用户对票券的排名过于靠近([a, b, i]而造成的) ab),以及③在管理页面中手动触发平衡。 (实际上,根据演示文稿,Lexorank最多允许三个字母等级,因此“太靠近”可以像aaaaab之类,但思想是相同的。)

  4. 在平衡期间,等级的部分会增加,因此混乱的[0|a, 0|an, 0|b]可以再次变得干净利落[1|a, 1|i, 1|q]brownbag presentation about Lexorank(在评论中由@dandoen链接)提到的循环使用,因此2取模3而不是恒定的增量(0→1→2→3→…)。 ,因此它将在2之后回到0(0→1→2→0→…)。当比较等级时,排序算法可以认为0“大于” 2(承认这不是纯粹的词典编排)。如果现在平衡算法向后工作(首先对最后一个票证重新排序),则将始终保持排序顺序不变。 (这只是一个侧面,这就是为什么我将解释保持较小的原因,但是如果这很有趣,请询问,我将对此进行详细说明。)

旁注:Lexorank还会跟踪等级的最小值和最大值。对于算法本身的功能,这不是必需的。