Слияние списков. Метод двух указателей Python

Слияние списков. Метод двух указателей Python

egoroff_channel

3 года назад

30,848 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@arxxximed
@arxxximed - 04.12.2020 22:46

а n и m как длины списков определяются вручную исключительно в образовательных целях?

Ответить
@ГончаровСтепан
@ГончаровСтепан - 04.12.2020 22:49

Ты сказал что в случае с числами 288345510 программа будет выполняться быстрее, но мне кажешься что сравнивать все объекты списка это наоборот длиннее, и воспользоваться функцией sort, или sorted если sort нельзя легче.

Ответить
@андрейхоменко-и5я
@андрейхоменко-и5я - 04.12.2020 23:04

Прикольная задачка.

Ответить
@isok.atyrau
@isok.atyrau - 04.12.2020 23:31

Я лично решил сложив списки и использовал bubble sort))))

Ответить
@pavelsenokosov5402
@pavelsenokosov5402 - 05.12.2020 00:34

Всеравно не особо понял зачем повторно писать j<m? Почему в первом цикле не доходит?

Ответить
@Liberdu
@Liberdu - 05.12.2020 02:37

не видно на смартфоне, увеличить в IDE трудно было?

Ответить
@Badn088
@Badn088 - 05.12.2020 09:04

Хороший пример!)

Ответить
@felix30ua
@felix30ua - 06.12.2020 03:06

А с таким набором данных: [2,4, 5] и [1, 4, 5,10, 3,1] у вас получится применить "алгоритм"?! На кого это рассчитано?)))

Ответить
@arxxximed
@arxxximed - 06.12.2020 09:50

Господа, кто преминил функции sort или sorted, Вы конечно молодцы. Только данный урок о алгоритме, который входит в часть алгоритма сортировки слияния, о чем автор в конце видео и сказал. Это видео не о том, как быстрее сложить два списка и отсортировать. На уровне ядра python это конечно будет проходить все быстрее... Это видео об одном из популярных алгоритмах, которые хоть в жизни и не понадобятся, но учить (особенно начинающим) их обязательно нужно.

Ответить
@AeroAllion
@AeroAllion - 09.12.2020 07:27

В конце не обязательно проверять с if. Можно просто указать что добавляем необработанные хвостики списков:
с += a[i : ]
с += b[i : ]
И тот список, который мы прошли полностью, добавит "ничего", а другой - свой необработанный хвостик.

Ответить
@dimitrilarios2667
@dimitrilarios2667 - 09.12.2020 11:38

Отличный преподаватель. Алгоритмы - в плейлист.

Ответить
@ПарамПампам-ф7щ
@ПарамПампам-ф7щ - 31.12.2020 05:19

Это все, конечно, очень хорошо, но задача не учитывает, что элементы массивов могут задаваться не по порядку:
a = [1, 2, 5, -2, 3]
b = [2, 4, 8]
Если не пользоваться встроенным методом сортировки, то придется применять метод из урока merge sorted, что добавит лишнее время на вычисления

Ответить
@БолотбайТоробеков-г9к
@БолотбайТоробеков-г9к - 12.01.2021 15:36

Спасибо хороший доступный урок

Ответить
@Ortobolsky
@Ortobolsky - 01.02.2021 01:01

цикл for ещё не пройден, и про оператор * ничего не было. Задачу я решил сам, без звездочки и цикла for. Пришёл сюда глянуть на разбор задачи, после того как посмотрел, что решениях поголовно в принте пишут *. Какого хрена в задачах к уроку используется НЕ ПРОЙДЕННЫЙ МАТЕРИАЛ???? Задача плохая, решается циклом в два действия через методы списков, сложность задачи именно в геморном выводе принта.

Ответить
@nataliia_chy
@nataliia_chy - 19.02.2021 22:55

a=map(int,input().split())
c=list(input().split())
d=list(input().split())
c.extend(d)
leng=len(c)
f=[]
while c:
for i in range(leng):
f.append(min(c))
c.remove(min(c))
print(f)
Я сделала так. Артем, есть вопрос))) Почему 10 выскакивает в списке f первым элементом? Реально не могу понять. То есть все варианты до 10 пропечатываются правильно, а где больше 10 нет

Ответить
@ВалерияМалышева-ь1в
@ВалерияМалышева-ь1в - 11.04.2021 14:36

Отличный урок! Спасибо большое!👍🏻😊

Ответить
@danquimby8317
@danquimby8317 - 27.05.2021 11:37

а ты пробовал через set сделать ?

Ответить
@АлексейНестеров-ь1ы
@АлексейНестеров-ь1ы - 23.06.2021 19:21

Артём, здравствуйте.
Здесь изначально же списки отсортированы. Если будет например [6, 2, 8, 1] + [8, 3 , 6, 1], то на выход придёт [6, 2, 8, 8, 1, 3, 6, 1]. Как сделать сортировку?

И хочу сказать, раз уже пишу, что вы очень здорово подаете материал. Очень многое на ваших уроках понял, спасибо)
Присоединюсь к "спонсорству", так как лайками сыт не будешь))

Сейчас я прохожу курсы Junior от работодателя, спонсирует МФТИ, но лекции, которые проводят онлайн, по мне очень тяжело воспринимаются. Сейчас например, мы проходим виды сортировок, и по мимо самих кодов, написано много нотаций неудобочитаемых. Посоветуйте, пожалуйста, из ваших видеоуроков материал, в котором описано, что такое (n log n) и (Big O) доступным языком, если таковые имеются.

Ответить
@everyellachannel
@everyellachannel - 30.07.2021 20:12

Спасибо за урок!

Ответить
@userr19194
@userr19194 - 25.10.2021 20:08

Интересный метод, громоздкий, правда. После пузырькового-то.
А за урок, как всегда, большое спасибо!

Ответить
@lofiboy584
@lofiboy584 - 26.11.2021 04:10

Вот, с вводом у меня были проблемы, но после того как я видел этот разбор, я просто молчу.

Ответить
@xewuss3750
@xewuss3750 - 12.02.2022 20:34

Для информации. как от участника соревнований по алгоритмам. Самый быстрый по времени способ вывести список в печать - сначала превратить данные в строку, то есть: print(" " .jion(list) )

Ответить
@umni_kot
@umni_kot - 10.03.2022 19:11

как называется плагин( или настройка пайчарма) при котором выделяются все одинаковые переменные ? При этом чтобы это было не через ctrl+F

Ответить
@alex_pure
@alex_pure - 07.08.2022 19:08

Или так:
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
ab = a + b
c = []
while ab:
c.append(ab.pop(ab.index(min(ab))))
print(*c)

Ответить
@VideoGameAddiction
@VideoGameAddiction - 17.11.2022 21:27

че за бред нереальный вообще.... пишут про 2 строки, а по факту их 3... че к чему вообще, автору бы самому поучиться еще, а не учить других

Ответить
@МаксимМакаров-о5ы
@МаксимМакаров-о5ы - 22.01.2023 22:07

как вариант через генератор ```# Слияние списков

def generator_merge_inner(iter_1, iter_2):
elem_1 = next(iter_1, None)
elem_2 = next(iter_2, None)
while elem_1 is not None or elem_2 is not None:
if elem_1 is None or (elem_2 is not None and elem_2 < elem_1):
yield elem_2
elem_2 = next(iter_2, None)
else:
yield elem_1
elem_1 = next(iter_1, None)


def merge_lists(list_1, list_2):
return list(generator_merge_inner(iter(list_1), iter(list_2)))


if _name_ == '__main__':
list1 = [1, 5, 9, 10, 11, 13]
list2 = [2, 3, 4, 5, 6, 7, 8, 12]
print(merge_lists(list1, list2))```

Ответить
@konstantinmarun4432
@konstantinmarun4432 - 23.02.2023 16:04

Спасибо !

Ответить
@Evgeniy270885
@Evgeniy270885 - 25.02.2023 16:37

l1 = list(map(int, input().split()))
l2 = list(map(int, input().split()))
r = []
l_1_2 = l1 + l2
len_l = len(l_1_2)
while len(l_1_2):
r.append(l_1_2.pop(l_1_2.index(min(l_1_2))))
print(*r)

Ответить
@ХаннаФрея
@ХаннаФрея - 28.03.2023 20:35

Спасибо!

Ответить
@buddhagameplay5356
@buddhagameplay5356 - 24.04.2023 19:15

Я сложил два входных списка в один (list_sum), затем создал пустой список(list_sort) и закидывал в него min значения из list_sum, используя while. Закидывал именно в конец списка , одновременно удаляя закинутое из list_sum.

Ответить
@antonkulish6601
@antonkulish6601 - 09.07.2023 18:03

для демонстрации алгоритма слияния списков норм, для изучения программирования - только для начального уровня.

Ответить
@morinks
@morinks - 28.10.2023 16:44

n,m=list(map(int,input().split()))
a=list(map(int,input().split()))
x=list(map(int,input().split()))
s,d=a+x,[]
while len(s)!=0:
d.append(min(s))
s.remove(min(s))
print(*d)

Ответить
@гойда-гол
@гойда-гол - 17.11.2023 23:08

А не проще было сложить 2 списка через "+"? В условии "+" не запрещен , а потом пременить bubble sort , у меня вышло решение в 10 строк и то 6 эт сама сортировка.

Ответить