#11. Слияние двух упорядоченных списков | Алгоритмы на Python

Поделиться
HTML-код
  • Опубликовано: 27 сен 2024
  • Рассматривается эффективный алгоритм слияния двух упорядоченных списков в третий, так, чтобы результирующий список тоже был упорядоченным. Приведена реализация этого алгоритма на языке Python.
    algorithm-merge-lists.py: github.com/sel...

Комментарии • 28

  • @ДаниилМатвиенко-ш6ш
    @ДаниилМатвиенко-ш6ш 10 месяцев назад +2

    Спасибо большое за то, что показали как можно ещё реализовать данный алгоритм!

  • @victoriakubler164
    @victoriakubler164 Год назад +1

    спасибо огромное за объяснение. Все доступным языком без усложнений

  • @friend1cat
    @friend1cat 3 года назад +4

    Спасибо, Сергей!

  • @ВиталийКалиниченко-х8э

    Спасибо, все подробно разжевываете!

  • @АлександрСолодников-ф8с

    Благодарю за подробное объяснение! 👍

  • @МамонтовОлег-в9о
    @МамонтовОлег-в9о 2 года назад +1

    блин
    я через попу нулевых элементов реализовывал
    хотя через указатели мне кажется более программистским подходом
    спасибо, Сергей, за науку!

    • @PythonHedgehog
      @PythonHedgehog 8 месяцев назад

      Через указатели быстрее.

  • @freisnz
    @freisnz 3 месяца назад +1

    result = []
    while a and b:
    result.append(a.pop(0) if a[0] < b[0] else b.pop(0))
    result.extend(a if len(a) >0 else b)

  • @oleggreen1244
    @oleggreen1244 3 года назад +2

    Возможно будет ещё быстрее если переносить не по 1 числу, а кусками. Т.е например 2,7,8 и 1,3,4,5,6,9 тут числа 3,4,5,6 можно перенести одной командой. Но нужно искать такие куски.

  • @PythonHedgehog
    @PythonHedgehog 8 месяцев назад +1

    Удивительно, но факт. Формирование такого списка намного (на порядок или чуть больше) дольше, чем конкатенация (или расширение) двух списков, а затем их сортировка с помощью метода списков sort() или встроенной функции sorted().
    Причина в механике метода append().
    Для С++ такая сортировка, наверное, годится, но для Python - неоптимальное решение.

  • @user-tx6nx8pj5x
    @user-tx6nx8pj5x 8 месяцев назад +1

    Если программу запустить 2 раза, то к предыдущему выводу добавится еще один такой же список. И так можно делать до бесконечности. То есть сначала ответом был список: с. Запустили еще раза прогу: на выводе уже две "с". Сколько раз запускаешь прогу столько списков "с" и будет.

    • @mrdisillusion7515
      @mrdisillusion7515 4 месяца назад

      ну так напиши функцию, которая работает не с самим списком, а с его копией

  • @EnjoyTheDeluxe
    @EnjoyTheDeluxe 11 месяцев назад +1

    Я не понимаю, а как программа знает о том, что счетчик i принадлежит первому списку, а счетчик j ко второму списку?

  • @chopik612
    @chopik612 3 года назад +1

    Учусь программированию пока по этому каналу для того, чтобы потом брать какие-либо заказы на фрилансе. У меня вопрос, достаточно ли того, что предлагает здесь автор на своём канале, чтобы выполнять какие-либо маленькие заказы? Потому что я не знаю, какие именно нужны практические знания для этого. может быть посоветуете хороший курс? желательно по с++.

    • @selfedu_rus
      @selfedu_rus  3 года назад

      По основам С++ здесь тоже есть курс ruclips.net/p/PLA0M1Bcd0w8zHoZcf7IWTM4aQESDSErUs

    • @chopik612
      @chopik612 3 года назад

      @@selfedu_rus понимаю, сейчас его и прохожу. Но этого же явно недостаточно. Я хотел спросить, на что в С++ стоит сделать упор, что для работы с заказами желательно знать ещё и возможно ли обойтись только С++ или питон всё равно нужен как минимальные требования. Спасибо!

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      @@chopik612 Одного С++ явно мало, нужно знать библиотеки, как правило, STL + графика + интерфейс. И, конечно же, опыт программирования хотя бы на своих задачках + стандартные алгоритмические подходы + паттерны проектирования.

    • @chopik612
      @chopik612 3 года назад

      @@selfedu_rus спасибо, это уже конкретнее. А вот что понимается под "графикой" и "интерфейс", на канале это есть?

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      @@chopik612 графика - это OpenGL или DirectX или просто умение рисовать в клиентском окне. Интерфейс - это программы с окнами, менюшками, диалоговыми окнами и т.п.

  • @maxulanov3893
    @maxulanov3893 3 года назад

    Какая сложность алгоритма?

    • @selfedu_rus
      @selfedu_rus  3 года назад

      O(N)

    • @carbon2409
      @carbon2409 5 месяцев назад

      @@selfedu_rus разве не O(n+m)? К слову, на литкоде есть такая же задача уровня хард, но там требование выполнить ее за O(log n+m). Как это сделать? Бинарным деревом как-то?

  • @Bah1918
    @Bah1918 3 года назад +4

    Всегда интересно.

  • @яндин
    @яндин 2 года назад +1

    Спасибо за понятное объяснение.

  • @povny
    @povny 3 года назад

    а если нужно получить массив по возрастанию из двух массивов по убыванию

    • @selfedu_rus
      @selfedu_rus  3 года назад

      запишите элементы в обратном порядке и все

  • @SergeyOrlov-yk9rq
    @SergeyOrlov-yk9rq 2 месяца назад

    Если сразу добавлять оба равных элемента в список, то это будет меньше итераций.
    И если в списках много одинаковых элементов, то выигрыш будет существенный.
    while i < N and j < M:
    if a[i] == b[j]:
    c.append(a[i])
    c.append(b[j])
    i += 1
    j += 1
    elif a[i] < b[j]:
    c.append(a[i])
    i += 1
    elif a[i] > b[j]:
    c.append(b[j])
    j += 1

  • @ruzoompartygmail4273
    @ruzoompartygmail4273 10 месяцев назад +2

    Спасибо огромное. Отличная подача материала!