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

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

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

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

27 ответов

12 просмотров

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
10
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта