
Александр
17.02.2018
19:11:27


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

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
почему бы просто на ходу не сверять и вообще не хранить ничего
а упс

Pavel
17.02.2018
22:19:59

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

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

Anatoly
17.02.2018
22:21:59

Google

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

Anatoly
17.02.2018
22:25:28

pavel
17.02.2018
22:25:54

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
А на слово "рефакторинг" реагируют как на воровство

pavel
17.02.2018
22:56: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
Чой-то не помогли гварды

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
Если порядок имеет значение, того кто этот код написал, надо увольнять.
Но да, на практике такое может случаться.

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:31:47

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

Alexander
18.02.2018
13:12:50
Это всё детали реализации

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)

Aidar
18.02.2018
13:52:07

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

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