2013-10-20 3 views
2

Мне нужна реализация функции хэш-функции, сохраняющая местность для C# (или, возможно, альтернативное решение). Я хотел бы выяснить способ сопоставления строк (например, аналогичных токенов последовательности генов, иногда немного отличающихся друг от друга) в те же самые ведра с использованием порога подобия. Например, если два токена последовательности генов имеют значение Левенштейна редактирования, то есть < заданный порог 5, 10, 25 и т. Д. ... Я хотел бы присвоить их одному и тому же ведру/категории. Тем не менее, я не могу использовать расстояние редактирования, так как категории токенов не известны заранее, и вычисление требует больших затрат. Мне нужна очень эффективная локация, сохраняющая хеш-функцию (или альтернативное решение), которая позволит мне определить ведро, самое близкое к хэш-значению, на основе порогового значения или создать новое ведро, когда не существует достаточно достаточно ведра. До сих пор я даже не смог реализовать одну функцию сохранения хэширования в C#, только публикации. Я подумал, что попрошу, прежде чем пытаться написать свое.Местность Сохранение функции хэша для C#

+0

Я так мало знаю о вашей проблеме, что мой комментарий, вероятно, не поднимается до уровня «немой», но я все равно его выброшу. Я предполагаю, что ваши входные данные имеют ограниченное пространство символов (т. Е. Только «ABCDEF»). Если вы создаете точку в x-мерном пространстве, где x - количество символов в пространстве символов, подсчитывая количество вхождений каждого символа, затем используйте расстояние между точками, чтобы определить вероятность сходства. Отфильтруйте точки, используя порог минимального расстояния, чтобы определить пары, которые стоят расчета расстояния Левенштейна. – William

+0

Последовательности генов обычно содержат 4 символа (T, A, G или C). Если бы я мог найти способ превратить эту четырехмерную «точку» в числовое значение, это может сработать. Мне нужно преобразовать токен гена в число и знать, какой ведро должен быть помещен маркер гена, основанный на его числе. т. е. если вычисленная «точка» равна 10 990, я бы просто поместил это значение в ближайший ковш на основе заданной чувствительности. Если ведра были разделены на 100, то 10 990 были бы помещены в ведро 11 000, без каких-либо корректировок расстояния редактирования, которые будут выполняться против любых существующих ковшей. –

+0

Наиболее важным моментом является то, что результирующее число должно поддерживать исходный порядок сортировки входных токенов последовательности генов (или приближаться довольно близко). Это очень похожие маркеры последовательности генов, которые отображаются в одни и те же ведра, без необходимости расчета расстояния. –

ответ

0

Может возникнуть некоторый фонетический алгоритм (например, http://en.wikipedia.org/wiki/Soundex).

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

+0

Я кратко рассмотрел это, но Soundex() не работает хорошо для ограниченного набора символов, подобного последовательностям генов. Например, AAAA = A000, AAAT = A300, TAAA = T000, но все три разделены только 1 символом. –

Смежные вопросы