Конкурс "Вопрос-Решение". "Найти символьные вхождения в строке".

05.04.13

Разработка - Математика и алгоритмы

В конкурсе "Вопрос-Решение" была задана задача": "Найти символьные вхождения в строке". Вот моё решение.

Скачать файлы

Наименование Файл Версия Размер
ПоискВхождений_00.epf
.epf 9,57Kb
14
.epf 9,57Kb 14 Скачать

Условия конкурса. 

 

решение данной задачи относительно несложное. вот что получилось.

с Уважением Шёпот теней, в миру Александр Шишкин.

буду рад критики, поддержке конкурса, советам ...

 

... вот ... 

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1715    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4320    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7350    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7820    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4415    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8795    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7720    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ildarovich 7846 08.04.13 12:56 Сейчас в теме
Под конструктивной критикой можно понимать лучшее решение. В этом смысле моя критика будет неконструктивной.
1. Пример текста к задаче был бы гораздо интереснее и привлек бы больше внимания, если бы являлся кодом программы на языке 1С. Поиск повторов в тексте программ – для многих здесь более актуальная задача, чем анализ стихотворного текста.
2. Относительно небольшое решение должно публиковаться в тексте статьи, а текст обработки прилагаться для проверки. Комментировать решения, методы и алгоритмы удобнее, имея их перед глазами.
3. В обработке по сути, два отдельных метода: предварительная обработка строки (фильтрация и замена символов) и собственно, поиск повторов.
4. Фильтрация и замена символов сделана «с многочисленными огрехами»:
4.1. Сам по себе принцип «наращивания» результирующей строки приведет к тому, что на реальных данных производительность метода быстро деградирует (см. статью «Опять двойка!»). То есть здесь ГОРАЗДО быстрее будет работать цикл из функций «СтрЗаменить».
4.2. В такой простой задаче используется три разных механизма фильтрации и замены: структура для замены (???), поиск в строке алфавита для фильтрации и приведение к нужному регистру. Все преобразования можно выполнить через одно соответствие.
4.3. Структуру для замены использовать неправильно – она для этого не предназначена (хотя и работает, но логарифмической линейкой тоже гвозди забивали) – см. комментарии к статье «Эфективная обработка данных за счет использования коллекции соответствие».
4.4. Зачем заменять на пустышку мягкие и твердые знаки? – Их лучше исключить из алфавита.
4.5. Какой смысл в плавающих отступах?
5. Никаких алгоритмических находок нет. Это решение задачи «в лоб». Время решения пропорционально длине строки в кубе! Тогда как применение суффиксного массива и алгоритма Касаи дает линейное время (не вполне уверен именно в линейности, но точно меньше квадрата). Но даже просто кодирование поиска повторов также не может быть образцом:
5.1. Лишние присваивания исходной строки.
5.2. Лишние вычисления длины строки (в ограничении цикла Для функции вычисляются единственный раз, поэтому нет нужды вычислять длины заранее).
5.3. Вместо ограничения диапазона внутреннего цикла делается проверка длины вырезки, а ведь длина строки долго (пропорционально длине строки) вычисляется.
5.4. Для уже отстатистированной подстроки опять считается число вхождений! (зачем закомментирована проверка?).
5.5. Если подстрока уже не найдена более одного раза, зачем искать еще раз искать более длинные подстроки? Результат будет тем же.
В общем, задача актуальная и интересная, а решение еще улучшать и улучшать.
agrustny; Шёпот теней; +2 Ответить
2. Шёпот теней 1779 08.04.13 13:25 Сейчас в теме
(1) ... вот бы ещё и посмотреть ...
4. ildarovich 7846 08.04.13 14:00 Сейчас в теме
(2)
... вот бы ещё и посмотреть ...
- уточните, пожалуйста, что имели ввиду.
5. Шёпот теней 1779 08.04.13 14:07 Сейчас в теме
(4) посмотреть - готовое решние со всеми вашими замечаниями! ... впрочем, я не провоцирую - я согласен с вами ...

... вот ...
7. ildarovich 7846 08.04.13 15:16 Сейчас в теме
(5) Провести рефакторинг Вашего решения - тут нет проблем, это не долго (но не интересно), а вот реализовать правильный алгоритм - пока не решил - стоит ли этим заниматься. Вообще не уверен, что на 1С следует решать сложные задачи обработки строк не как учебные. Это не та сфера применения, где платформа 1С эффективна. Для таких случаев разработчики заложили в платформу технологию внешних компонент и нужно использовать их.
8. Шёпот теней 1779 08.04.13 15:31 Сейчас в теме
(7) ...нууу, так не интересно ... подобно можно ответить на любой вопрос ...

как МЫ знаем - нет универсальных языков програмирования ... каждый под что-то заточен ...

мы не говорим про эффективность программной среды, мы говорим о выполнении задачи языком 1С ...

в остальном же это дело вкуса, желания, возможности, умения, навыков и пр. ...

... вот ...

п.с. все люди делятся на две категории:
1. одни ищут слова, чтобы отказаться от дела
2. вторые ищут дела, чтобы выполнить свои слова

...
9. AlexO 135 08.04.13 16:15 Сейчас в теме
(8)
1. одни ищут слова, чтобы отказаться от дела
2. вторые ищут дела, чтобы выполнить свои слова

Ильдарович ищет знаков, чтобы найти "заточенность" 1С :)
10. Шёпот теней 1779 08.04.13 16:26 Сейчас в теме
(9) ... лаТно ужжж Вам ... ))) ...

Сергей Ильдарович - не поленился: скачал, заглянул, увидел, структурировал - высказался !!! за, что ему спАсибо ...

п.с.0. ну, не любит он язык 1С ...
п.с.1. зато любит язык запросов !!!

... вот ...
11. agrustny 19 29.04.14 14:59 Сейчас в теме
(10) Профессор Эльдорадович в отношении данной публикации сделал все правильно. Я так считаю.
12. Шёпот теней 1779 05.05.14 09:38 Сейчас в теме
(11) agrustny, правильно? не правильно? :

правильно это когда 3+3+3 = 9 а иное - не правильно !!! а вот когда 3*3=9 это тоже правильно ... остальное это споры о "вкусах" ...

... вот моЁ мнение ...
13. agrustny 19 05.05.14 16:30 Сейчас в теме
14. ildarovich 7846 30.07.14 12:27 Сейчас в теме
(8) все же не давала мне покоя эта задача и я постарался ее решить. Решение приведено в статье КопиПастаМер. Правда, в самой статье акцент сделан на практическое применение - поиск повторяющихся фрагментов кода в типовых конфигурациях.

Получились очень интересные результаты (повторов кода в типовых - до фига и больше).

Решение описано штрих-пунктирно, но, если заинтересуетесь, могу дать пояснения. В целом, оказалось, что применив алгоритм Мандера-Майерса и Касаи, можно НА ЧИСТОМ 1С за 15 минут найти ВСЕ повторяющиеся фрагменты в строке из 3,5 миллиона символов.

До этого то же самое сделал на языке запросов, но получилось слишком громоздко и есть одно тонкое место - пока не стал доводить до ума, хотя осталось чуть-чуть.
15. Шёпот теней 1779 30.07.14 13:30 Сейчас в теме
(14) ildarovich,
Спасибо! вернее ОЧЕНЬ тебе БЛАГОДАРЕН за все твои решения и великие умения !!!

"В целом, оказалось, что применив алгоритм Мандера-Майерса и Касаи, можно НА ЧИСТОМ 1С за 15 минут найти ВСЕ повторяющиеся фрагменты в строке из 3,5 миллиона символов. "
- вот ведь !!!

если же смотреть на "Повторяемость кода в 1С" - то надо задать и другой вопрос - "А?!, где он не повторяется?" ... сложность написания программы коллективом сложнее чем представляется с т.з. "просто кода" т.к. не "код" определяет работу программы.

...вот...
16. ZLENKO 398 29.04.15 16:09 Сейчас в теме
(15) "Спасибо! вернее ОЧЕНЬ тебе БЛАГОДАРЕН за все твои решения и великие умения !!!"

Уже скоро год (судя по дате последнего поста в форуме) как Шёпот теней покинул ИС ?
17. AlexO 135 30.04.15 09:22 Сейчас в теме
(16) ZLENKO, да, увы, путный народ разбегается, "среда обитания" вынуждает...
18. Шёпот теней 1779 30.04.15 14:32 Сейчас в теме
(16), (17) ... уффф ...

"равнение на среднего приводит к обнулению" это то самое исключение которое не подтверждает правило "перехода количества в качество" ...

... вот ...
6. AlexO 135 08.04.13 14:07 Сейчас в теме
(4) ildarovich,
"мы не ищем легких путей.."
и простых вопросов :)
3. AlexO 135 08.04.13 13:29 Сейчас в теме
(1) ildarovich,
Поиск повторов в тексте программ

это как изволите анализировать? :)
Точнее, как собираетесь анализировать эти самые повторы?
Про невозможность в принципе "увидеть" код типовых - не говорю уже.
И никакая 8.3 тут не поможет, пока 1С не сделает компиляцию отдельно от платформы.
Оставьте свое сообщение