我目前正在阅读有关std::next_permutation函数的信息,并遇到了“字典顺序”一词。在特定的时间,我对这个术语没有任何经验,所以谷歌搜索了这个,只发现这种类型的订单有点神秘的定义,包括 wiki 文章(至少对我来说是这样)。
那么有人可以帮助我理解这一点吗?对您来说,这个术语的“好”定义是什么?
关于wiki 文章- 他们声称字典顺序也称为字母顺序,但当我继续阅读时,我了解到它们并不相同。因此,正在进行的比较让我有点困惑。
我目前正在阅读有关std::next_permutation函数的信息,并遇到了“字典顺序”一词。在特定的时间,我对这个术语没有任何经验,所以谷歌搜索了这个,只发现这种类型的订单有点神秘的定义,包括 wiki 文章(至少对我来说是这样)。
那么有人可以帮助我理解这一点吗?对您来说,这个术语的“好”定义是什么?
关于wiki 文章- 他们声称字典顺序也称为字母顺序,但当我继续阅读时,我了解到它们并不相同。因此,正在进行的比较让我有点困惑。
在正常的英语用法中,当我们按字母顺序对单词进行排序时,我们采用两个规则:
如果两个单词的第一个字母相同,我们比较第二个。如果第二个字母相同,我们比较第三个,依此类推。最后,如果第一个不同的字母在相应的字母之前,则一个词在另一个之前。
如果两个单词在较短单词的长度内相同,则较短的单词在前。
所以“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 之前。如您所见,字典顺序允许小时字段比分钟字段具有更高的优先级。
大多数开箱即用的字符串排序算法都实现为字典排序。(底部有更多细节)
示例 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']
我们可以在这里详细介绍,但很多伟大的人已经为此做出了很好的解释:
2) https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/
通俗地说,这意味着字母顺序。在实践中,您将根据字符串的底层数字(通常是 ASCII)表示逐个字符对字符串进行排序。