Оценка сложности алгоритма. Сложность алгоритмов. Big O, Большое О

Sdílet
Vložit
  • čas přidán 27. 06. 2017
  • Полный видео-курс со скидкой 50%: cronis.by/video-course-sale/
    Бесплатное обучение: cronis.by/video-materials/
    Промо-код YT_20 на -20% на новый живой онлайн курс: cronis.by/online-cart
    Видео-курсы:
    ➤ Полный курс оценки сложности: www.udemy.com/course/big-o-ru...
    ➤ Полный курс о двоичных числах: www.udemy.com/course/binary_s...
    ➤ Полный курс о двоичных деревьях: www.udemy.com/course/cronis_b...
    Видео расскажет базовые вещи касающиеся Big O и оценки сложности алгоритмов:
    ➥ Что такое Big O;
    ➥ Откуда в алгоритмах берется log N;
    ➥ Как оценивать алгоритмы;
    ➥ Решения типовых задач по Big O.
    Мы поговорим, что такое оценка сложности алгоритма и сложность алгоритмов, а также расскажем что такое Большое О.
    Видео является частью лекции школы Cronis: cron.is
    Оглавление:
    ⌚ 02:27 Big O пример из реального мира
    ⌚ 03:37 Временная оценка сложности
    ⌚ 10:30 Отбрасывание констант при оценке сложности
    ⌚ 14:30 Сложение и умножение сложностей
    ⌚ 15:38 Время выполнения log N
    ⌚ 18:40 Примеры оценки сложности
    ✎ Задачи с Google, Facebook, Yandex: • Google задачи. Задача ...
    Отдельные темы с нуля:
    ➤ Двоичная система: • Двоичная система счисл...
    ➤ Машина Тьюринга: • Машина Тьюринга. Принц...
    ➤ Индукция: • Лекция 02. Математичес...
    ➤ Рекурсия: • Рекурсия. Полная теори...
    Подробнее можно прочитать здесь: Cracking the Coding Interview by Gayle Laakmann McDowell
    Автор книги выше использует материалы: Steven S. Skiena
    The Algorithm Design Manual
    В видео использованы примеры из данных книг
    Телеграмм: t.me/cronisby
    Почта: info@cron.is
    #Big_O #logN #Оценка_сложности_алгоритмов #О_Большое #двоичный_поиск #бинарный_поиск

Komentáře • 334

  • @AlexeyShram
    @AlexeyShram Před 6 lety +119

    На 13:50 говорится: "На самом деле степенная функция растет гораздо быстрее N в степени 100. Таким образом ответ будет O(2^n)"
    Допущена ошибка, т.к N^100 - это и есть степенная функция.

    • @Cronis
      @Cronis  Před 6 lety +27

      Спасибо! Оговорился :)

    • @TheANTIdos
      @TheANTIdos Před 6 lety +6

      Правильнее было бы сказать, что можно доказать, что показательная функция на бесконечности растет быстрее степенной, вот и все. А так - да, большое спасибо за видео!

    • @yarikleto5515
      @yarikleto5515 Před 3 lety

      @@ic6406 да, действительно n^100 растет быстрее (когда n - небольшое число), чем 2^n. А так они очень похожи

    • @vanjka39
      @vanjka39 Před 3 lety +3

      @@ic6406 если рассмотреть функцию f(x)=2^x/x^10, видно что при x~100 f(x)>1, соответственно, показательная функция растет быстрее при x->inf

    • @jonyxip
      @jonyxip Před 3 lety +2

      @@ic6406 любая экспоненциальная функция растет быстрее чем полином.

  • @user-xd3we2qp4i
    @user-xd3we2qp4i Před 5 lety +19

    Спасибо, благодаря вашему видео у меня сложилось хоть какое-то понятие о "Big O".

  • @afriendRU
    @afriendRU Před 5 lety +8

    Просто бомба! Долго боялся взяться разузнать что такое сложность алгоритмов. Тут всё лаконично и объясняется до самого основания. Большое спасибо)

  • @xelaksal6690
    @xelaksal6690 Před 6 lety +11

    Огромное спасибо, всё ПРЕДЕЛЬНО понятно!

    • @Cronis
      @Cronis  Před 6 lety +2

      Спасибо! :)

  • @fusome
    @fusome Před 4 lety +6

    спасибо, человеческим языком и доходчиво. Наконец-то кто-то это сделал

  •  Před 5 lety +8

    Спасибо огромное за видео ! Все так понятно, особенно на конкретных примерах 💙

    • @Cronis
      @Cronis  Před 5 lety +1

      Спасибо за комментарий!

  • @user-ci4zy4tm2b
    @user-ci4zy4tm2b Před 5 lety +1

    Круто, очень живо и ясно. Огромное спасибо!

  • @user-yn2nv2jd4n
    @user-yn2nv2jd4n Před rokem

    Отличный и подробный разбор, качественное объяснение материала, спасибо большое

  • @user-jr8sz8cf3q
    @user-jr8sz8cf3q Před 3 lety

    Очень полезное видео для старта в изучении сложности алгоритмов!

  • @ua_dimka
    @ua_dimka Před 5 lety +6

    Очень редко оставляю коментарии, но тут все заслужено. Пожалуй, лучшее объяснение, что я встречал.

  • @lobaevni
    @lobaevni Před 5 lety +100

    Разбор темы сложности алгоритмов отличный. Супер. Долго не мог разобраться, скитался по интернету, а оказалось есть одно видео, которое за 25 минут излагает максимум полезной информации. Спасибо

    • @Cronis
      @Cronis  Před 5 lety +4

      Никита Лобаев, спасибо! Был рад помочь!

    • @pewpew7937
      @pewpew7937 Před 2 lety +1

      Дело говорит, твое видео самое полезное на эту тему во всем интернете. Большое спасибо за твой труд)

    • @Ana-rv6xm
      @Ana-rv6xm Před 10 měsíci

      Это материал по книге для подготовки к интервью CRACKING CODING INTERVIEW 189 PROGRAMMING Questions & SOLUTIONS

    • @Cronis
      @Cronis  Před 10 měsíci

      Читайте описание видео)

  • @michaeltes8864
    @michaeltes8864 Před 4 lety +11

    Очень понятно и доступно, все разложено по полочкам. Хотя и понятно, что это лишь вершина айсберга. Огромное спасибо автору!!!

  • @user-le3xt6iv4f
    @user-le3xt6iv4f Před 4 lety

    Спасибо за такие простые обьяснения, подписка!

  • @user-ws2bf2lx5o
    @user-ws2bf2lx5o Před 4 lety

    Спасибо, все лаконично, кратко и понятно!

  • @ebymamky
    @ebymamky Před 3 lety +2

    Просто супер, спасибо!!! Отдельное спасибо за примеры

    • @Cronis
      @Cronis  Před 3 lety +1

      Всегда рад помочь!

  • @oleglivcha5041
    @oleglivcha5041 Před 3 lety

    Спасибо ,очень информативно и доступно!

  • @user-hh4uu9jd9f
    @user-hh4uu9jd9f Před 5 lety +3

    Спасибо! отличные примеры из жизни. Очень наглядно! на 13:57 нагляднее пожалуй сравнивать 2^N and N^2. И первый график будет расти быстрее, намного быстрее второго, поэтому второй можно отбросить.

  • @xrilicc1154
    @xrilicc1154 Před 2 lety

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

  • @MrCoolDolphin
    @MrCoolDolphin Před 5 lety

    Офигенное видео!!! Большое спасибо автору!

  • @dmitry4638
    @dmitry4638 Před 3 lety

    Отличное разъяснение, спасибо!

  • @yessenzhol8989
    @yessenzhol8989 Před 4 lety +1

    спасибо огромное. с твоей подсказкой понял что прежде чем читать кнута и/или кормена надо учить Big O

  • @gofracarton
    @gofracarton Před 2 lety

    Спасибо вам! Проходил курсы от Яндекса по алгоритмам, где объясняли big O, но ничего не понял, а вы очень доходчиво и подробно объяснили. Ещё раз спасибо!

    • @Cronis
      @Cronis  Před 2 lety +1

      Рад помочь!

  • @Alex-zn6vj
    @Alex-zn6vj Před 2 lety

    Благодарю! Желаю вам всего самого наилучшего просто вау! ВСЕ ПОНЯТНООО!!!))

  • @goranlukash1374
    @goranlukash1374 Před rokem +1

    Реально спасибо за понятное объяснение....😁

  • @Alexander-is1eq
    @Alexander-is1eq Před 2 lety

    Полезная информация начинается где то с 6 минуты. Хотел уж было бросить смотреть, но слава богу не бросил. Полезная информация на самом деле полезная. Очень хорошо и понятно все объяснено, спасибо большое.

    • @Cronis
      @Cronis  Před 2 lety

      Рад, что досмотрели :)

  • @PaladinProg
    @PaladinProg Před 5 lety

    Спасибо большое, теперь стало понятнее

  • @Devivl
    @Devivl Před rokem

    Спасибо. В общих чертах стало понятно.

  • @pgn55555
    @pgn55555 Před rokem

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

  • @vladimirteplov8060
    @vladimirteplov8060 Před 3 lety +1

    Отличное видео и курс! Спасибо!

    • @Cronis
      @Cronis  Před 3 lety

      Рад помочь!

  • @ifdru74
    @ifdru74 Před 2 lety

    Большое спасибо за видео. Лично для меня тема стала понятнее.

    • @Cronis
      @Cronis  Před 2 lety +1

      Приходите к нам на интенсив, узнаёте ещё больше: czcams.com/video/FhS5IeCL8OU/video.html

  • @bor3007
    @bor3007 Před 4 lety

    Бро ты крут! Лайк однозначно. Пошел дальше готовиться к собеседованию в фейсбук

  • @88billizzard88
    @88billizzard88 Před 3 lety

    Супер круто, спасибо огромное, очень понятно и информативно, просто бомба

    • @Cronis
      @Cronis  Před 3 lety +1

      Спасибо за добрые слова!

  • @sergeyspitsyn3220
    @sergeyspitsyn3220 Před 3 lety +15

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

    • @Cronis
      @Cronis  Před 3 lety +1

      Сергей, вы абсолютно правы. К сожалению сделали ошибку при записи :(

  • @games4us132
    @games4us132 Před 5 lety

    Спасибо, помогли разобраться.

  • @vvlkblkc
    @vvlkblkc Před 2 lety

    Очень хорошее разъяснение - лучшее, что я видел.

    • @Cronis
      @Cronis  Před 2 lety

      Рад помочь!

  • @C2H5OHH
    @C2H5OHH Před 3 lety

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

  • @bahakulbarakov494
    @bahakulbarakov494 Před 3 lety +2

    Сложно очень воспринимать с первого раза XD. С 4 раза понял что да как. Объясняете очень хорошо спасибо за видео.

  • @ilyachudakov7944
    @ilyachudakov7944 Před 2 lety

    Отличное объяснение!

  • @maksimsergeevich5939
    @maksimsergeevich5939 Před 4 lety

    Спасибо за видео!

  • @sergpoltr2686
    @sergpoltr2686 Před 6 lety

    Хорошо рассказываете

  • @user-ur5kl3mc7j
    @user-ur5kl3mc7j Před 3 lety

    Я не очень сведущ в языках но на 19:11 в цикле скобки разные стоят[) потому сложность будет 0. Видос конечно супер щикарный, с примерами, по делу, без тормозов. Респект!

  • @rodgenk
    @rodgenk Před 6 lety

    Здорово, спасибо.

  • @pansiarhei
    @pansiarhei Před 5 lety +1

    Спасибо, хорошее видео

  • @kirillsushilnikov9614

    Спасибо, было познавательно

  • @marlonbrando458
    @marlonbrando458 Před 4 lety +1

    Спасибо, лайк!

  • @nexissis51
    @nexissis51 Před 5 lety

    Очень хорошее и познавательное видео

  • @SuperSonicLeader
    @SuperSonicLeader Před 3 lety

    спасибо, хорошее видео, лайк!

  • @po1upanow
    @po1upanow Před 2 lety

    Здорово, спасибо

  • @cracoh
    @cracoh Před 4 lety +4

    Спасибо зо подробное и доходчивое объяснение ключевых базовых понятий. 25 минут видео я посмотрел за час - прорешивал, записывал.
    Не знаю было ли где-то в комментах, но меня покоробила фраза на 17.11 - "сколько раз нужно умножить 1 на 2 чтобы получить 16?" мой ответ 8. потому как 1*2+1*2+1*2+1*2=8 а не 4.
    Но, в общем понятно что имелось в виду.

    • @Roomaa111
      @Roomaa111 Před 2 lety +1

      1*2*2*2*2=16

    • @cracoh
      @cracoh Před 2 lety +1

      @@Roomaa111 хех, класс!

    • @andrusia2048
      @andrusia2048 Před 2 lety

      @@Roomaa111 на сколько двоек нужно умножить единицу

  • @reddragons9979
    @reddragons9979 Před 5 lety +1

    Офигенное видео)

  • @nikolaysokolov9027
    @nikolaysokolov9027 Před 4 lety

    Отличное видео. Спасибо большое!

  • @bor4963
    @bor4963 Před 4 lety +1

    Хорошо! Нет понятия порядок функции. Тогда легко перейдете от =n к квадрату n

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Před 3 lety

    Очень круто

  • @yeson6581
    @yeson6581 Před 2 lety

    7:06, при передаче на самолёте размер передаваемых файлов не увеличивается, то есть по оси "Количество бит" нет изменения, меняется только время полёта, в зависимости от погодных условий и скорости самолёта. Прямая должна быть вертикальной. Тогда это конечно будет менее наглядно, но оси можно поменять местами и всё будет ok.

    • @Cronis
      @Cronis  Před 2 lety +2

      При росте количеств бит время не меняется. График верный

  • @garikspiridonov3869
    @garikspiridonov3869 Před 4 lety +4

    21:13 Квадрат не стал на половину меньше, он стал меньше, приблизительно на одну треть. Хотя согласен с вами, как следует из вашего обьяснения это не важно.

    • @Cronis
      @Cronis  Před 4 lety

      Вы правы, там не совсем половина, а меньше. Но каквы и сказали, мы игнорируем константы :)

  • @yakovga
    @yakovga Před 4 lety

    Спасибо

  • @alionabelomenova1075
    @alionabelomenova1075 Před 4 lety

    Огромное спасибо, очень последовательно и понятно.

    • @Cronis
      @Cronis  Před 4 lety

      Был рад помочь!

  • @dimaspng
    @dimaspng Před rokem

    Спасибо от души!

    • @Cronis
      @Cronis  Před rokem +1

      На здоровье)

  • @vonarut
    @vonarut Před 5 lety +2

    Огромное Спасибо! Наконец-то понял что такое big O !!! 2019 !!!

  • @user-my9sg8we9h
    @user-my9sg8we9h Před 2 lety +1

    Дополню. Big O от слова Порядок (Ordnung)

  • @awakeupcall5336
    @awakeupcall5336 Před 4 lety +9

    22:58 подскажите, откуда с неба взяли L * log L ?

    • @Cronis
      @Cronis  Před 4 lety +3

      В видео говорится, что мы сортируем строки длиной L. В любой сортировке есть всегда код вида if(str1 > str2). А сравнение строк одинаковой длины L -- это сравнение их L символов. Следовательно, мы умножаем сложность сортировки на L

  • @user-bk1my2xs9j
    @user-bk1my2xs9j Před 5 lety

    Поправьте, если ошибся. На 9.30 у рекурсивной функции сложность О(1), пожалуй не соглашусь. Попробуйте выполнить эту функцию с х=50, там скорее квадратичная зависимость О(n2). И ещё интересен случай, если подать на вход 0)

    • @Cronis
      @Cronis  Před 5 lety

      Тело функции выполняется за O(1) т.к. не зависит от N. Но выполнятся это самое тело N раз. Поэтому сложность итоговая равна O(N)

  • @hello_world_zz
    @hello_world_zz Před rokem

    Препод супер, в стиле Грокаем Алгоритмы

  • @zion4d
    @zion4d Před rokem

    пожалуй лучшее!
    теперь можно приступать к "грокаем алгоритмы"

    • @Cronis
      @Cronis  Před rokem +2

      Спасибо! Грокаем алгоритмы -плохая, поверхностная книга, которая путает больше, чем помогает.

    • @zion4d
      @zion4d Před rokem

      @@Cronis спасибо! Учту!

  • @user-dw4ol9ye7z
    @user-dw4ol9ye7z Před 2 lety

    12:43
    n< n^2 , n -> inf не тому, що в 2 рази більша друга функція (вона взагалі в n раз більша) , а тому , що похідна другої функції рівна 2n , а першої 1, отже inf > 1, тому і нехтуємо.

  • @alexzhyshko9762
    @alexzhyshko9762 Před 5 lety +2

    В примере 3 было сказано, что сложность алгоритма N^2, но если посмотреть внимательнее, то N(N-1)(N-2)...1 это Nфакториал. Тоесть будет О(N!). И если смотреть по квадрату 4х4,то отсекается не половина, а немного меньше половины, что, логично предположить, будет О(nlogn). И если расписывать эти два случая, то мы получим равенство сложностей N! =~ NLogN. Если в чем-то не прав, то поправьте пожалуйста

    • @Cronis
      @Cronis  Před 5 lety +1

      будет:
      N + (N - 1) + (N - 2) .... + 3 + 2 + 1 = N(N+1)/2 = O(N^2)
      В треугольнике тоже кружки идут как 4 + 3 + 2 + 1 = 4*(4+1)/2 = 10

  • @maksimsergeevich5939
    @maksimsergeevich5939 Před 4 lety +1

    Подскажите пожалуйста, если формула расчета кол-ва итераций для алгоритма сортировки равна - n*(n/10) то какая здесь сложность получается?
    O(n) или O(n^2) ? Должен ли я отбросить n/10 так как это "n" становится в 10 раз меньше другого n. Или правильней будет отбросить знаменатель 10, тогда получится, что у нас остается n^2.
    Как правильно? Я не понимаю... Если ответите, сразу поясните пожалуйста, почему должен быть именно такой ответ.
    Или в видео неточность? Может правильное сказать, что незначительное n это не то которое более чем в 2 раза больше, а то которое меньше на степень другого n?

    • @Cronis
      @Cronis  Před 4 lety +1

      Добрый день! Здесь сложность N^2 т.к. мы отбрасываем константы все, а 10 это констатнта. Правило очень простое -- все что константа сразу отбрасывается, а из оставшихся слагаемых выбирается то, у которого выше скорость роста (еще называют порядок). Градация по убыванию: N! -> 2^N -> N^2 -> N * log N -> N -> SQRT(N) -> log N -> 1

    • @maksimsergeevich5939
      @maksimsergeevich5939 Před 4 lety

      @@Cronis Спасибо! Все понятно теперь! А там где N^2 подразумевается число в любой степени? от 2 и выше? Если будет N^2 * N это будет N^3?

    • @Cronis
      @Cronis  Před 4 lety +1

      @@maksimsergeevich5939 Не за что :) N^2 < N^3 < N^... < N^X чем меньше степень, тем меньше скорость роста т.е. N^2 + N^3 = O(N^3)

  • @iakovryzhichka2832
    @iakovryzhichka2832 Před rokem

    Спасибо за видео! Надеюсь поможет на собеседовании. Может уже спрашивали, но попытаю счастье. Вот не учитываются константы для оценки сложности. Это если у нас бесконечное число операций, то да, но на практике если я пройдусь по конечному массиву за одну секунду, то по идее полмассива я пройду за полсекунды. И если стоит задача оптимизации, то константы тоже важны, верно?

    • @Cronis
      @Cronis  Před rokem

      Ответ очень очень длинный.
      Коротко - оценке сложности не показывает точно сложность, а примерную. И на такие мелочи как константы никто не обращает внимание. Под видео есть ссылка на полный курс по оценке сложности, там первые 40 минут подробно рассказывается про константы и как что работает

  • @user-my9ux9mb1m
    @user-my9ux9mb1m Před 5 lety +23

    В 12:46 говорится, что N^2 больше в два раза чем N. Но это бред! В два раза больше - это 2*N, а N^2 - это больше N в N раз. Да и в целом, учитывая оговорки и некорректные высказывания, указанные ниже в комментариях, можно сделать вывод, что к такому лектору на эти курсы ходить не стоит. Хотя в целом видео заслуживает внимания.

    • @Cronis
      @Cronis  Před 5 lety +4

      Андрей Чернов, спасибо за комментарий! Возможно вы не расслышали, что было сказано: эн квадрат __больше__ чем в два раза превышает эн. Поэтому мы говорим, что эн квадрат намного больше эн.

    • @user-my9ux9mb1m
      @user-my9ux9mb1m Před 5 lety +2

      Переслушал еще раз. И опять слышу то, что написал выше. Дословно то, что говорится в видео: "Значительно - это значит в два раза. Если эн в два раза больше другого числа эм, значит эн значительно больше чем эм". Я понял, что хотел сказать лектор, но это прозвучало на фоне объяснения почему N^2 значительно больше N. Вот как раз слов "эн квадрат _больше_ чем в два раза превышает эн" сказано не было. Поэтому возникает путаница.

    • @nalilata
      @nalilata Před 5 lety +1

      @@Cronis извините, а зачем нам это "N^2 значительно больше N" если чтобы его отбросить, достаточно того, что N не больше N^2. мы даже строчкой выше N^2 отбросили, к чему такая возня с N, если мы его отбросим, в 2 раза оно меньше N^2 или даже в 1?
      и дальше 18:28 "или N + log N" - log N же отбрасывается?

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Před rokem

    Видео отличное. Правда бинарный поиск можно было нагляднее показать графически: отрезками, деревом или еще как то

  • @taboollive727
    @taboollive727 Před 3 lety

    Насколько я понял в примере 3 - нужно учитывать дополнительно 4 наружных цикла, если бы он был заполнен кодом. Тогда было бы 16 + 4. O(N² + √N) - так можно было бы записать, если наружный for тоже вызывал бы метод foo()? И по моему sortString сортирует не строки а массивы char в строках? Просто фразу не понял.

    • @Cronis
      @Cronis  Před 3 lety

      Не понял вопрос. В третьем примере сложность O(N^2) т.к. foo выполнится N + (N-1) + (N-2) + ... + 2 + 1 = N(N+1)/N = O(N^2) раз. Это арифметическая прогрессия

  • @nano28950
    @nano28950 Před rokem

    Лучший!

  • @turbojonah2881
    @turbojonah2881 Před 4 lety +2

    Здравствуйте, спасибо за видео! Есть один вопрос. На 20:05 вы говорите, что сложность алгоритма будет ровна О(N+(N-1)+(N-2)+...+2+1). Не совсем понятно почему вы складываете кол-во операций, ведь в предыдущем примере с вложенным циклом, сложность алгоритма ровнялась О(N*N). Разве тут не должно было получится, что сложность алгоритма ровняется О(N*N+N(N-1)+N(N-2)+...+2N+N?

    • @Cronis
      @Cronis  Před 4 lety +1

      Добрый день! Смотрите: в первом цикле i = 0, то есть второй цикл идёт от j = 0 до N. Затем i = 1 то есть второй цикл идёт от j = 1 до N затем второй цикл идёт от j = 2 до N. Следуя этой логике, получаем N+(N-1)+(N-2)+...+2+1

    • @user-dt8vj3cv4e
      @user-dt8vj3cv4e Před 3 lety

      @@Cronis Не согласен. На первой итерации выполняем вложенный цикл N раз по N раз, у этой итерации О(N*N); затем N раз по N-1 раз, О(N*(N-1));затем N раз по N-2 раз, О(N*(N-2)) и т.д. Так как итерации выполняются последовательно, то О итераций складываем: О(N*N+N(N-1)+N(N-2)+...+2N+N), после упрощения ответ будет такой же как в видео О(N*N), но описание как его получили в видео не правильное.

    • @MrPr0927
      @MrPr0927 Před 3 lety

      @@Cronis тут вы не правы, из N+(N-1)+(N-2)+...+2+1 никак не вывести N^2, следовательно, как и писали выше правильная запись будет вида N*(N+(N-1)+(N-2)+...+2+1)

    • @Cronis
      @Cronis  Před 3 lety

      @@MrPr0927 это арифметическая прогрессия. Можете подробнее прочитать здесь: ru.wikihow.com/%D1%81%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D1%8C-%D1%86%D0%B5%D0%BB%D1%8B%D0%B5-%D1%87%D0%B8%D1%81%D0%BB%D0%B0-%D0%BE%D1%82-1-%D0%B4%D0%BE-N

    • @MrPr0927
      @MrPr0927 Před 3 lety +1

      @@Cronis Ок, понял, тоесть не во всех случаях когда видим вложенный цикл нужно подразумевать перемножение сложностей, как было сказано ранее в видео?

  • @superninja2749
    @superninja2749 Před 2 lety

    Здравствуйте, почему 16:20 говорится, что мы должны искать число сначала в 16 элементах, если мы уже делим его на два? то есть, мы ищем в 8 элементах, немного не понял момент.

    • @Cronis
      @Cronis  Před 2 lety

      Сначала в массиве 16 элементов, потом 8, потом 4, потом 2, потом 1.
      Поэтому мы сначала ищем среди 16 элементов

  • @iforand
    @iforand Před 3 lety

    7:28 Как это O(0) означает, что ничего не происходит? O(0) означает, или что для выполнения задачи не требуется выполнять каких либо действий, или что количество операций для выполнения задания уменьшается с ростом сложности задачи асимптотически к нулю. Раньше же сказано, что оценка верхней границы не зависит от времени, а значит говорить, что-то что-то происходит или не происходит не корректно.

    • @Cronis
      @Cronis  Před 3 lety +1

      Вы полностью правы. Но как это все сказать для простого человека, который впервые это видит и не напугать его сложными формулировками? :) поэтому вот просто и сказано - суть отражает и не пугает. Под видео есть ссылка на оценку сложности со строгой математикой и с теорией множеств на 2.5 часа. Там мы рассказываем уже все четко для тех, кому нужна математическая строгость. А здесь для широкого зрителя :)

  • @nighthoves7212
    @nighthoves7212 Před 4 lety +1

    частично поняла суть, но по сравнению с тем, что я смотрела в инете чтобы понять данную тему - это лучшее

  • @xfg9183
    @xfg9183 Před 4 lety

    Подскажите правильно ли я оценил сложность алгоритма gist.github.com/xfg/3f91181e14c20239affefc218d430edf ? Здесь рекурсия в цикле, которая перебирает объект, в который могут быть вложены другие объекты. У меня получилась сложность O(N * A) насколько я понимаю, это хуже, чем O(N) но всё еще намного лучше, чем O(N * N)

    • @Cronis
      @Cronis  Před 4 lety

      При наличии цикла сложность будет описываться как O(A^N) из-за дерева рекурсивных вызовов

    • @xfg9183
      @xfg9183 Před 4 lety

      @@Cronis спасибо.

  • @ruslanvolovik2745
    @ruslanvolovik2745 Před 4 lety

    На самом деле log2N это будет когда мы будем точно делить список(массив) попалам на каждой итерации но мы можем же делить на 3, 4 и тд частей и уже не получится логарифм с основанием 2 поэтому в видео есть неточности. Основа логарифма отбрасывается не из-за того что это константа а из-за того что деление списка может быть больше чем на 2 части

    • @Cronis
      @Cronis  Před 4 lety

      Спасибо за комментарий! Основание логарифма это константа. Доказательство это свойство 13: 2.bp.blogspot.com/-RFm5xlyqFf0/WuBL2YudoEI/AAAAAAAAByk/tRjvR5l7FvkB_ylwBEPEh_8x63UTxW8kwCLcBGAs/s1600/009.jpg
      По поводу как он образуется: именно деление объекта пополам дает основание 2. Если бы вы делил на части 25% и 75%, было бы основание 4/3. Что тоже константа

    • @ruslanvolovik2745
      @ruslanvolovik2745 Před 4 lety

      @@Cronis ок

    • @manOfPlanetEarth
      @manOfPlanetEarth Před 3 lety +1

      @@ruslanvolovik2745
      а как с гонором ты начал. и тут де в лужу сел. неуч😂

    • @ruslanvolovik2745
      @ruslanvolovik2745 Před 3 lety

      @@manOfPlanetEarth неуч то ты, я смотрел этот весь бред по сложность алгоритмов и подобную пургу только ради интереса, не более. Я понял, что все это бесполезные вещи, потому что у меня есть друг с которым каждый день общаюсь, он недавно закончил стажировку в гугле, сам сказал что пободные хрени не пригодились в самом гугле, что его очень сильно удивило. Учи дальше этот бред никому не нужный (деньги оно тебе не принесет, баран)😱

    • @manOfPlanetEarth
      @manOfPlanetEarth Před 3 lety

      @@ruslanvolovik2745
      ты в москве сейчас?

  • @awakeupcall5336
    @awakeupcall5336 Před 4 lety

    ну окей мы имеем O (L * N * (logL + logN)) - это сильно плохо? какие рекомендации, как избегать сложности алгоритма, кроме того, что быть внимательным к вложенным циклам?

    • @Cronis
      @Cronis  Před 4 lety

      Быть внимательным. Если бы была формула идеального кода, его бы писали роботы, и программисты были бы не нужны :)

  • @user-br2yk6dd5n
    @user-br2yk6dd5n Před 2 lety

    А почему на 24:12 сложность сортировки строки log(l) ?

    • @Cronis
      @Cronis  Před 2 lety

      Сложность написана L * log (L)

  • @user-fy2fc6yq4l
    @user-fy2fc6yq4l Před 3 lety

    В современном мире ещё очень важное значение играет возможность распараллелить алгоритм. Но я не встречал, как эта концепция вписывается в концепцию bigO. То есть кроме времени и памяти важно понимать, а возможно ли в принципе распараллелить вычисление или нет. От этого ведь тоже может зависеть оценка времени очень сильно.

    • @Cronis
      @Cronis  Před 3 lety +7

      Распараллеливание ни на что не влияет с точки зрения сложности. Представьте, что Вам надо последовательно вывести на экран N = 300 букв. И у вас есть 3 процессора. Да, каждый из них выполнит в 3 раза меньше работы и алгоритм выполнится в 3 раза быстрее. То есть итоговая сложность будет N/3 = O(N). Как видно, сложность алгоритма все равно остается линейной, т.е. прежней.
      Чтобы бы O(N) превратилось в O(1), вам надо 300 процессов. И это всего лишь для обработки 300 букв. А представьте, что вы работает с десятками тысячи букв или элементов массива. Тогда вам необходимы десятки тысяч машин, чтобы решить задачу.
      Поэтому нужно смотреть на алгоритм, а не на распараллеливание. Оно улучшает ситуацию, но на какое-то константное значение. А константы в оценке сложности отбрасывается.

    • @alex_mech
      @alex_mech Před rokem

      Ответчик выше имхо слабо знаком с теорией параллельных вычислений, на это намекает грубое сравнение «в лоб» в стиле «чтобы из О(300) сделать О(1), нужно 300 истинно параллельных исполнителей», хотя это всего лишь один частный случай из множества решений.
      Теория по распараллеливание вычислений есть, она несложная как со стороны алгоритмов, так и со стороны прикладной математики, порог вхождения не настолько высокий (и связь с bigO там кстати тоже оговаривается)

  • @awakeupcall5336
    @awakeupcall5336 Před 4 lety +2

    17:17 смущает запись "сколько раз умножить 1 на 2 чтобы получить 16?" сколько раз не умножай 1 на 2 , 16 не получишь ...
    имеется в виду в какую степень возвести 2 ж, откуда тут 1

    • @Cronis
      @Cronis  Před 4 lety

      a wakeup call спасибо за вопрос!
      Вот пример: 1 * 2 * 2 * 2 *2 = 16. Сколько раз необходимо умножить единицу на двойку? 4 раза

  • @shurale85
    @shurale85 Před 2 lety +1

    Скажите, пожалуйста, а почему сортировка строки L*Log_L?

    • @Cronis
      @Cronis  Před 2 lety

      Встроеннная в язык сортировка это сонтировка quicksort. Ей мы и сортируем строки. И ее сложность O(L * logL)

    • @pinkierar_real
      @pinkierar_real Před 8 měsíci

      @@Cronis это бы совершенно неочевидно)

  • @31more
    @31more Před 5 lety +2

    Почему в разборе первого алгоритма говорится, что функция вызывается n раз, ведь нет присваивания n:=n-1?

    • @Cronis
      @Cronis  Před 5 lety

      Подскажите, на какой минуте разбирается алгоритм?

  • @jakepomg317
    @jakepomg317 Před 2 lety

    Не понятно в 7 примере 24:15. O(N * L * log L + L * N * log N), так почему же появились скобки для логарифмов?: O(N * L * (log N + log L))
    Ведь если взять пример: 2 * 2 + 2 будет равно 6, поставив скобки: 2 * (2 + 2) ответ уже будет 8
    Только начал вариться в этой теме, может тут как-то по другому работает

    • @Cronis
      @Cronis  Před 2 lety

      Просто вынесли за скобки N * L.
      То есть не вашем примере 2 + 2 * 2 = 2 * (1 + 1 * 2)

    • @jakepomg317
      @jakepomg317 Před 2 lety

      @@Cronis Спасибо🙏 3 года прошло, а ответ за сутки, респект)

  • @andrewstrelnikov8700
    @andrewstrelnikov8700 Před rokem

    16:59 Сколько раз нужно умножить 1 на 2 чтобы получить 16? В целом ход лекции мне нравится. Но вот бы поправили несколько ошибок...

    • @Cronis
      @Cronis  Před rokem +1

      1*2*2*2*2 = 16 сколько раз вы умножили 1 на 2 чтобы получить 16?

  • @Noir_Egoiste
    @Noir_Egoiste Před rokem

    Больше спасибо, но ничего не понятно, log N получается в половину меньше чем N и в меньше чем N^2 ?

  • @vsezanyato
    @vsezanyato Před 3 lety +1

    Классно, только где j = i .. n там не половину убрали, а меньше

  • @Excalib
    @Excalib Před 4 lety

    21:01 квадрат не стал на половину меньше, вы пропустили 4 шарика:)

    • @Cronis
      @Cronis  Před 4 lety +1

      Спасибо за комментарий! Квадрат стал "примерно" меньше на половину. Идея в том, что нам необходимо аппроксимировать результат (по русски прикинуть на глаз куда примерно стремится сумма)

  • @user-cy8uj5qk7i
    @user-cy8uj5qk7i Před 2 lety

    13:51 такая функция называется показательная

  • @zukora
    @zukora Před 2 lety

    Дякую, годно!

    • @Cronis
      @Cronis  Před 2 lety

      Пожалуйста

  • @olegchumin6634
    @olegchumin6634 Před rokem

    Лучшее объяснение, что видел вообще.

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n Před 3 lety

    Время на видео 22:05 разве не A^2 * B? Там же 3 цикла. И 2 из их - одинаковые (они и будут A^2). А 3-й будет B. Не так?

    • @Cronis
      @Cronis  Před 3 lety +1

      Добрый день, Ерванд! Первый цикл выполняется А раз, вложенный в него -- В раз, а вложенный в него -- 100000 раз. Итого получаем: A * B * 100000 = O(A * B)

  • @kirill4531
    @kirill4531 Před 3 lety

    17:16 Сколько раз нужно умножить 1 на 2 чтобы получить 16? Почему 4?
    1) 1х2 = 2
    2) 1х2 = 2
    3) 1х2 = 2
    4) 1х2 = 2
    ------------
    8
    8 =/= 16

    • @Cronis
      @Cronis  Před 3 lety

      1*2*2*2*2 мы умножили 1 на двойку 4 раза

    • @kirill4531
      @kirill4531 Před 3 lety

      @@Cronis это я понял, просто я считаю что формулировка задания некорректная.
      Сколько раз умножить 1 на 2 И На Результат (или как-то так) будет более правильно.
      А то сколько раз умножить 1 на 2 подразумевает последующее сложение результата

    • @Cronis
      @Cronis  Před 3 lety

      Почему подразумевает?

  • @korsman723
    @korsman723 Před rokem

    Здравствуйте, Немного непонятноm почему O(N² + N) будет равен O(N²), разве не O(N³) должно получиться? Это же базовое сложение, и пренебрегать этим - уже нарушение всей логики

    • @Cronis
      @Cronis  Před rokem

      Вы перепутали умножение со сложением:
      N*N^2 = N^3

  • @veronikavashkevich8815

    Длиной пишется с одной н (22:49)

  • @user-jf5ix4qw3d
    @user-jf5ix4qw3d Před 6 lety

    Сколько раз нужно умножить 1 на 2 что бы получить 16 ? Если только умножать то в результате всегда будет 2.

    • @Cronis
      @Cronis  Před 6 lety +1

      Спасибо за просмотр! Фраза означает: 1 * 2 * 2 * 2 * 2 = 16 то есть мы должны 4 раза умножить 1 на 2 чтобы получить 16

    • @user-jf5ix4qw3d
      @user-jf5ix4qw3d Před 6 lety +1

      Курсы Cronis, спасибо за ответ! Хорошо обьясняете не усложняя простые вещи, цветовая гамма видео хорошо подобрана, приятно смотреть не напрягает.

  • @macrorus1231
    @macrorus1231 Před 6 lety

    Что за прога для презентации?

    • @-leonid-
      @-leonid- Před 5 lety

      Там просто картинки меняются, наложена аудио дорожка.. в принципе многие программы подойдут..
      вот мне например нравится эта - Photodex ProShow Producer

  • @arslanannaev1292
    @arslanannaev1292 Před 6 lety +14

    Видео классное, правда не понятна фраза (17:02) "Сколько раз нужно умножить один на два, что бы получить 16?"

    • @Cronis
      @Cronis  Před 6 lety +2

      Спасибо за просмотр! Фраза означает: 1 * 2 * 2 * 2 * 2 = 16 то есть мы должны 4 раза умножить 1 на 2 чтобы получить 16

    • @niko-l-
      @niko-l- Před 6 lety +24

      Не корректно так говорить, т.к. сколько бы мы раз не умножали 1 на 2 результат всегда будет 2. Правельно вопрос будет звучать так: в какую степень нужно возвести 2, чтобы получить 16

    • @stanislavt5834
      @stanislavt5834 Před 5 lety +7

      "ПравЕльно будет ..."))))))
      Та, да...

  • @sherzod_mamadaliev
    @sherzod_mamadaliev Před 5 lety

    Cronis, а продолжение будет или это всё?

    • @Cronis
      @Cronis  Před 5 lety

      В ближайшие 10-14 дней появится видео на 2 часа полностью разбирающее теорию Big O во всех подробностях и самых сложны примерах. Но оно будет платным