|
7 / 6 / 1
Регистрация: 12.10.2021
Сообщений: 397
|
||||||
Самое длинное слово в строке17.12.2023, 23:55. Показов 3785. Ответов 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
|
||
|
151 / 135 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 19.12.2023, 16:51 | ||
|
0
|
||
|
Администратор
|
||||||||
| 19.12.2023, 17:04 | ||||||||
1
|
||||||||
|
151 / 135 / 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 | |
|
Найти самое длинное слово в строке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|