|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
||||||||||||||||
Скорость выполнения функции в 2-ух вариантах26.08.2021, 23:27. Показов 4453. Ответов 33
Метки нет (Все метки)
Функция a_IsFindForbWord() выполняется в несколько раз быстрее, чем b_IsFindForbWord():
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Результат теста: a_IsFindForbWord(): 10203 (10 секунд) b_IsFindForbWord(): 67596 (67 секунд) Мне бы хотелось оставить ф-ию b_IsFindForbWord() для своей программы, но не могу понять - почему она такая медленная? Почитал форум немного и наткнулся, что как-то тормозит цикл где regex_iterator - Медленная работа regex (1-ый пост в конце). Как быть?
0
|
||||||||||||||||
| 26.08.2021, 23:27 | |
|
Ответы с готовыми решениями:
33
Скорость выполнения функции
Уменьшить время выполнения работы программы, увеличить скорость выполнения |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 29.09.2021, 15:50 | |
ну_ты_ххх_ххх_красавец, ваших разделителей здесь нет, разделить похабщину можно любым символом.Вы слишком самоуверены, видимо ваша игра детская и хватит и прямого фильтра ![]() Добавлено через 1 минуту leo7755, кстати цитировать нецензур было не обязательно!
0
|
|
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
||
| 29.09.2021, 16:40 [ТС] | ||
|
Игра детская, SA-MP по сети (GTA SA), поэтому мне хватит того, что есть) А вот по поводу map интересно. я занёс в vector слова - разве это не правильно?
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 29.09.2021, 16:46 | ||
Сообщение было отмечено leo7755 как решение
РешениеВопрос стоит в быстродействии. А значит способ хранения слов (в std::vector) выбран неправильный (не эффективный). Доступ к слову по ключу map или set (в данном случае предпочтительно использовать set), намного быстрей , чем проходить весь вектор(дин. массив). Почитайте про хеш функции и деревья, возможно это прояснит ситуацию.
1
|
||
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
|
| 29.09.2021, 17:03 [ТС] | |
|
0
|
|
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
||||||
| 01.10.2021, 02:43 [ТС] | ||||||
|
SmallEvil,
Дело обстоит так, что вместо vector применил контейнер set, а вместо регулярных - boost::split Кликните здесь для просмотра всего текста
Результат теста обрадовал. Ну явно побыстрее, чем было (~ на 20 сек.): a_IsFindForbWord(): 6365 (6 секунд) b_IsFindForbWord(): 48937 (48 секунд) Имеются ли недочёты в b_IsFindForbWord()?
0
|
||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|||||||
| 01.10.2021, 08:39 | |||||||
Сообщение было отмечено leo7755 как решение
Решение
0
|
|||||||
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
|||||||||||
| 02.10.2021, 02:21 [ТС] | |||||||||||
a_IsFindForbWord() : 62 млс. b_IsFindForbWord() : 843 млс. 1 млн. итераций: a_IsFindForbWord() : 390 млс. b_IsFindForbWord() : 8096 млс. nonedark2008, не поверишь - не зря использовал метод count. Дополнительно поменял set на unordered_set. С ним даже быстрее вышло. Данные в отсортированном виде мне не нужны. Но осталось пару вопросов: 1) std::vector<std::string> words_split обязательно выносить на функцию? 2) можно ли оставить условие в таком виде?
0
|
|||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 02.10.2021, 03:15 | |||||||
Разделяются слова сообщения, сообщение каждый раз разное, значит и набор слов тоже. Значит это данные функции и желательно что б они были внутри по всей логике. А почему words_split объявлена как static ? И саму строку(сообщение) передавай в функцию по ссылке, много не потеряешь. Добавлено через 6 минут Странно но я не вижу твое отфильтрованное сообщение ![]() Добавлено через 4 минуты Или решил всЁ сообщение блочить ? )) Добавлено через 13 секунд Или решил всЁ сообщение блочить ? ))
1
|
|||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 02.10.2021, 03:15 | |
|
Или решил всЁ сообщение блочить ? ))
0
|
|
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
|||||||||
| 02.10.2021, 05:25 [ТС] | |||||||||
Принцип работы функции такой. Игрок пишет сообщение в чат. Это сообщение проверяется через IsFindForbWord. Строка разделяется на слова*. Далее производится поиск первого встречающегося запрещённого слова из словаря forb_words. И если слово найдено, то можно например блокировать вывод такого сообщения. * словом считается набор символов (Aa-Zz, Аа-Яя), которые с одной или с двух сторон разделяются некоторыми символами-разделителями
0
|
|||||||||
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
|
| 03.10.2021, 16:49 [ТС] | |
|
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 03.10.2021, 16:59 | ||
|
Жесткий фильтр, одно слово не то и бан всему сообщению )
И можно не понять почему, если произойдет ложное срабатывание. Ради прироста пары милисекунд ? Она же все равно очищается (дожна) и заполняется заново при каждом вызове функции. Добавлено через 2 минуты Она часть этой функции, объявить ее static внутри функции еще понятно. Добавлено через 36 секунд И то сомнительно.
0
|
||
|
3 / 3 / 1
Регистрация: 12.02.2017
Сообщений: 81
|
|||
| 03.10.2021, 17:23 [ТС] | |||
|
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 03.10.2021, 18:31 | ||
|
0
|
||
| 03.10.2021, 18:31 | |
|
Написать следующие функции в двух вариантах Работа с файлами. Нужно сделать функции сохранения и загрузки данных в двух вариантах: текстовый и бинарный режим Скорость выполнения.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|