У меня есть программа, в которой мне нужно рассчитать несколько раз расстояние Левенштейна между парами слов (одно из них зафиксировано) и несколько раз может варьироваться от примерно От 1000 до 120000 для каждого фиксированного слова. Поскольку я хочу оптимизировать эту программу, насколько я могу подумать о реализации этих вычислений в сборке. Проблема в том, что я ничего не знаю о сборке, кроме теории, и что она может представлять собой большие улучшения скорости. Может ли кто-нибудь помочь мне или предоставить мне код сборки для этого расстояния? Кроме того, как я могу вызвать сборку из модуля C#?Levenshtein (или Damerau-Levenshtein, если возможно!) Distance is Assembly
0
A
ответ
1
Вы можете легко использовать BK-tree, чтобы создать дерево поиска, если Levenshtein достаточно. Дамарау-Левенштейн can not be used with a metric tree.
Вам не нужно писать эту реализацию на ассемблере или C#, вы можете далеко продвинуться, используя небезопасный код и указатели.
- Чтение и кэш
str.Length
, те вызовы методов (наиболее вероятно, встраиваемые/Оптимизированные) - Access ваши строки с указателями.
- Вы можете создать свою таблицу/массив/состояние как int [rows * cols] вместо int [rows] [cols] и использовать указатели для чтения/записи.
int[] state = new int[rows*cols]
fixed(int* ptrState=state)
- Вы действительно не нужны больше, чем две строки в вашей таблице состояний, то есть тот, который вы прочитаны, и тот, который вы пишете в. Затем поменяйте указатели и прочитайте то, что вы только что написали.
- Я верю, что можно оптимизировать путем удаления идентичных префиксов/суффиксов
L('catz', 'cats') == L('z', 's') == 1
L('rats', 'cats') == L('r', 'c') == 1
Смежные вопросы
- 1. Damerau - Levenshtein Distance, добавив порог
- 2. Добавление исключений из алгоритма Levenshtein-Distance-like
- 3. Получить позицию подпоследовательности с использованием Levenshtein-Distance
- 4. Подмножество с использованием grep для включения levenshtein distance?
- 5. Android & fuzzy matching, n-gram, and Levenshtein distance
- 6. Найти почти дубликаты разделенных запятыми списков, используя Levenshtein distance
- 7. 2 всего текста сходство с использованием levenshtein distance
- 8. PHP Levenshtein on Query Result
- 9. C# - Assembly GetType is everytime null
- 10. Is JQuery * компилятор * возможно?
- 11. алгоритм расстояния levenshtein
- 12. Levenshtein search
- 13. Как я могу адаптировать алгоритм Levenshtein Distance для ограничения совпадений одним словом?
- 14. Levenshtein Расстояние для списка
- 15. Использование python-Levenshtein без установки
- 16. Levenshtein Редактировать Расстояние не вычисляется Расстояние редактирования
- 17. Levenshtein-distance есть другой способ, а не сравнивать слова с ошибками со всем словарем слова
- 18. Solr IS IN поиск возможно?
- 19. Модуль Levenshtein в python не работает
- 20. Numpy - строительная матрица расстояний Jaro (или Levenshtein) с использованием numpy.fromfunction
- 21. levenshtein alternative
- 22. Python multiprocessing edit-distance расчет
- 23. Fast Levenshtein Distance (и Jaro Winkler) в R для числовых векторов
- 24. Может ли кто-нибудь обнаружить ошибку в моей реализации Damerau-Levenshtein Distance?
- 25. Elasticsearch: Сортировка Levenshtein
- 26. Levenshtein Цикличность расстояния в Python
- 27. Is std :: iter :: FlatMap.clone() возможно?
- 28. Фильтровать массив, если is is empty - javascript
- 29. Настройки стоимости Levenshtein
- 30. Возможно ли цепочка hasClass() или is() в условном выражении?
Хороший C компилятор может производить производительность, близкую к сборке. Кроме того, вы можете попросить его создать промежуточный файл сборки, чтобы вы могли проверять и обнаруживать грубые неэффективности (обычно вызванные страхами псевдонимов компилятора: вы можете исправить их на уровне C, скопировав некоторые глобальные переменные на локальные переменные, нет псевдонима). –
Возможно, вам следует реализовать это на C# сначала (или использовать библиотеку C#), прежде чем изучать язык ассемблера. В конце концов, код C# может быть достаточно быстрым для ваших нужд. –
Учитывая, что вы не знаете сборки, это, вероятно, не самый лучший выбор, так как оптимизация кода ассемблера требует хороших знаний о сборке и оборудовании. –