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

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

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

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

27 ответов

15 просмотров

Где-то вам все равно придется прочитать и сравнить строку за линейное время или в лучшем случае за 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 в вашем контексте, но о и тета это об одном и том же, просто разные неравенства

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта