字符串的字典序

设想一本英语字典里的单词,何者在前何者在后?
显然的做法是先按照第一个字母、以 a、b、c……z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。
如果比到最后两个单词不一样长(比如,sigh 和 sight),那么把短者排在前。
通过这种方法,我们可以给本来不相关的单词强行规定出一个顺序。“单词”可以看作是“字母”的字符串,而把这一点推而广之就可以认为是给对应位置元素所属集合分别相同的各个有序多元组规定顺序:下面用形式化的语言说明。

给定两个偏序集AB,(a,b)和(a′,b′)属于笛卡尔积A×B,则字典序定义为
(a,b) ≤ (a′,b′) 当且仅当a<a′ 或 (a=a′ 且bb′).
结果是偏序。如果AB是全序, 那么结果也是全序。

在绝大多数语言中,都提供了比较两个字符串大小的方法,比较的实际上就是两个字符串的字典序。例如在 C++ 语言 中:

cout << ("abc" < "ace") << endl;

就会输出true

而在 Java 语言 中:

System.out.println("abc".compareTo("ace"));

会输出-1
这个数是两个字符串第一个不一样的位置的两个字符的 ASCII 值之差,如果小于零则说明第一个字符串小于第二个字符串。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注