Группировка строк лексикографически (питон) - PullRequest
1 голос
/ 12 февраля 2012

У меня есть N строк, которые я хочу разделить лексикографически на M четных блоков (строка +/- 1).Кроме того, N >> M.

Прямой способ состоит в том, чтобы отсортировать все строки и разбить результирующий список на сегменты M.

Я хотел бы вместо этого приблизить это путем маршрутизации каждой строкиперед его созданием в полный список.

Существует ли быстрый и питонный способ назначения строк в сегменты?По сути, я ищу строковый эквивалент целочисленного оператора по модулю.Возможно хеш, который сохраняет лексикографический порядок?Это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 25 августа 2012

Хэш по определению не сохраняет ни одного порядка.

И я не думаю, что есть какой-нибудь питонический способ сделать это.

Вы можете просто создать словари (которые в основном являются функциями хеширования) и продолжать добавлять строку в каждый стиль циклического перебора, но это не сохранит ни одного порядка.

0 голосов
/ 06 марта 2012

Вы можете отсортировать по первым двум символам строки, или что-то в этом роде.

Скажем, M=100, поэтому вы должны разделить символы на sqrt(M) области, и каждый должен указывать надругие sqrt(M) областей, затем для каждой полученной строки вы можете сравнить первый символ, чтобы решить, в какую область направить строку и снова для второго символа, что-то вроде дерева с корзинами в виде листьев и сравнений в виде узлов.

...