Двачаны, собеседусь на питониста дали кое какие задание и одно из них мне непонятно. Просто объясните что от меня хотят, писать за меня не надо.
Дано: список dict-объектов вида вида {"key": "value"}, например [{"key1": "value1"}, {"k1": "v1", "k2": "v2", "k3": "v3"}, {}, {}, {"key1": "value1"}, {"key1": "value1"}, {"key2": "value2"}].Напишите функцию, которая удаляет дубликаты из этого списка. Для примера выше возвращаемое значение может быть равно [{"key1": "value1"}, {"k1": "v1", "k2": "v2", "k3": "v3"}, {}, {"key2": "value2"}].Обязательное условие: функция не должна иметь сложность O(n^2).
>>261709947 Что, пограмисты изобрели себе ммр? А то хуйня какая-то, джуны-сеньоры, ничего не понятно, а так приходишь: "У меня 8700 ммр в питоне" и всем сразу понятно всё.
>>261709790 (OP) Создаешь в функции пустой лист, делаешь проход по входному листу, если элемент входного листа новый - пихаешь во внутренний лист. Скорее всего это будет O(n^2), поэтому делай рекурсией, лол.
>>261709790 (OP) Куда собеседование то? Сомневаюсь что в реальном коде будет такой дурацкий шмоток словарей и да ещё их сортировка будет требовать дополнительной оптимизации. Это же всё на стадии организации данных пресекается.
>>261711780 Загугли timsort и binary search. Если ты не тупой, то сделаешь все по гайдам, а, возможно, и как-то упростишь. https://habr.com/ru/company/otus/blog/565640/ Суть такова: сортируешь по тимсорту, а потом этот самый лист пробегаешь по бинарному поиску. Выходит время n * log ^ 2 (n), если я не ошибаюсь.
>>261709790 (OP) >Просто объясните что от меня хотят От тебя хотят избавиться таким способом.
>функция не должна иметь сложность O(n^2) Можешь написать йоба функцию, которая будет еще медленнее и ржать им в лицо.
Либо тебя реально наебывают, либо ты собеседуешься у таких же даунов. Тебе минимум нужно посмотреть весь массив это уже n. Дальше тебе нужно хранить информацию об уникальных копиях и сверяться с ней каждый раз. Единственный тут вариант это создать второй массив и двоичным поиском проверять есть твой объект в нем или нет. Если его там нет, то у тебя сразу будет отсортированное место вставки, тогда ты часть массива двигаешь вправо, и вписываешь туда новый объект. Но в любом случае это около n^2, потому что тебе нужно n раз поискать log2(n) (на самом деле меньше, потому что n = [0; n]) + переписать массив в худшем случае n раз вправо, а это опять читать элементы и записывать элементы.
>>261713039 Алсо, второй вариант, это ты сортируешь за n × log(n) массив и дальше из него линейно выкидываешь в новый массив уникальные копии, это будет n + n × log(n).
>>261709790 (OP) Собеседования какие-то. Почему до сих пор не запилили какой-нибудь сайт или приложение, где просто в сидят все программисты и пишут код. Потом дружно делят деньги между собой.
>>261713251 Господи, какой же ты тупой, я просто хуею. set(лист) - o(n) на проход листа o(1) на добавление говна в сет (хуевый амортизированный o(n)). o(n) + o(1) (или o(n)) дает o(n). list(сет) - o(n). o(n) + o(n) сколько будет?
>>261714060 Если только пальцем в жопу. Нельзя так просто взять и объяснить квантовую механику языком, который был придуман одной обезьяной, чтобы объяснить другой обезьяне на какой пальме висят бананы.
>>261714079 Ну смари, у тебя есть коллекция из n элементов. Чтобы пройтись по ней один раз, ты должен выполнить n процедур. Если ты для каждого из элементов проходишься ещё раз по всем остальным n элементов, то ты вызываешь эту процедуру n * n раз. Это сложность O(n^2). То есть с увеличением числа n количество выполняемых процедур растёт как последовательность {n^2}.
>>261714573 Да. Ну я не уверен в реализации оператора in в питоне, но теоретически он проходится по всему массиву (в худшем случае, сложность всегда считается по худшим случаям), и сравнивает твой элемент со всеми остальными n элементами.
>>261715029 Что я имею ввиду: первый такт у меня пустой лист , значит IN не будет проходится по листу второй такт он пройдет 1 элемент третий такт 2 элемента и тд Это получается O(n+(n-1)) ВЕРНО?
>>261709790 (OP) Спасибо ОП, сегодня было много тредов про вкат в айти, и я даже преисполнился немного, что решил продолжить изучение Питона, и тут ты с тредов, где аноны гении решают задачу, суть которой я буквально не понимаю, что лишний раз убедило меня в том, что наверное вот это вот все, вся эта абстрактная хуйня, не для меня, и мне стоит начать изучать что либо другое. Спасибо тебе анон, спасибо вам аноны, что я немного разобрался в себе.
>>261715527 Да, даже есть формула log a (n) = log b (n) / log b (a) , это показвает, что можно выбрать абсолютно любое подлогарифмическое число. >>261715241 То есть даже на большом количестве входных данных, пайтон моментально вернет результат?
>>261709790 (OP) Пошел нахуй выродок брухлявой проститутки. Чтобы вы все вайтишники горели в аду. Запомни меня сука, я тот кто завалит тебя и таких как ты на собеседовании спрашивая про ебучие обходы деревьев и мне будет расрать что ты не будешь заниматься этим на работе. Моя задача - чтобы ты сдох от голода мразь
>>261716041 Что ж, мне на лекциях по шарпу про это не рассказывали. В любом случае, не думаю, что код, который может написать любой школьник, ожидают на собесе
>>261711365 Временная сложность это предел роста времени работы алгоритма при стремлении к бесконечности размера исходных данных.
Соответственно, алгоритмы бывают логарифмическими (при поиске в бинарном дереве обычно бывает именно логарифмическая сложность), полиномиальными, экспоненциальными и т.д. Здесь мы дрочим на медленность, т.е. если мой алгоритм линейный, а твой экспоненциальный, то ты обосрался.
>>261714060 n это примерное количество элементов с которыми надо что-то сделать O(log(n)) или O(n^2) это сколько раз прийдётся использовать каждый из них. Идеал - O(1), наихудший вариант (примерно) - O(n*n!) Чтоб понять, насколько это плохой случай - https://ru.wikipedia.org/wiki/Bogosort