@ProCxx

Страница 1765 из 2477
Александр
17.02.2018
19:11:27
а оно по стандарту разве не должно быть равно 0?
Для людей, которые форвардят вместо реплая, есть отдельный котел в аду

pavel
17.02.2018
22:08:48
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?

Evgeniy
17.02.2018
22:12:58
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
set? или просто онлайн проверять?

pavel
17.02.2018
22:13:15
set? или просто онлайн проверять?
Там похоже требование - без C++ писать на голимых сях. Сомнительно удовольствие конечно хеш-табицу херачить на сях.

Google
Anatoly
17.02.2018
22:13:38
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
https://brestprog.neocities.org/lections/trie.html

Ignat
17.02.2018
22:13:49
щас бы БОР построить

на 128 метрах текста

pavel
17.02.2018
22:14:05
Ну Trie это почти ахо-корасик и есть... По смыслу. Такой же конечный автомат. Тот кто выбирает trie, почему против хеш-таблицы?

Evgeniy
17.02.2018
22:14:40
на рандомном тексте произвольной длины не уверен что лучшая идея

Anatoly
17.02.2018
22:15:27
на рандомном тексте произвольной длины не уверен что лучшая идея
для определения факта принадлежности слова к словарю в самый раз

Evgeniy
17.02.2018
22:16:09
для определения факта принадлежности слова к словарю в самый раз
там может быть например ключ в 10 букв и 100 слов по метру

почему бы просто на ходу не сверять и вообще не хранить ничего

а упс

Evgeniy
17.02.2018
22:20:02
неправильно прочитал

Pavel
17.02.2018
22:20:44
Там ограничения по памяти еще не было?

Anatoly
17.02.2018
22:21:59
Там ограничения по памяти еще не было?
нет, словарь не более 128 метров

Google
pavel
17.02.2018
22:23:29
ТАк чо, какие аргументы в пользу trie против std::unordered_set например?

Anatoly
17.02.2018
22:25:28
ТАк чо, какие аргументы в пользу trie против std::unordered_set например?
и тот и другой вариант приемлем, только trie более стабилен, поскольку не зависит от природы слов в словаре

Anatoly
17.02.2018
22:26:41
для хеш таблицы на определенный наборах ты банально можешь получать больше коллизий

ну, банальный пример: size_t degraded_hash_function(char const*) {return 1;} какую сложность ты получишь?

pavel
17.02.2018
22:29:39
Получу O(n), да.

Anatoly
17.02.2018
22:30:45
ну вот остюда trie более стабилен в плане независимости сложности от природы данных и равен O(l), l длина слова

то есть, ребята из VK могут подсунуть тебе исходных файл, как хороший для unordered_set, так и плохой.

а могут вообще сказать - чего это ты преждевременной оптимизацией занимаешься и выгонят взашей :)

Это ты о чем? Или даже к чему?

/dev
17.02.2018
22:46:04
А на слово "рефакторинг" реагируют как на воровство

Alexander
17.02.2018
23:16:29
http://jrfonseca.blogspot.com.by/2008/09/fast-sse2-pow-tables-or-polynomials.html

Joy
18.02.2018
03:22:14
По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times

А гугл в своих гайдлайнах считает иначе: >Avoid using forward declarations where possible. Just #include the headers you need.

Anatoly
18.02.2018
06:16:03
По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times
Стражи включения, pragma once не позволят для одной единицы трансляции компилировать один и тотже заголовчный файл, как бы ты их не переставлял. Так что, если взять один cpp с N заголовочными файлами и комбинаторно заняться перестановками ты должен получить примерно одинаковые времена. Так что, приведи ссылку на "исследования".

Yaroslav
18.02.2018
06:17:36
Joy
18.02.2018
06:18:35
Стражи включения, pragma once не позволят для одной единицы трансляции компилировать один и тотже заголовчный файл, как бы ты их не переставлял. Так что, если взять один cpp с N заголовочными файлами и комбинаторно заняться перестановками ты должен получить примерно одинаковые времена. Так что, приведи ссылку на "исследования".
Там две ссылки чуть выше, в которых это все подробно расписано. Например, With every header file having include guards around it, I turned on the /showincludes switch in Visual C++ and performed a full build. The total number of includes during the course of building the 300 classes in the library was an astounding 15,264. Better than the worst-case-scenario we calculated earlier, but still tremendously high.

Чой-то не помогли гварды

Anatoly
18.02.2018
06:21:56
Прочитай еше раз мое предложение. При прочих равных порядок включения для одной единицы трансляции не будет играть роли.

Google
Joy
18.02.2018
06:22:57
А, ну ок, не буду спорить

Ilia
18.02.2018
06:50:55
По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times
Если порядок имеет значение, того кто этот код написал, надо увольнять. Но да, на практике такое может случаться.

По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times
Время компиляции ни на что не влияет, это эфимерная сущность.

Admin
ERROR: S client not available

Aidar
18.02.2018
07:15:13
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
Память не раздует

Ахокорасик не нужен ты же не подстроки ищешь

Ostap
18.02.2018
07:17:01
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
Бойер-Мур

Aidar
18.02.2018
07:19:35
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
1) указатели не нужны. String и так хранит указатель

Сравнения долгие

Ivan
18.02.2018
07:25:45
+

Padureac
18.02.2018
09:37:23
Т.е. есль хочешь чтоб работало надо инициализацию в struct удальть

pavel
18.02.2018
10:57:47
Anatoly
18.02.2018
11:54:29
а вот такой с моей стороны неожиданный вопрос: есть способы регулировать размер чанков в std::deque?

например, я хочу регулировать, чтобы размер страницы std::deque был кратен определенной величине

Silk
18.02.2018
12:08:43
Всем привет Есть определённый набор координат, как можно из него получить изображение bmp?

Dmitrii
18.02.2018
12:31:44
Google
PAM3ES
18.02.2018
13:33:31
кто знает про allegro? она изначально software рендерит?

Kitsu
18.02.2018
13:47:52
Есть какой-нибудь шорткат для передачи member-function как лямбду? e.g: Вместо f([&obj](auto t) { obj.g(t); }) Использовать f(&obj.g)

Kitsu
18.02.2018
13:52:38
бинд совсем печально смотрится, ну лан, спасибо

Ignat
18.02.2018
13:53:21
ну учитывая, что this — это указатель, тебе в любом случае придётся во что-нибудь оборачивать

Страница 1765 из 2477