Shabunoff
@Shabunoff

Как сравнить несколько последовательностей цифр между собой?

Есть набор (например 5000 штук) последовательностей из 15 цифр. Эти цифры 1, 2 или 3. Например:
121231321223212

Нужно сравнить каждую из последовательностей с каждой и "запомнить" количество совпадений между ними.

Например последовательности:
111111111111121
111111111111112
Имеют 13 совпадений.

Пробовал и перебор массива (каждая цифра - отдельный элемент) и библиотеку fuzzywuzzy.

Хотелось бы побыстрее, очень медленно.
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 4
longclaps
@longclaps
Зачем "запоминать количество совпадений между ними", когда его можно мгновенно вычислить:
>>> import operator
>>> sum(map(operator.eq,'111111111111121','111111111111112'))
13
Ответ написан
dimonchik2013
@dimonchik2013
КАКОЙ ТЫ ДИВАН?
hamming distance чем меньше, тем больше совпадений
Ответ написан
trapwalker
@trapwalker
Программист, энтузиаст
А какие конкретно у вас пожелания на счет скорости? У вас сложность квадратичная, 25 миллионов сравнений. Ну можно бинарные операции подключить, можно последовательности как-то обрабатывать, например сортировать. Однако в этой формулировке не ясно что не так и какие у вас получились скорости. От чего-то ж надо отталкиваться. Покажите код и вам его здесь пооптимизируют.
А сейчас задача выглядит как "пойди туда - не знаю куда".
Так-то можно упороться и на шейдерах это решать за счет видеокарты. Вопрос только в том, для чего все эти извращения. Если простая учебная задача - то на то она и задача, чтобы самому решать, а не на Q&A, а если практическая, то попахивает проблемами в архитектуре на более ранних этапах. Не ясна причина почему нужно быстрее, это часто повторяющаяся задача? Если так, то, быть может, имеет смысл изначально оптимизировать? Эта задача инициируется пользователем? Так может имеет смысл прибегнуть к ленивым вычислениям или посчитать заранее,чтобы не фризить интерфейсы?
Короче, нужно больше подробностей.
Ответ написан
@Android_Developer
I am Java Developer
int n, max, a, b;

cout<<"n=";cin>>n;
cin>>a;
cin>>b;
max = a + b;

for(int i =3;i <= n;i++){
cin>>a;
if(max < a + b){
max = a + b;
}
b = a;
}
cout<<"max="<
Рад помоч !
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы