170 похожих чатов

Добрый день! У меня вопрос возник в результате некоторых рассуждений, возможно,

он кривой и я чего-то не вижу, но все равно, буду рад любому фидбеку...

Допустим имеется некоторый метод:
bool isIni (std::string_view fileFormat) {
if (fileFormat == ".ini") {
return true;
}
return false;
}
Можно ли как-то ускорить факт осуществление проверки, например, делать это за константу?
Я не знаю, есть ли в плюсах такое, но почему бы для каждого модуля(метода класса/функции) не создать некую структуру(например, хеш-таблицу), которая будет содержать значения переданных аргументов в моменте выполнения, чтобы потом можно было оперировать ими быстрее?

27 ответов

5 просмотров

Где-то вам все равно придется прочитать и сравнить строку за линейное время или в лучшем случае за log n

m_Rassska- Автор вопроса

конкретно в этом случае захешировать переданный fileFormat, получить значение хеш-функции от ".ini" и потом просто сравнивать значение хешей? Ну ладно, пример не совсем удачный, но кажется есть случаи, при которых эта штука может сильно повлиять на производительность... Но я не уверен, можете как-то прокомментировать?!

m_Rassska
конкретно в этом случае захешировать переданный fi...

Заведите enum со значениями формата, один раз прочитайте строковое представление и сохраните значение данного enum'а в зависимости от переданной строки

Как можно вообще сравнить две строки за константное время? Давай с этого начнем.

m_Rassska
конкретно в этом случае захешировать переданный fi...

Не сильно повлияет. Тем более для хеширования нужно перебрать всю строку... И не забыть про коллизии.

m_Rassska
конкретно в этом случае захешировать переданный fi...

Это не даст тебе О(1). Вопервых, если равны хэши, это ещё не значит, что равны хэшируемые значения. Мы только может сказать, что значения не равны, если хэши не равны. Во-вторых , угадай, какое же время вычисления хэша в зависимости от длины строки? О! Неожиданно! Это O(n) где n - длина строки!. А что же О(1) ? А не O(M) ? А это время поиска в хэш таблице с использованием хэш функции от строки, где M размер хэш-таблицы, число ключей в ней.

Ilya Zviagin
Коллизии тут ни при чем..

"Если равны хэши, это ещё не значит, что равны хэшируемые значения" Тебя же цитирую😁

Dmitriy [Отпуск]
"Если равны хэши, это ещё не значит, что равны хэш...

Да, если это, то при чем, я только после про это подумал.

Dmitriy [Отпуск]
"Если равны хэши, это ещё не значит, что равны хэш...

Я имел в виду что коллизии при поиске в хэш таблице только возникают, а тут его не будет.

Потому что проверка и так выполняется за О(1)

Лол, у тебя итак время константное, оно от fileFormat никак не зависит.

m_Rassska- Автор вопроса
Kirill Bolshakov
Лол, у тебя итак время константное, оно от fileFor...

Тогда я скажу, что цифровая сортировка работает за линию. Не, тут кейс не в этом, просто зависимость от длины строки все же присутствует и меня интересовал факт проверки строки посимвольно...

m_Rassska
Тогда я скажу, что цифровая сортировка работает за...

Так же у нас длина строки - константа, не?

m_Rassska- Автор вопроса
Sugar
Так же у нас длина строки - константа, не?

согласен, просто меня интересовал именно факт проверки равности строк посимвольно, можно ли как-то асимптотику улучшить, пожертвовав немного памяти...

m_Rassska
согласен, просто меня интересовал именно факт пров...

Шустрые реализации strcmp умеют сравнивать больше 1 символа за раз. Подойдёт?😆

m_Rassska
согласен, просто меня интересовал именно факт пров...

В твоём утверждение прям есть ответ. Либо ты символы сравниваешь(подстроки) либо ранее полученные хэши. Из произведенных действий и складывается вычислительная сложность, как и оценка в О-нотации

Это называется питонячий @rlu_cache(None)

m_Rassska
согласен, просто меня интересовал именно факт пров...

Думаю как и с сортировкой у сравнения строк есть теоретический минимум сложности и равен он O(n). Но доказательств я не читал

m_Rassska- Автор вопроса
Kirill Bolshakov
Думаю как и с сортировкой у сравнения строк есть т...

Может быть, я вас немного не понял, но кажется, вы вводите несуществующие понятия. Что по-вашему, означает "теоретический минимум сложности и равен он О(n)"?

m_Rassska- Автор вопроса
Kirill Bolshakov
То что лучше не сделать

А понял, только это не относится никак к big O notation-у...

m_Rassska
А понял, только это не относится никак к big O not...

У вас есть алгоритм сравнения строки с некоторым эталоном, его временная сложность O(n). Либо я не понял, что это за "это"

m_Rassska
А понял, только это не относится никак к big O not...

Он про time complexity. К примеру, для merge sort и для общего случая есть доказательство, что это не может быть лучше O(nlogn)

__aam
Он про time complexity. К примеру, для merge sort ...

если использовать только попарные сравнения*

Aidar Fattakhov
если использовать только попарные сравнения*

Нужно разделять computation model и time complexity. Это о разном. И первое зависит от второго. Для двух случайных строк time complexity будет Θ(n)

__aam
Нужно разделять computation model и time complexit...

не понял значения computation model в вашем контексте, но о и тета это об одном и том же, просто разные неравенства

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
t.me/<username> и tg://user?id=<id> отваливаются по понятным причинам
Denis 🐍|👑 | darling! 🥰
7
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
Карта сайта