|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
Коллеги, приветствую! Помогите решить задачу, не знаю с какой стороны подступиться. Есть набор паттернов, в виде набора записей, и набор последовательностей, тоже в виде набора записей: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Необходимо определить, какая цепочка соответствует какому паттерну НЕТОЧНО . Правила следующие: 0. И паттерны и цепочки - длинные, ~ 1000 символов паттерн, ~100 символов - цепочка 1. При сравнении паттерна и цепочки роль играет только последовательность звеньев. Чем больше звеньев в последовательности совпало - тем больше вес "подходящего" паттерна. 2. Паттерн с цепочкой можно сравнивать начиная с любого символа паттерна, не обязательно с первого. 3. Начинаем сравнивать паттерн с цепочкой начиная с 1 символа паттерна. Если далее совпали N из M символов в цепочке - текущий вес паттерна N 4. Финальный вес паттерна - это максимальный из текущих весов, измеренных со 2, 3, и т.д. символа паттерна при сравнении его цепочкой. 5. Совпавшим считается паттерн с максимальным весом. Если таких несколько - то совпали все. Т.е: Паттерн 1010110011000 11101 01101 Цепочка: 11101 1 В этом случае - максимальный вес паттерна - 5 (хотя есть совпадения 1, 2, 3) Он, очевидно, выигрывает в сравнение с таким паттерном: 10101010101010101010101010101010101010101 Решение нужно какое угодно. Циклы, курсоры, рекурсия... гм... вызова внешних скриптов хотелось бы избежать... С какой стороны хоть подступиться к такому? Похоже на расстояние Дамерау — Левенштейна... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 17:56 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 19:35 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
uaggster Похоже на расстояние Дамерау — Левенштейна... Близко не лежало. Это - "Поиск максимальной общей подпоследовательности". uaggster вызова внешних скриптов хотелось бы избежать... Как раз внешняя функция, возвращающая длину макс. общей подпоследовательности двух переданных ей строк (паттерн и цепочка), была бы вполне уместна. SQL - хреновый инструмент для такой задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 20:16 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
"В лоб" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 21:56 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
aleks222 Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Блин, нифига не понял, от слова совсем. Буду пытаться разобраться. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 08:15 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
invm "В лоб" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Тоже не понял. Преобразуем последовательность записей в строку, и для цепочки, и для паттерна, а потом последовательно обрезаем цепочку с конца и ищем charindex обрезка цепочки в паттерне? Спасибо, буду думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 08:20 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
uaggster, правильно ли я понял задачу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
id_pattern pattern id_chain chain weight sub_chain1 1100010100 1 01100 2 011 1100010100 2 1101 3 1101 1100010100 3 0011101 3 0012 1001111 1 01100 3 0112 1001111 2 1101 2 112 1001111 3 0011101 5 001113 0001101100 1 01100 5 011003 0001101100 2 1101 4 11013 0001101100 3 0011101 4 0011 как бы это удалить) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 00:51 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
ValK412 uaggster, правильно ли я понял задачу: Ты, главное, не переживай. ТС сам ничо не понимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 06:09 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
uaggster, цепочку надо нарезать на элементы длиной от 1 до длины цепочки и подсчитывать количество совпавших элементов в паттерне. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 11:42 |
|
Детектирование самого подходящего паттерна для последовательности значений
|
|||
---|---|---|---|
#18+
aleks222 ValK412 uaggster, правильно ли я понял задачу: Ты, главное, не переживай. ТС сам ничо не понимает. Смех смехом, но именно так. Пока приостановилось, жду, пока бизнес прочихается. Решение invm подошло прямо в лоб (к тому, что просили), но результат почему-то не устроил. Выясняю почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 13:58 |
|
|
Start [/forum/topic.php?fid=46&tid=1683831]: |
0ms |
get settings: |
8ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
41ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
199ms |
get tp. blocked users: |
1ms |
others: | 281ms |
total: | 543ms |
0 / 0 |