|
7 / 6 / 1
Регистрация: 12.10.2021
Сообщений: 397
|
||||||
Самое длинное слово в строке17.12.2023, 23:55. Показов 3892. Ответов 43
Метки нет (Все метки)
Можете объяснить почему не правильно выдаёт?
0
|
||||||
| 17.12.2023, 23:55 | |
|
Ответы с готовыми решениями:
43
Найти в строке самое короткое и самое длинное слово
|
|
|
|||||||
| 19.12.2023, 09:36 | |||||||
for(int = 0; i < count; i++) не подразумевает каких либо модификаций, хотя по факту там можно объявлять любое количество переменных, условий и действия для итераций, включая ноль (их отсутсвие).
0
|
|||||||
|
Администратор
|
|||||||||||||
| 19.12.2023, 11:01 | |||||||||||||
|
Кликните здесь для просмотра всего текста
Результаты
Код
0
|
|||||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||
| 19.12.2023, 11:14 | ||||||||
|
Добавлено через 7 минут Сделайте замеры еще с вариантом с HashSet, у меня оно работало медленнее чем с обычной строкой.
1
|
||||||||
|
|
|
| 19.12.2023, 11:27 | |
|
OwenGlendower, на всякий -- всё тестируется же в релизной сборке?
В целом, если прям копать по перфомансу, скорее всего все эти i+k и генерят лишнюю работу, хотя как-то разрыв подозрительно большой.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 19.12.2023, 11:46 | ||
|
в моем случае i не меняется, а вот step постоянно меняется, поэтому вводить переменную для i+step смысла нет, вам всё равно её постоянно вычислять.У вас один if убивает целиком строкуfor (step = 0; (i + step) < str.Length && punctuations.Contains(str[i + step]); step++) ;а стандартные методы IsLetter и т.п. вполне могут быть реализованы уже через хэш. В общем отличная задачка для разминки и для того чтобы узнать новое.
0
|
||
|
Администратор
|
||||||||
| 19.12.2023, 12:16 | ||||||||
|
Кликните здесь для просмотра всего текста
1
|
||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 19.12.2023, 13:10 | |
|
0
|
|
|
Администратор
|
|
| 19.12.2023, 13:25 | |
|
1
|
|
|
Модератор
|
||
| 19.12.2023, 15:54 | ||
|
Линейный растёт пропорционально количеству элементов. HashSet зависит от количества с очень маленьким коэффициентом. Но затраты на начало поиска значительные. Скорее всего вот эти значительные начальные затраты и превысили выигрыш от HashSet для маленькой коллекции. Не думал, что они будут настолько значительны.
0
|
||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 19.12.2023, 16:51 | ||
|
0
|
||
|
Администратор
|
||||||||
| 19.12.2023, 17:04 | ||||||||
1
|
||||||||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 19.12.2023, 17:09 | ||
|
0
|
||
|
Администратор
|
|
| 19.12.2023, 17:56 | |
|
1
|
|
|
|
|
| 19.12.2023, 19:44 | |
|
Не по теме: Ужс эти ваши бейчмарки... я еле дождался, пока отработает. Глянул откуда такие просадки у нашего местного активиста -- таки в вопросе определения "а это буква или нет". Основной профит в том что дотнетовская проверка на "букву" выглядит так public static bool IsAsciiLetter(char c) => (uint)((c | 0x20) - 'a') <= 'z' - 'a'; и переплюнуть это любым хештейблом крайне сложно. Заменив на неё, получил 702.6 us против 386.7 us, шо уже в рамках погрешности (ну и может таки строит срезать лишние операции над индексами).Ещё отдельно замечу что проверка " ,.!?:;".Contains(ch) -- крайне неполная. Более правильно было бы делать на вхождение символа в алфавит (шо несколько увеличивает работу кода, но зато всегда правильно). Если не брать в расчет дотнетовский метод, всегда можно сделать в духе ch is >= 'a' and <= 'z' or >= 'A' and <= 'Z' Ну и семь раз i + step... ужс.
0
|
|
|
Администратор
|
|||
| 19.12.2023, 19:50 | |||
" ,.!?:;".
0
|
|||
|
|
||
| 19.12.2023, 20:14 | ||
|
Вообще я уже скинул что нужно ТСу. Пытаться на этой задаче постичь какие-то азы перфоменса... Ну, в целом когда я глянул внутрянку IsLetter, понял что порой правильнее определять рейндж, а не перечислять все значения и сверяться с ними. Может кому-то полезно узнать что можно массив анализирует кусками, а не дробить на отдельные строки (выедая память и время). Не говнокодить тоже вроде полезно.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||
| 19.12.2023, 21:33 | ||||||||||||||
|
Сохраню пока интригу
![]() Кликните здесь для просмотра всего текста
Добавлено через 6 минут Run time: 00:03:11 для трёх по триДобавлено через 11 минут Кликните здесь для просмотра всего текста
Добавлено через 57 минут лошпет я, проверял варианты туда сюда и теперь не могу вернуться к 41 ns в бенче ) char.Punctuation работает иначе чем я подумал.
0
|
||||||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||
| 20.12.2023, 11:11 | |||||||||||
|
в общем сколько не крутил вчера вариантов но 41 нс так и не смог повторить, 68 нс самый минимальный.
еще странно себя повёл тест, сделал проверку на символы английского алфавита
как видно я практически полностью переделал всё под вариант Wolfdp. Кликните здесь для просмотра всего текста
Может вы ошибку разглядите. ---- Еще придумал вариант для реализации, но мне кажется он если и будет интересным, то только на больших строках. Суть вот в чём - нам не нужно смотреть всю строку, нам нужно искать слова которые больше текущего максимального, то есть нужно грубыми шагами выбирать интервал и если он удовлетворяет условию (ниже), то тогда делать полную проверку на слово. Условие: после прыжка на длину+1 мы попали на букву, таким образом остаётся проверить на соответствие только интервал со второй буквы до предпоследней, если там будут все буквы, то можно проверять дольше чем прыжок, до тех пор пока не закончатся буквы. Во-первых это железно уже новое длинное слово, во-вторых - следующий поиск идёт с момента появления буквы с прыжком на длину+1. Давайте в ручном режиме посмотрим на тестовую строку: " Lorem ipsum dolor sit amet, consectetur adipiscing elit"На старте длина слова 0, поэтому формируем первое слово "Lorem" с длиной 5.Когда попадаем на первую букву слова "ipsum" то делаем прыжок на 5+1, попадаем на пробел.Переходим к слову "dolor" прыгаем на 5+1, попадаем на пробел.Переходим к "sit", прыгаем, попадаем на "m" в слове "amet", двигаемся назад проверяя на буквы, попадаем на пробел.Переходим к "amet", прыгаем, попадаем на пробел.Переходим к "consectetur", прыгаем на 5+1, проверка назад даёт все буквы, движемся вперёд и получаем новое длинное слово в 11 букв.Переходим к слову "adipiscing", прыгаем на 11+1, попадаем на "e" ("elit"), назад проверка на буквы не проходит.Строка закончилась. Всего будет итераций: 1. первый пробел = 1 2. всё первое слово = 5 3. пропуск пробела = 1 4. прыжок за слово ipsum на пробел = 1 5. пропуск пробела = 1 6. прыжок за слово dolor на пробел = 1 7. пропуск пробела = 1 8. прыжок за слово sit на слово amet, при обратном проходе делаем 2 шага до пробела = 3 9. прыжок за слово amet на пробел = 1 10. пропуск пробела = 1 11. прыжок по слову consectetur на букву "c", обратная проверка 4 шага, дальше вперед вычисляем длину нового слова = 9 12. пропуск пробела = 1 13. прыжок через adipiscing на слово elit на букву "e" + 1 итерация до пробела = 2 14. конец строки = 1 При длине сроки в 56 байт мы сделали только 29 шагов. Как-то так. Если кто-то быстро и ловко может реализовать этот алгоритм, буду признателен, я буду с ним возиться очень долго. Было бы интересно проверить его в работе, а так же понять на каких длинах строк появится положительный эффект (и появится ли вообще). Во всяком случае выглядит интересно. Добавлено через 4 минуты Получается чем длиннее в начале встретится слово, тем быстрее пройдёт поиск.
0
|
|||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 20.12.2023, 11:20 | |
|
визуально примерно так
0
|
|
| 20.12.2023, 11:20 | |
|
Найти самое длинное слово в строке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|