OberonCore
https://forum.oberoncore.ru/

Лексикографическое сравнение строк
https://forum.oberoncore.ru/viewtopic.php?f=47&t=3718
Страница 1 из 1

Автор:  Иван Кузьмицкий [ Среда, 14 Декабрь, 2011 16:15 ]
Заголовок сообщения:  Лексикографическое сравнение строк

Это нужно для выстраивания слов в алфавитном порядке.

Что-то под рукой не нашлось ничего подходящего, но перед тем как "изобрести велосипед", решил спросить у сообщества - может, кто-то уже делал подобное?

Автор:  Пётр Кушнир [ Среда, 14 Декабрь, 2011 16:58 ]
Заголовок сообщения:  Re: Лексикографическое сравнение строк

Настал момент наполнить Strings содержимым, соответствующим названию
upd: но не в этот раз :)

Автор:  Евгений Темиргалеев [ Среда, 14 Декабрь, 2011 17:02 ]
Заголовок сообщения:  Re: Лексикографическое сравнение строк

a$ < b$, a$ = b$ --- это и есть лексикографическое сравнение. Самый простой вариант. Возможно эти две операции с т.з. скорости будут достаточны и можно ничего больше не писать.

Для упорядочивания выгоднее использовать rel = signum(a - b).
rel = -1 -> a < b
rel = 0 -> a = b
rel = 1 -> a > b
rel можно считать для строк по аналогии, ориентируюясь на лексикографическое сравнение a<b,.... В этом случае операция "сравнения" (проход по строке) одна.

Инструкция x86, генерируемая ББ для сравнения "строк", rel выдаёт, но в КП (на выском уровне) получить его нельзя. Вопрос же писать высокоуровневый цикл для вычисления rel, либо использовать две операции a$ < b$, a$ = b$, нужно решать исходя из числа операций и длины строк.

Автор:  Иван Кузьмицкий [ Среда, 14 Декабрь, 2011 17:24 ]
Заголовок сообщения:  Re: Лексикографическое сравнение строк

Воистину, далеко ходить не надо! Тем более, что ББ 1.6, юникодный. Евгений, спасибо, а мне надо чаще заглядывать в сообщение о языке :)

Одна небольшая проблема - этот оператор неправильно распознаёт букву Ё. Хотя это проблема юникода, там ё стоит в конце последовательности нижнерегистрового алфавита, а Ё - в начале последовательности верхнерегистрового алфавита. Да и не важно, слов на Ё немного, и даже если они будут не так отсортированы - ничего страшноо не случится.

P.S. Замеров скорости сравнения ещё не делал. Как-нибудь на досуге померяю, ради интереса. Сейчас задачи оптимизировать просто не стоит - списки людей относительно небольшие.

Автор:  Александр Шостак [ Среда, 14 Декабрь, 2011 17:30 ]
Заголовок сообщения:  Re: Лексикографическое сравнение строк

Как вариант WinApi CompareStringW. Очень много моментов учитывается, в отличие от бинарного сравнения.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/