Порридж В Ко-ливинге
Порридж В Ко-ливинге
Вот сегодншняя задачка вообще плохая. Ну какой int to int hashmap… Детский сад какой-то. Я сначала обрадовался что нормальная мапа будет из строки в значение
Viktor
Viktor
неплохая задача для собеседований, имхо.
Порридж В Ко-ливинге
Порридж В Ко-ливинге
https://pastebin.com/eeYa0xm2
Viktor
капасити у хеш-таблицы 10^6? ну-ну.
Viktor
такое себе.
Порридж В Ко-ливинге
Viktor
а если попросят рехеширование написать, так это вообще весело.
Viktor
Как в условиях
мне кажется ты упускаешь суть. если я хочу хранить три элемента, мне не надо чтобы там было выделено памяти под миллион интов.
Viktor
в этом как бы прикол хеш-таблицы.
Viktor
то есть после увеличение размера, надо переложить все элементы.
Viktor
чтобы в итоге получилось равномерное распределение по бакетам снова.
Порридж В Ко-ливинге
Viktor
это я все к тому, что задачка не такая простая. хорошая задача для собеседований.
Viktor
большинство людей пользуются мапами как магией.
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 вот тебе непаханное поле для написание статей в дискасе 🙂
Lynn «Кофеман»
Viktor
то есть как бы словаря, которому мы привыкли, совсем нет.
Viktor
задача имея только обычный «сишный массив» написать такой как в джаваскрипте 😄
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Я слишком тупой(
Lynn «Кофеман»
Viktor
ну он создаст по капотом хеш-таблицу.
Viktor
Roman
Если бы они условие задачи поменяли с интов на строки, это заставило бы людей подумать как написать нормальную хэшмапу)
Viktor
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
С рехешированием, но по легкому пути — через бакеты 😀
Viktor
Evgeniy
Evgeniy
По времени прошло же)
Viktor
ну да, на самом деле, можно написать как угодно, оно пройдёт.
Viktor
но на собеседовании, имхо, будет красный флаг.
Viktor
удобно.
Evgeniy
Evgeniy
Кстати, там написано, что "не используйте встроенные библиотечные функции"
Evgeniy
Лишний повод почитать исходники в шарпе
Roman
А вообще, я когда увидел эту задачу, быстро в голове прокрутил 3 реализации (Buckets=LinkedList, Linear probing и Buckets=RBTree) понял, что все помню и сделал capacity = 10^6. ;D
Evgeniy
Viktor
Roman
Кстати, я вот никогда не мог без подглядки написать RBTree. Я все время забываю правила, которые надо соблюдать, чтобы дерево было по определению красно-черное. И еще левая и правая ротации пишу с ошибками с первого раза)
Порридж В Ко-ливинге
Viktor
Viktor
Так что особенно не ясно зачем это знать если только не для олимпиадок
Порридж В Ко-ливинге
Roman
Red-Black Tree
Roman
Не-а, только в академических целях) Когда участвовал в олимпиаде, наблюдал картину, как парень накинул все дерево за 2-3 минуты)
Evgeniy
Evgeniy
Viktor
Пипец, решал сейчас задачку на дп (готовлю на завтра статью), есть стандартная проверка
const dp = {};
// ...
if (dp[suffix]) {
return dp[suffix];
}
И упал один тест, где dp["constructor"] сказал true в этом месте, хотя не должен был. Это урок про зачем нужен hasOwnProperty 🙂 Вкрутил Map, в итоге.
Viktor
люблю джаваскрипт. веет теплом.
Viktor
@KlenZeleny кстати, это та задача про concatenated words. я решил вкрутить туда дпшечку для порядка, а то вариант с сортировкой выглядит как хак больше.
Evgeniy
Viktor
но есть этот тест с a, aa, aaa, aaaa, ... где такой кеш бесполезный.
Viktor
хоть с конца начинай обход.
Evgeniy
Viktor
копирование строк будет, да.
Viktor
печаль-беда.
Evgeniy
Кстати, а почему бы не хранить в сете не саму строку, а ее хеш?
Ilia
А напомните плз ссылку на эту задачу