字典顺序的定义?

时间:2017-11-24 19:13:33

标签: c++ sorting lexicographic-ordering

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

那么有人可以帮我理解这个吗?你对这个术语的“好”定义是什么?

关于wiki article - 他们声称​​字典顺序也称为字母顺序,但在我继续阅读时,我理解他们不是相同。因此,正在进行的比较让我感到困惑。

3 个答案:

答案 0 :(得分:3)

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

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

  • 如果两个单词的长度与短单词的长度相同,则较短的单词首先出现。

所以“汤姆”来到“牙齿”之前。第一个字母相同(“T”),第二个字母相同“o”,但第三个字母diff和“m”在“o”之前。因此,“汤姆”出现在“牙齿”之前。

“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 :(得分:2)

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

  

示例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)Does Python have a built in function for string natural sort?

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

答案 2 :(得分:2)

用外行人的话说,这意味着按字母顺序排列。在实践中,您将根据其基础数字(通常为ASCII)表示逐字符对字符串进行排序。