Viktor
I used translation 😶
I won’t tell anybody 🤗
Порридж В Ко-ливинге
Зато бивикли первые три простые, четвёртая хард. Не сбалансированные контесты.
Не помню, но в последнюю бивикли я не решил, т.к. решал за квадрат, а бабичев догадался за N log N. Прям под конец сдела ьивикли
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Вот сегодншняя задачка вообще плохая. Ну какой int to int hashmap… Детский сад какой-то. Я сначала обрадовался что нормальная мапа будет из строки в значение
Viktor
Вот сегодншняя задачка вообще плохая. Ну какой int to int hashmap… Детский сад какой-то. Я сначала обрадовался что нормальная мапа будет из строки в значение
ну а че, по сути будет разница в функции хеширования, очевидно с числами она намного проще, но саму мапу написать придётся.
Viktor
неплохая задача для собеседований, имхо.
Порридж В Ко-ливинге
https://pastebin.com/eeYa0xm2
Viktor
капасити у хеш-таблицы 10^6? ну-ну.
Viktor
такое себе.
Порридж В Ко-ливинге
Viktor
а если попросят рехеширование написать, так это вообще весело.
Viktor
Как в условиях
мне кажется ты упускаешь суть. если я хочу хранить три элемента, мне не надо чтобы там было выделено памяти под миллион интов.
Viktor
в этом как бы прикол хеш-таблицы.
Порридж В Ко-ливинге
а если попросят рехеширование написать, так это вообще весело.
Я вот на это и надеялся. Через trie знаю как, а вот с честным хэшированием...
Viktor
Я вот на это и надеялся. Через trie знаю как, а вот с честным хэшированием...
не понимаю при чем здесь trie и рехеширование. я имею в виду как увеличить динамически размер таблицы при достижении предельного размера, то есть капасити.
Viktor
то есть после увеличение размера, надо переложить все элементы.
Viktor
чтобы в итоге получилось равномерное распределение по бакетам снова.
Viktor
это я все к тому, что задачка не такая простая. хорошая задача для собеседований.
Viktor
большинство людей пользуются мапами как магией.
Порридж В Ко-ливинге
это я все к тому, что задачка не такая простая. хорошая задача для собеседований.
А, я думаю там можно использовать принцип как у LCP array. Я его так и не разобрал, т.к. сложно 🙃🙃
Viktor
Посмотрел на другие решения на JavaScript, и кажется люди реально не понимаю, что такое хеш-таблица. var MyHashMap = function() { this.data = []; }; MyHashMap.prototype.put = function(key, value) { this.data[key] = value; }; MyHashMap.prototype.get = function(key) { return this.data[key] !== undefined ? this.data[key] : -1; }; MyHashMap.prototype.remove = function(key) { this.data[key] = -1; }; Говорят в условии — не используйте встроенную хеш-таблицу в языке. Интересно, а вот когда ты пользуешься массивом нефиксированной длины, это ты чем пользуешься под капотом? 😄
Viktor
покликал по столбикам на графике Runtime Distribution — кажется, что такие решения все.
Viktor
@Glazomer47 вот тебе непаханное поле для написание статей в дискасе 🙂
Viktor
Ээ, а чем пользоваться? Массивом? (Задачу не читал)
ну надо пользоваться массивом в классическом понимании этого слова, то есть когда у тебя в памяти непрерывный блок.
Viktor
то есть как бы словаря, которому мы привыкли, совсем нет.
Viktor
задача имея только обычный «сишный массив» написать такой как в джаваскрипте 😄
Порридж В Ко-ливинге
Я слишком тупой(
Lynn «Кофеман»
ну надо пользоваться массивом в классическом понимании этого слова, то есть когда у тебя в памяти непрерывный блок.
Ну в V8 вроде массивы это непрерывные куски, но задача понятна. Я перестал открывать литкод :)
Viktor
Ну в V8 вроде массивы это непрерывные куски, но задача понятна. Я перестал открывать литкод :)
ну вот когда ты пишешь arr[1], arr[100500], до этого не объявив размер массива, что происходит?
Viktor
ну он создаст по капотом хеш-таблицу.
Roman
Если бы они условие задачи поменяли с интов на строки, это заставило бы людей подумать как написать нормальную хэшмапу)
Viktor
Бабичев нормальное объяснение сделал https://leetcode.com/problems/design-hashset/discuss/768659/Python-Easy-Multiplicative-Hash-explained
Viktor
> easy question is about space complexity: it is O(2^15), because this is the size of our list.
Viktor
вот это, правда, не ок. рехеширования нет.
Nikolai
https://pastebin.com/yhWA1q25 С рехешированием, но по легкому пути — через бакеты 😀
Evgeniy
По времени прошло же)
Viktor
ну да, на самом деле, можно написать как угодно, оно пройдёт.
Viktor
но на собеседовании, имхо, будет красный флаг.
Viktor
ну да, на самом деле, можно написать как угодно, оно пройдёт.
я видел там решения где чувак создавал в конструкторе this.map = {} 😄
Viktor
удобно.
Evgeniy
удобно.
Он что-то знал)
Evgeniy
Кстати, там написано, что "не используйте встроенные библиотечные функции"
Evgeniy
Лишний повод почитать исходники в шарпе
Roman
А вообще, я когда увидел эту задачу, быстро в голове прокрутил 3 реализации (Buckets=LinkedList, Linear probing и Buckets=RBTree) понял, что все помню и сделал capacity = 10^6. ;D
Roman
Кстати, я вот никогда не мог без подглядки написать RBTree. Я все время забываю правила, которые надо соблюдать, чтобы дерево было по определению красно-черное. И еще левая и правая ротации пишу с ошибками с первого раза)
Порридж В Ко-ливинге
ну, кстати, да.
Так я об этом и говорил!
Viktor
Хто старое, он уже новое сделал
Да там у него вроде одинаковое
Порридж В Ко-ливинге
Да там у него вроде одинаковое
А, ну да. Блин, модет замудренное решение сделать с чуть ли не честным хэшированием
Viktor
Так что особенно не ясно зачем это знать если только не для олимпиадок
Roman
Red-Black Tree
Evgeniy
Red-Black Tree
Приходилось его писать для реальных задач?
Roman
Не-а, только в академических целях) Когда участвовал в олимпиаде, наблюдал картину, как парень накинул все дерево за 2-3 минуты)
Viktor
Пипец, решал сейчас задачку на дп (готовлю на завтра статью), есть стандартная проверка const dp = {}; // ... if (dp[suffix]) { return dp[suffix]; } И упал один тест, где dp["constructor"] сказал true в этом месте, хотя не должен был. Это урок про зачем нужен hasOwnProperty 🙂 Вкрутил Map, в итоге.
Viktor
люблю джаваскрипт. веет теплом.
Viktor
@KlenZeleny кстати, это та задача про concatenated words. я решил вкрутить туда дпшечку для порядка, а то вариант с сортировкой выглядит как хак больше.
Viktor
И как вкрутил? [i][j] — есть ли в этом префиксе от i до j конкатенация слов? bool
пока просто завёл сет куда складываю слова, которые можно разбить, а потом при поиске проверяю нет ли такого суффикса в этом сете, чтобы этого не пересчитывать.
Viktor
но есть этот тест с a, aa, aaa, aaaa, ... где такой кеш бесполезный.
Viktor
хоть с конца начинай обход.
Evgeniy
пока просто завёл сет куда складываю слова, которые можно разбить, а потом при поиске проверяю нет ли такого суффикса в этом сете, чтобы этого не пересчитывать.
Ага, понял. Но по моему тут хеш у строки придется каждый раз пересчитывать. Т.е. сложность квадрат будет, нет?
Viktor
копирование строк будет, да.
Viktor
печаль-беда.
Evgeniy
Кстати, а почему бы не хранить в сете не саму строку, а ее хеш?
Ilia
А напомните плз ссылку на эту задачу
Evgeniy
А напомните плз ссылку на эту задачу
https://leetcode.com/problems/concatenated-words/