字典顺序的定义?

Definition of a lexicographical order?

我目前正在阅读有关 std::next_permutation 函数的内容并遇到术语 "lexicographical order"。在特定的时间,我对这个术语没有任何经验,所以 google 搜索了这个并且只发现了这种类型订单的一些神秘定义,包括 wiki 文章(至少它们对我来说)。

那么有人可以帮助我理解这一点吗? "good" 你对这个词的定义是什么?

关于 wiki article - 他们声称 词典顺序 也被称为 字母顺序 但当我继续阅读时,我明白他们是不一样的。因此,正在进行的比较让我有点困惑。

大多数开箱即用的字符串排序算法都实现为字典排序。 (底部有更多详细信息)

Example 1:

随机元素:

['A','a','a','B','b','C','c','d','E']

按字典顺序排序:

['A','B','C','E','a','a','b','c','d']

Example 2:

不同长度的随机元素:

['a', 'b', 'aa', 'c', 'ddd', 'f']

按字典顺序排序:

['a', 'aa', 'b', 'c', 'ddd', 'f']

Difference between lexicographic and natural sort

input = ["z1.txt", "z10.txt", "z3.txt", "z100.txt", "z101.txt"]

lexicogrpahic : ['z1.txt', 'z10.txt', 'z100.txt', 'z101.txt', 'z3.txt']
natural: ['z1.txt', 'z3.txt', 'z10.txt', 'z100.txt', 'z101.txt']

我们可以在这里详细介绍,但很多伟大的人已经对此做出了很好的解释:

1) Does Python have a built in function for string natural sort?

2) https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/

通俗地说,这意味着字母顺序。实际上,您将根据字符串的基础数字(通常是 ASCII)表示形式逐个字符地对字符串进行排序。

在正常的英语用法中,当我们按字母顺序对单词进行排序时,我们采用了两个规则:

  • 如果两个单词的第一个字母相同,我们比较第二个。如果第二个字母相同,我们比较第三个,依此类推。最后,如果第一个不同的字母出现在相应字母之前,则一个单词出现在另一个单词之前。

  • 如果两个词相同,直到较短的词的长度,较短的词在前。

所以 "Tom" 在 "Tooth" 之前。第一个字母相同 ("T"),第二个字母相同 "o",但第三个字母 diff 和 "m" 排在 "o" 之前。因此 "Tom" 出现在 "Tooth".

之前

"Tom" 出现在 "Tomas" 之前,因为这两个词的前三个字母相同 "Tom" 并且 "Tom" 比 "Tomas" 短。

字典顺序只是字母顺序,对非字母值进行了概括。考虑一系列值,不一定是字母:

(1,5,10) 在 (1,6,3) 之前,因为“5”在“6”之前。

(1,5,10) 在 (1,5,10,15,20) 之前,因为 (1,5,10) 比 (1,5,10,15,20) 短。

如果序列的元素具有某些特定含义,则字典顺序特别有用,较早的值具有较高的优先级。例如,考虑这些时间:9:13 AM 和 8:25 AM。如果我们用序列 (9,13) 和 (8,25) 表示它们,那么 (8,25) 在 (9,13) 之前,因为 8 在 9 之前。如果时间相同怎么办?例如,(9,13) 在 (9,45) 之前,因为 13 在 45 之前。如您所见,字典顺序允许小时字段具有比分钟字段更高的优先级。