Алфавитно-сортировочное
Dec. 20th, 2012 12:32 pmДопустим, есть у нас набор слов. Поставим задачу научиться их сортировать. И даже, для простоты, допустим, что все эти слова используют один и тот же алфавит и мы должны научиться их сортировать согласно правилам конкретного языка на конкретный момент времени, глядя лишь на составляющие их алфавитные символы.
Оказывается, эта задача неразрешима без использования словаря или ручной правки подлежащего сортировке набора строк.
Есть такой датско-норвежский алфавит:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å
В нем, как нетрудно видеть, буква Å (введенная вместо буквосочетания "aa" в норвежском в 1917 г., а в датском - в 1948 г., с окончательной фиксацией позиции в алфавите в 1955 г.) сортируется после буквы Z. Это несложно поддержать алгоритмически.
В отличие от норвежского, в датском языке в именах собственных, включая местные географические названия, новая буква не используется, а пишется Aa, но в целях сортировки диграф рассматривается как атомарная буква Å. Поэтому, например, в алфавитном списке городов мира датский город Aabenraa будет идти после города Zagreb. Это тоже несложно поддержать алгоритмически.
Но! В именах собственных не-скандинавского происхождения Aa рассматривается, как две отдельные буквы A, поэтому правильный алфавитный порядок для городов Aabenraa, Aachen, Zagreb таков: Aachen, Zagreb, Aabenraa. Для автоматизации такой сортировки между буквами, которые должны рассматриваться по отдельности, а не как диграф, вставляется символ U+034F с неочевидным названием COMBINING GRAPHEME JOINER, ведь он ничего не соединяет, а даже наоборот. Правильнее было бы назвать его DIGRAPH SEPARATOR, но уже поздно.
И на закуску: до 1980 г. в датском языке буква W считалась графическим вариантом буквы V, поэтому лексикографический порядок был такой, например: Wales, Vallø, Washington, Wedellsborg, Vendsyssel (представьте себе что-нибудь подобное в русском: "шапка, щётка, щука, шутка").
В 1980 г. стали считать V и W отдельными буквами, но упоминаемое в детской алфавитной песенке количество букв осталось прежним - 28, а не 29.
Так что было бы желание, а добавление (возвращение) в русский алфавит каких-нибудь букв не будет ни беспрецедентным, ни сильно оторванным по времени от прецедентов изменения алфавитов языков с долгой историей.
Оказывается, эта задача неразрешима без использования словаря или ручной правки подлежащего сортировке набора строк.
Есть такой датско-норвежский алфавит:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å
В нем, как нетрудно видеть, буква Å (введенная вместо буквосочетания "aa" в норвежском в 1917 г., а в датском - в 1948 г., с окончательной фиксацией позиции в алфавите в 1955 г.) сортируется после буквы Z. Это несложно поддержать алгоритмически.
В отличие от норвежского, в датском языке в именах собственных, включая местные географические названия, новая буква не используется, а пишется Aa, но в целях сортировки диграф рассматривается как атомарная буква Å. Поэтому, например, в алфавитном списке городов мира датский город Aabenraa будет идти после города Zagreb. Это тоже несложно поддержать алгоритмически.
Но! В именах собственных не-скандинавского происхождения Aa рассматривается, как две отдельные буквы A, поэтому правильный алфавитный порядок для городов Aabenraa, Aachen, Zagreb таков: Aachen, Zagreb, Aabenraa. Для автоматизации такой сортировки между буквами, которые должны рассматриваться по отдельности, а не как диграф, вставляется символ U+034F с неочевидным названием COMBINING GRAPHEME JOINER, ведь он ничего не соединяет, а даже наоборот. Правильнее было бы назвать его DIGRAPH SEPARATOR, но уже поздно.
И на закуску: до 1980 г. в датском языке буква W считалась графическим вариантом буквы V, поэтому лексикографический порядок был такой, например: Wales, Vallø, Washington, Wedellsborg, Vendsyssel (представьте себе что-нибудь подобное в русском: "шапка, щётка, щука, шутка").
В 1980 г. стали считать V и W отдельными буквами, но упоминаемое в детской алфавитной песенке количество букв осталось прежним - 28, а не 29.
Так что было бы желание, а добавление (возвращение) в русский алфавит каких-нибудь букв не будет ни беспрецедентным, ни сильно оторванным по времени от прецедентов изменения алфавитов языков с долгой историей.