3

我目前正在阅读有关std::next_permutation函数的信息,并遇到了“字典顺序”一词。在特定的时间,我对这个术语没有任何经验,所以谷歌搜索了这个,只发现这种类型的订单有点神秘的定义,包括 wiki 文章(至少对我来说是这样)。

那么有人可以帮助我理解这一点吗?对您来说,这个术语的“好”定义是什么?

关于wiki 文章- 他们声称字典顺序也称为字母顺序,但当我继续阅读时,我了解到它们并不相同。因此,正在进行的比较让我有点困惑。

4

3 回答 3

8

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

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

  • 如果两个单词在较短单词的长度内相同,则较短的单词在前。

所以“Tom”出现在“Tooth”之前。第一个字母相同(“T”),第二个字母相同“o”,但第三个字母不同,“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 和上午 8:25。如果我们用序列 (9,13) 和 (8,25) 来表示这些,那么 (8,25) 在 (9,13) 之前,因为 8 在 9 之前。如果时间相同怎么办?例如,(9,13) 在 (9,45) 之前,因为 13 在 45 之前。如您所见,字典顺序允许小时字段比分钟字段具有更高的优先级。

于 2017-11-24T19:24:39.413 回答
3

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

示例 1:

随机元素:

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

按字典顺序排序:

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

示例 2:

不同长度的随机元素:

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

按字典顺序排序:

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

字典排序和自然排序之间的区别

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) Python 是否有用于字符串自然排序的内置函数?

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

于 2017-11-24T19:16:12.010 回答
2

通俗地说,这意味着字母顺序。在实践中,您将根据字符串的底层数字(通常是 ASCII)表示逐个字符对字符串进行排序。

于 2017-11-24T19:17:02.560 回答