Вы ищете каждое слово или каждое слово в английском словаре? Используете ли вы стандартные слова - например, из Оксфордского словаря английского языка или включены также сленговые слова? Я предполагаю, что я получаю: «Насколько велика ваш словарь»? Вы можете использовать хеш MD5, который имеет теоретическую возможность столкновения - хотя 1 в миллиардах хэшей, которые могут столкнуться - хотя, я не могу сказать, что я бы понял цель использования хэша с использованием фактического слова. Если, возможно, вы не хотите рассчитать последовательную клиентскую сторону, чтобы ссылаться на правильный элемент словаря на стороне сервера, не анализируя словарь, ищущий его серийный номер. Конечно, слово, очевидно, должно быть достаточно уникальным, чтобы мы могли понять его как людей, и мы более эффективны при анализе смысла слов, чем компьютер делает то же самое.
Вы хотите разделить слова, которые выглядят одинаково, но произносятся по-другому? Слова, которые выглядят и звучат одинаково, но имеют разные значения? Если это так, то вы собираетесь отклеиваться хешем, так как одно и то же написание с другой семантикой даст такой же хэш, поэтому для этого сценария это не сработает. В этом случае вам понадобится какая-то инкрементная система. Если вы добавите слова после факта в словарь, они будут добавлены в конце и просто будут указаны следующий порядковый номер в последовательности? Что, если это слово написано так же, как и другое слово, но звучит по-другому или звучит одинаково, но имеет другую семантику? Что тогда?
Я предполагаю, что это зависит от цели сериализации относительно того, что будет наиболее подходящим выходом для вашего серийного номера и, следовательно, что будет наиболее эффективным алгоритмом.
Самый эффективный алгоритм, вероятно, состоит в том, чтобы разделить словарь на одно и то же количество кусков, поскольку у вас есть процессоры, и у каждого потока есть поток на каждом процессоре. Сериализуйте слова в своем блоке, рекомбинируя вывод из каждого потока в конце. Это (теоретически) будет работать со скоростью чуть медленнее, чем O (n/число процессоров) в реальном мире, однако я думаю, что для математической корректности это все равно O (n), потому что вам все равно придется разобрать весь словарь один раз для сериализации каждое слово.
Я думаю, что самый безопасный способ пойти: (? По алфавиту)
- Беспокойство о том, что у вас есть в настоящее время
- Заказать их в наиболее логической последовательности
- Число их в последовательности
- Добавить новые слова (независимо от того, написаны они одинаковые или нет и имеют разную семантику) в конце; дать им следующее число в последовательности, независимо от их законного места в словаре в алфавитном порядке.
Таким образом, вам не нужно беспокоиться о том, чтобы оставить пробелы в серийных номерах для учета вставок между словами, вам не нужно беспокоиться о переиндексировании любых зависимых данных для учета изменений в индексах, когда слова вставлен, вы просто продолжаете, как обычно. Вам не нужно беспокоиться о столкновениях, и вы по-прежнему получаете наиболее эффективный механизм индексирования для целей хранения, что означает, что вы не храните хэши MD5, которые потенциально дольше, чем оригинальное слово, что не имеет смысла для использования в реальном мире.
Если вам нужно получить доступ к словарю в алфавитном порядке, просто сортируйте по слову, в противном случае - нет.
Я все еще думаю, что я в недоумении относительно необходимости сериализации слова - за исключением целей хранения, где вы можете хранить словарь и связывать таблицы с помощью ключа слова.
Какое требование, зачем вам эти серийные номера. –
Вы можете использовать само слово. Это базовое представление 26. –
На самом деле я планирую написать поисковый индексатор для небольшой поисковой системы для настольных компьютеров. Для этого приложения я хочу преобразовать каждое слово в уникальный серийный номер. –