На 13:50 говорится: "На самом деле степенная функция растет гораздо быстрее N в степени 100. Таким образом ответ будет O(2^n)" Допущена ошибка, т.к N^100 - это и есть степенная функция.
@Cronis7 жыл бұрын
Спасибо! Оговорился :)
@TheANTIdos7 жыл бұрын
Правильнее было бы сказать, что можно доказать, что показательная функция на бесконечности растет быстрее степенной, вот и все. А так - да, большое спасибо за видео!
@yarikleto55154 жыл бұрын
@@ic6406 да, действительно n^100 растет быстрее (когда n - небольшое число), чем 2^n. А так они очень похожи
@vanjka394 жыл бұрын
@@ic6406 если рассмотреть функцию f(x)=2^x/x^10, видно что при x~100 f(x)>1, соответственно, показательная функция растет быстрее при x->inf
@jonyxip3 жыл бұрын
@@ic6406 любая экспоненциальная функция растет быстрее чем полином.
@ВолодимирБарибін-е8у5 жыл бұрын
Спасибо, благодаря вашему видео у меня сложилось хоть какое-то понятие о "Big O".
@lobaevni6 жыл бұрын
Разбор темы сложности алгоритмов отличный. Супер. Долго не мог разобраться, скитался по интернету, а оказалось есть одно видео, которое за 25 минут излагает максимум полезной информации. Спасибо
@Cronis6 жыл бұрын
Никита Лобаев, спасибо! Был рад помочь!
@pewpew79373 жыл бұрын
Дело говорит, твое видео самое полезное на эту тему во всем интернете. Большое спасибо за твой труд)
@Ana-rv6xm Жыл бұрын
Это материал по книге для подготовки к интервью CRACKING CODING INTERVIEW 189 PROGRAMMING Questions & SOLUTIONS
@Cronis Жыл бұрын
Читайте описание видео)
@afriendRU5 жыл бұрын
Просто бомба! Долго боялся взяться разузнать что такое сложность алгоритмов. Тут всё лаконично и объясняется до самого основания. Большое спасибо)
@ua_dimka6 жыл бұрын
Очень редко оставляю коментарии, но тут все заслужено. Пожалуй, лучшее объяснение, что я встречал.
@Alexander-is1eq2 жыл бұрын
Полезная информация начинается где то с 6 минуты. Хотел уж было бросить смотреть, но слава богу не бросил. Полезная информация на самом деле полезная. Очень хорошо и понятно все объяснено, спасибо большое.
@Cronis2 жыл бұрын
Рад, что досмотрели :)
@michaeltes88644 жыл бұрын
Очень понятно и доступно, все разложено по полочкам. Хотя и понятно, что это лишь вершина айсберга. Огромное спасибо автору!!!
@fusome4 жыл бұрын
спасибо, человеческим языком и доходчиво. Наконец-то кто-то это сделал
@xelaksal66907 жыл бұрын
Огромное спасибо, всё ПРЕДЕЛЬНО понятно!
@Cronis7 жыл бұрын
Спасибо! :)
@sergeyspitsyn32204 жыл бұрын
Количество тактов процессора не равно количеству шагов для выполнения алгоритма. Ибо количество тактов зависит от количества и типов машинных кодов, а компиляция одного и того же алгоритма разными компиляторами или для разных процессоров будет давать разный набор машинных кодов.
@Cronis4 жыл бұрын
Сергей, вы абсолютно правы. К сожалению сделали ошибку при записи :(
@gofracarton2 жыл бұрын
Спасибо вам! Проходил курсы от Яндекса по алгоритмам, где объясняли big O, но ничего не понял, а вы очень доходчиво и подробно объяснили. Ещё раз спасибо!
@Cronis2 жыл бұрын
Рад помочь!
@МатвейПодгорный-р4к2 жыл бұрын
Отличный и подробный разбор, качественное объяснение материала, спасибо большое
@vvlkblkc3 жыл бұрын
Очень хорошее разъяснение - лучшее, что я видел.
@Cronis3 жыл бұрын
Рад помочь!
@ebymamky3 жыл бұрын
Просто супер, спасибо!!! Отдельное спасибо за примеры
@Cronis3 жыл бұрын
Всегда рад помочь!
@vladimirteplov80603 жыл бұрын
Отличное видео и курс! Спасибо!
@Cronis3 жыл бұрын
Рад помочь!
@bahakulbarakov4944 жыл бұрын
Сложно очень воспринимать с первого раза XD. С 4 раза понял что да как. Объясняете очень хорошо спасибо за видео.
6 жыл бұрын
Спасибо огромное за видео ! Все так понятно, особенно на конкретных примерах 💙
@Cronis6 жыл бұрын
Спасибо за комментарий!
@goranlukash13742 жыл бұрын
Реально спасибо за понятное объяснение....😁
@ЕвгенЗадко3 жыл бұрын
Очень полезное видео для старта в изучении сложности алгоритмов!
@olegchumin6634 Жыл бұрын
Лучшее объяснение, что видел вообще.
@zion4d2 жыл бұрын
пожалуй лучшее! теперь можно приступать к "грокаем алгоритмы"
@Cronis2 жыл бұрын
Спасибо! Грокаем алгоритмы -плохая, поверхностная книга, которая путает больше, чем помогает.
@zion4d2 жыл бұрын
@@Cronis спасибо! Учту!
@Devivl2 жыл бұрын
Спасибо. В общих чертах стало понятно.
@ИльяИлья-ф8щ4 жыл бұрын
Спасибо за такие простые обьяснения, подписка!
@ifdru743 жыл бұрын
Большое спасибо за видео. Лично для меня тема стала понятнее.
@Cronis3 жыл бұрын
Приходите к нам на интенсив, узнаёте ещё больше: kzbin.info/www/bejne/fJm2ZnybeLFrhbc
@cracoh4 жыл бұрын
Спасибо зо подробное и доходчивое объяснение ключевых базовых понятий. 25 минут видео я посмотрел за час - прорешивал, записывал. Не знаю было ли где-то в комментах, но меня покоробила фраза на 17.11 - "сколько раз нужно умножить 1 на 2 чтобы получить 16?" мой ответ 8. потому как 1*2+1*2+1*2+1*2=8 а не 4. Но, в общем понятно что имелось в виду.
@Roomaa1113 жыл бұрын
1*2*2*2*2=16
@cracoh3 жыл бұрын
@@Roomaa111 хех, класс!
@andrusia20482 жыл бұрын
@@Roomaa111 на сколько двоек нужно умножить единицу
@Гарри-ю3и6 жыл бұрын
Круто, очень живо и ясно. Огромное спасибо!
@Alex-zn6vj3 жыл бұрын
Благодарю! Желаю вам всего самого наилучшего просто вау! ВСЕ ПОНЯТНООО!!!))
@АлексСапс6 жыл бұрын
Спасибо! отличные примеры из жизни. Очень наглядно! на 13:57 нагляднее пожалуй сравнивать 2^N and N^2. И первый график будет расти быстрее, намного быстрее второго, поэтому второй можно отбросить.
@bor30074 жыл бұрын
Бро ты крут! Лайк однозначно. Пошел дальше готовиться к собеседованию в фейсбук
@ЕвгенийСедых-и2щ4 жыл бұрын
Спасибо, все лаконично, кратко и понятно!
@MrCoolDolphin6 жыл бұрын
Офигенное видео!!! Большое спасибо автору!
@PapaCarlo874 жыл бұрын
Спасибо ,очень информативно и доступно!
@vonarut5 жыл бұрын
Огромное Спасибо! Наконец-то понял что такое big O !!! 2019 !!!
@ИгнатМирзализадэ2 жыл бұрын
Дополню. Big O от слова Порядок (Ordnung)
@dmitry46383 жыл бұрын
Отличное разъяснение, спасибо!
@ОлафШкипер4 жыл бұрын
Я не очень сведущ в языках но на 19:11 в цикле скобки разные стоят[) потому сложность будет 0. Видос конечно супер щикарный, с примерами, по делу, без тормозов. Респект!
@nighthoves72124 жыл бұрын
частично поняла суть, но по сравнению с тем, что я смотрела в инете чтобы понять данную тему - это лучшее
@Cronis4 жыл бұрын
Спасибо!
@88billizzard884 жыл бұрын
Супер круто, спасибо огромное, очень понятно и информативно, просто бомба
@Cronis4 жыл бұрын
Спасибо за добрые слова!
@nexissis516 жыл бұрын
Очень хорошее и познавательное видео
@Cronis6 жыл бұрын
Спасибо!
@hello_world_zz2 жыл бұрын
Препод супер, в стиле Грокаем Алгоритмы
@kirillsushilnikov9614 Жыл бұрын
Спасибо, было познавательно
@garikspiridonov38694 жыл бұрын
21:13 Квадрат не стал на половину меньше, он стал меньше, приблизительно на одну треть. Хотя согласен с вами, как следует из вашего обьяснения это не важно.
@Cronis4 жыл бұрын
Вы правы, там не совсем половина, а меньше. Но каквы и сказали, мы игнорируем константы :)
@АндрейЧернов-ь2ш6 жыл бұрын
В 12:46 говорится, что N^2 больше в два раза чем N. Но это бред! В два раза больше - это 2*N, а N^2 - это больше N в N раз. Да и в целом, учитывая оговорки и некорректные высказывания, указанные ниже в комментариях, можно сделать вывод, что к такому лектору на эти курсы ходить не стоит. Хотя в целом видео заслуживает внимания.
@Cronis6 жыл бұрын
Андрей Чернов, спасибо за комментарий! Возможно вы не расслышали, что было сказано: эн квадрат __больше__ чем в два раза превышает эн. Поэтому мы говорим, что эн квадрат намного больше эн.
@АндрейЧернов-ь2ш6 жыл бұрын
Переслушал еще раз. И опять слышу то, что написал выше. Дословно то, что говорится в видео: "Значительно - это значит в два раза. Если эн в два раза больше другого числа эм, значит эн значительно больше чем эм". Я понял, что хотел сказать лектор, но это прозвучало на фоне объяснения почему N^2 значительно больше N. Вот как раз слов "эн квадрат _больше_ чем в два раза превышает эн" сказано не было. Поэтому возникает путаница.
@nalilata5 жыл бұрын
@@Cronis извините, а зачем нам это "N^2 значительно больше N" если чтобы его отбросить, достаточно того, что N не больше N^2. мы даже строчкой выше N^2 отбросили, к чему такая возня с N, если мы его отбросим, в 2 раза оно меньше N^2 или даже в 1? и дальше 18:28 "или N + log N" - log N же отбрасывается?
@alexzhyshko97625 жыл бұрын
В примере 3 было сказано, что сложность алгоритма N^2, но если посмотреть внимательнее, то N(N-1)(N-2)...1 это Nфакториал. Тоесть будет О(N!). И если смотреть по квадрату 4х4,то отсекается не половина, а немного меньше половины, что, логично предположить, будет О(nlogn). И если расписывать эти два случая, то мы получим равенство сложностей N! =~ NLogN. Если в чем-то не прав, то поправьте пожалуйста
@Cronis5 жыл бұрын
будет: N + (N - 1) + (N - 2) .... + 3 + 2 + 1 = N(N+1)/2 = O(N^2) В треугольнике тоже кружки идут как 4 + 3 + 2 + 1 = 4*(4+1)/2 = 10
@PaladinProg6 жыл бұрын
Спасибо большое, теперь стало понятнее
@yeson65813 жыл бұрын
7:06, при передаче на самолёте размер передаваемых файлов не увеличивается, то есть по оси "Количество бит" нет изменения, меняется только время полёта, в зависимости от погодных условий и скорости самолёта. Прямая должна быть вертикальной. Тогда это конечно будет менее наглядно, но оси можно поменять местами и всё будет ok.
@Cronis3 жыл бұрын
При росте количеств бит время не меняется. График верный
@shurale853 жыл бұрын
Скажите, пожалуйста, а почему сортировка строки L*Log_L?
@Cronis3 жыл бұрын
Встроеннная в язык сортировка это сонтировка quicksort. Ей мы и сортируем строки. И ее сложность O(L * logL)
@pinkierar_real Жыл бұрын
@@Cronis это бы совершенно неочевидно)
@C2H5OHH4 жыл бұрын
Спасибо за урок!
@dimaspng Жыл бұрын
Спасибо от души!
@Cronis Жыл бұрын
На здоровье)
@reddragons99795 жыл бұрын
Офигенное видео)
@Cronis5 жыл бұрын
Спасибо!
@awakeupcall53365 жыл бұрын
22:58 подскажите, откуда с неба взяли L * log L ?
@Cronis5 жыл бұрын
В видео говорится, что мы сортируем строки длиной L. В любой сортировке есть всегда код вида if(str1 > str2). А сравнение строк одинаковой длины L -- это сравнение их L символов. Следовательно, мы умножаем сложность сортировки на L
@bor49635 жыл бұрын
Хорошо! Нет понятия порядок функции. Тогда легко перейдете от =n к квадрату n
@derzhavin_d Жыл бұрын
Хочу поставить 10 тысяч лайков автору
@Cronis Жыл бұрын
Расскажите о канале друзьям, это будет реальная польза мне)
@games4us1325 жыл бұрын
Спасибо, помогли разобраться.
@Das.Kleine.Krokodil Жыл бұрын
Видео отличное. Правда бинарный поиск можно было нагляднее показать графически: отрезками, деревом или еще как то
@turbojonah28814 жыл бұрын
Здравствуйте, спасибо за видео! Есть один вопрос. На 20:05 вы говорите, что сложность алгоритма будет ровна О(N+(N-1)+(N-2)+...+2+1). Не совсем понятно почему вы складываете кол-во операций, ведь в предыдущем примере с вложенным циклом, сложность алгоритма ровнялась О(N*N). Разве тут не должно было получится, что сложность алгоритма ровняется О(N*N+N(N-1)+N(N-2)+...+2N+N?
@Cronis4 жыл бұрын
Добрый день! Смотрите: в первом цикле i = 0, то есть второй цикл идёт от j = 0 до N. Затем i = 1 то есть второй цикл идёт от j = 1 до N затем второй цикл идёт от j = 2 до N. Следуя этой логике, получаем N+(N-1)+(N-2)+...+2+1
@павелшимаров-ц3о4 жыл бұрын
@@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), но описание как его получили в видео не правильное.
@MrPr09274 жыл бұрын
@@Cronis тут вы не правы, из N+(N-1)+(N-2)+...+2+1 никак не вывести N^2, следовательно, как и писали выше правильная запись будет вида N*(N+(N-1)+(N-2)+...+2+1)
@Cronis4 жыл бұрын
@@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
@MrPr09274 жыл бұрын
@@Cronis Ок, понял, тоесть не во всех случаях когда видим вложенный цикл нужно подразумевать перемножение сложностей, как было сказано ранее в видео?
@sergpoltr26867 жыл бұрын
Хорошо рассказываете
@maksimsergeevich59394 жыл бұрын
Спасибо за видео!
@SuperSonicLeader4 жыл бұрын
спасибо, хорошее видео, лайк!
@31more5 жыл бұрын
Почему в разборе первого алгоритма говорится, что функция вызывается n раз, ведь нет присваивания n:=n-1?
@Cronis5 жыл бұрын
Подскажите, на какой минуте разбирается алгоритм?
@andrewstrelnikov87002 жыл бұрын
16:59 Сколько раз нужно умножить 1 на 2 чтобы получить 16? В целом ход лекции мне нравится. Но вот бы поправили несколько ошибок...
@Cronis2 жыл бұрын
1*2*2*2*2 = 16 сколько раз вы умножили 1 на 2 чтобы получить 16?
@iakovryzhichka2832 Жыл бұрын
Спасибо за видео! Надеюсь поможет на собеседовании. Может уже спрашивали, но попытаю счастье. Вот не учитываются константы для оценки сложности. Это если у нас бесконечное число операций, то да, но на практике если я пройдусь по конечному массиву за одну секунду, то по идее полмассива я пройду за полсекунды. И если стоит задача оптимизации, то константы тоже важны, верно?
@Cronis Жыл бұрын
Ответ очень очень длинный. Коротко - оценке сложности не показывает точно сложность, а примерную. И на такие мелочи как константы никто не обращает внимание. Под видео есть ссылка на полный курс по оценке сложности, там первые 40 минут подробно рассказывается про константы и как что работает
@marlonbrando4584 жыл бұрын
Спасибо, лайк!
@TarasMaliarchuk-o4d2 жыл бұрын
12:43 n< n^2 , n -> inf не тому, що в 2 рази більша друга функція (вона взагалі в n раз більша) , а тому , що похідна другої функції рівна 2n , а першої 1, отже inf > 1, тому і нехтуємо.
@Евгений-ы4м3жАй бұрын
А про бинарный поиск не проще корень квадратный от N ?
@awakeupcall53365 жыл бұрын
17:17 смущает запись "сколько раз умножить 1 на 2 чтобы получить 16?" сколько раз не умножай 1 на 2 , 16 не получишь ... имеется в виду в какую степень возвести 2 ж, откуда тут 1
@Cronis5 жыл бұрын
a wakeup call спасибо за вопрос! Вот пример: 1 * 2 * 2 * 2 *2 = 16. Сколько раз необходимо умножить единицу на двойку? 4 раза
@jakepomg3173 жыл бұрын
Не понятно в 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 Только начал вариться в этой теме, может тут как-то по другому работает
@Cronis3 жыл бұрын
Просто вынесли за скобки N * L. То есть не вашем примере 2 + 2 * 2 = 2 * (1 + 1 * 2)
@jakepomg3173 жыл бұрын
@@Cronis Спасибо🙏 3 года прошло, а ответ за сутки, респект)
@Математик-л7ы3 жыл бұрын
А почему на 24:12 сложность сортировки строки log(l) ?
@Cronis3 жыл бұрын
Сложность написана L * log (L)
@pansiarhei6 жыл бұрын
Спасибо, хорошее видео
@ruslanvolovik27454 жыл бұрын
На самом деле log2N это будет когда мы будем точно делить список(массив) попалам на каждой итерации но мы можем же делить на 3, 4 и тд частей и уже не получится логарифм с основанием 2 поэтому в видео есть неточности. Основа логарифма отбрасывается не из-за того что это константа а из-за того что деление списка может быть больше чем на 2 части
@Cronis4 жыл бұрын
Спасибо за комментарий! Основание логарифма это константа. Доказательство это свойство 13: 2.bp.blogspot.com/-RFm5xlyqFf0/WuBL2YudoEI/AAAAAAAAByk/tRjvR5l7FvkB_ylwBEPEh_8x63UTxW8kwCLcBGAs/s1600/009.jpg По поводу как он образуется: именно деление объекта пополам дает основание 2. Если бы вы делил на части 25% и 75%, было бы основание 4/3. Что тоже константа
@ruslanvolovik27454 жыл бұрын
@@Cronis ок
@manOfPlanetEarth4 жыл бұрын
@@ruslanvolovik2745 а как с гонором ты начал. и тут де в лужу сел. неуч😂
@ruslanvolovik27454 жыл бұрын
@@manOfPlanetEarth неуч то ты, я смотрел этот весь бред по сложность алгоритмов и подобную пургу только ради интереса, не более. Я понял, что все это бесполезные вещи, потому что у меня есть друг с которым каждый день общаюсь, он недавно закончил стажировку в гугле, сам сказал что пободные хрени не пригодились в самом гугле, что его очень сильно удивило. Учи дальше этот бред никому не нужный (деньги оно тебе не принесет, баран)😱
@manOfPlanetEarth4 жыл бұрын
@@ruslanvolovik2745 ты в москве сейчас?
@alionabelomenova10754 жыл бұрын
Огромное спасибо, очень последовательно и понятно.
@Cronis4 жыл бұрын
Был рад помочь!
@Noir_Egoiste Жыл бұрын
Больше спасибо, но ничего не понятно, log N получается в половину меньше чем N и в меньше чем N^2 ?
@iforand3 жыл бұрын
7:28 Как это O(0) означает, что ничего не происходит? O(0) означает, или что для выполнения задачи не требуется выполнять каких либо действий, или что количество операций для выполнения задания уменьшается с ростом сложности задачи асимптотически к нулю. Раньше же сказано, что оценка верхней границы не зависит от времени, а значит говорить, что-то что-то происходит или не происходит не корректно.
@Cronis3 жыл бұрын
Вы полностью правы. Но как это все сказать для простого человека, который впервые это видит и не напугать его сложными формулировками? :) поэтому вот просто и сказано - суть отражает и не пугает. Под видео есть ссылка на оценку сложности со строгой математикой и с теорией множеств на 2.5 часа. Там мы рассказываем уже все четко для тех, кому нужна математическая строгость. А здесь для широкого зрителя :)
@kirill45314 жыл бұрын
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
@Cronis4 жыл бұрын
1*2*2*2*2 мы умножили 1 на двойку 4 раза
@kirill45314 жыл бұрын
@@Cronis это я понял, просто я считаю что формулировка задания некорректная. Сколько раз умножить 1 на 2 И На Результат (или как-то так) будет более правильно. А то сколько раз умножить 1 на 2 подразумевает последующее сложение результата
@Cronis4 жыл бұрын
Почему подразумевает?
@ВадимЛадик-т7м5 жыл бұрын
Поправьте, если ошибся. На 9.30 у рекурсивной функции сложность О(1), пожалуй не соглашусь. Попробуйте выполнить эту функцию с х=50, там скорее квадратичная зависимость О(n2). И ещё интересен случай, если подать на вход 0)
@Cronis5 жыл бұрын
Тело функции выполняется за O(1) т.к. не зависит от N. Но выполнятся это самое тело N раз. Поэтому сложность итоговая равна O(N)
@МихаилХолостов-р1п2 жыл бұрын
13:51 такая функция называется показательная
@rodgenk7 жыл бұрын
Здорово, спасибо.
@alex_mech Жыл бұрын
Мне кажется, было бы попроще начать не сразу с концепции bigO, а с математической основы smallO и bigO как верхнего и нижнего пределов ряда. Тогда не пришлось бы оправдываться словами в стиле «что такое О? Это условное обозначение концепции bigO”, которое снимает очевидный вопрос, но порождает следующий - «а почему большое О, что, есть маленькая О?». Концепция пришла из матанализа, так и стоило для порядка к нему обратиться, хотя бы в базовой форме
@Cronis Жыл бұрын
Под видео есть ссылка на мой полный курс по оценке сложности со всеми математическими выкладками, теорией множеств и всем, всем, всем. Здесь видео для широкой публики, поэтому такой язык. Если хотите серьезно изучить - посмотрите курс, вопросов не останется :)
@nikolaysokolov90274 жыл бұрын
Отличное видео. Спасибо большое!
@vladimir0rus3 жыл бұрын
Начали с практического (физического) примера, а закончили "темпом роста функции". Уверен, что многие так и не поймут, что же показывает это Big O ("рост функции это ведь хорошо, да?"). Применительно к коду, Big O говорит о том, как будет деградировать производительность при росте N (количества обрабатываемых элементов). При О(1) деградации не будет, при О(N) она будет линейная, O(N2) квадратичная, ... Причем на практике коэффициенты тоже важны и должны учитываться при выборе алгоритма. В подавляющем большинстве случаев программист будет оперировать с N < 100 и тут будет не важно какой у тебя Big O, а важно как быстро ты можешь обработать единичный элемент. На малых N даже О(N2) алгоритм может оказаться быстрее О(1) если последний медленный сам по себе (долгая обработка или большая сетевая задержка к примеру).
@Cronis3 жыл бұрын
И про все это вы можете узнать здесь: www.udemy.com/course/big-o-ru/
@vladimir0rus3 жыл бұрын
@@Cronis судя по оглавлению там тоже это не затрагивают.
@Cronis3 жыл бұрын
Первые 8 видео только про это
@vladimir0rus3 жыл бұрын
@@Cronis по оглавлению не видно что там рассматриваются практические аспекты принятия решений. В реальности алгоритм более дружественный к железу может быть быстрее на реальном наборе данных, чем алгоритм с лучшим Big O. Поэтому теория это одно, но понимание практических вопросов всё равно важнее.
@Cronis3 жыл бұрын
По ссылке наше видео, поэтому мы знаем что там внутри :) а это видео, под которым мы с вами разговариваем - это 5% из теории по ссылке, чтобы заинтересовать людей. Без математики и сложных вещей, которые подробно с доказательствами разбираются по ссылке. А то что вы говорите - все верно. Просто цель у данного видео другая
@ФдрФфф Жыл бұрын
6:34 что такое "О" и "(n)".
@mindwin71582 жыл бұрын
Ведёт к серьезной потерЕ
@maksimsergeevich59394 жыл бұрын
Подскажите пожалуйста, если формула расчета кол-ва итераций для алгоритма сортировки равна - n*(n/10) то какая здесь сложность получается? O(n) или O(n^2) ? Должен ли я отбросить n/10 так как это "n" становится в 10 раз меньше другого n. Или правильней будет отбросить знаменатель 10, тогда получится, что у нас остается n^2. Как правильно? Я не понимаю... Если ответите, сразу поясните пожалуйста, почему должен быть именно такой ответ. Или в видео неточность? Может правильное сказать, что незначительное n это не то которое более чем в 2 раза больше, а то которое меньше на степень другого n?
@Cronis4 жыл бұрын
Добрый день! Здесь сложность N^2 т.к. мы отбрасываем константы все, а 10 это констатнта. Правило очень простое -- все что константа сразу отбрасывается, а из оставшихся слагаемых выбирается то, у которого выше скорость роста (еще называют порядок). Градация по убыванию: N! -> 2^N -> N^2 -> N * log N -> N -> SQRT(N) -> log N -> 1
@maksimsergeevich59394 жыл бұрын
@@Cronis Спасибо! Все понятно теперь! А там где N^2 подразумевается число в любой степени? от 2 и выше? Если будет N^2 * N это будет N^3?
@Cronis4 жыл бұрын
@@maksimsergeevich5939 Не за что :) N^2 < N^3 < N^... < N^X чем меньше степень, тем меньше скорость роста т.е. N^2 + N^3 = O(N^3)
@superninja27493 жыл бұрын
Здравствуйте, почему 16:20 говорится, что мы должны искать число сначала в 16 элементах, если мы уже делим его на два? то есть, мы ищем в 8 элементах, немного не понял момент.
@Cronis3 жыл бұрын
Сначала в массиве 16 элементов, потом 8, потом 4, потом 2, потом 1. Поэтому мы сначала ищем среди 16 элементов
Насколько я понял в примере 3 - нужно учитывать дополнительно 4 наружных цикла, если бы он был заполнен кодом. Тогда было бы 16 + 4. O(N² + √N) - так можно было бы записать, если наружный for тоже вызывал бы метод foo()? И по моему sortString сортирует не строки а массивы char в строках? Просто фразу не понял.
@Cronis4 жыл бұрын
Не понял вопрос. В третьем примере сложность O(N^2) т.к. foo выполнится N + (N-1) + (N-2) + ... + 2 + 1 = N(N+1)/N = O(N^2) раз. Это арифметическая прогрессия
@arslanannaev12927 жыл бұрын
Видео классное, правда не понятна фраза (17:02) "Сколько раз нужно умножить один на два, что бы получить 16?"
@Cronis7 жыл бұрын
Спасибо за просмотр! Фраза означает: 1 * 2 * 2 * 2 * 2 = 16 то есть мы должны 4 раза умножить 1 на 2 чтобы получить 16
@niko-l-6 жыл бұрын
Не корректно так говорить, т.к. сколько бы мы раз не умножали 1 на 2 результат всегда будет 2. Правельно вопрос будет звучать так: в какую степень нужно возвести 2, чтобы получить 16
@stanislavt58346 жыл бұрын
"ПравЕльно будет ...")))))) Та, да...
@korsman723 Жыл бұрын
Здравствуйте, Немного непонятноm почему O(N² + N) будет равен O(N²), разве не O(N³) должно получиться? Это же базовое сложение, и пренебрегать этим - уже нарушение всей логики
@Cronis Жыл бұрын
Вы перепутали умножение со сложением: N*N^2 = N^3
@ЕрвандАгаджанян-в3к4 жыл бұрын
Очень круто
@ЕрвандАгаджанян-в3к4 жыл бұрын
Время на видео 22:05 разве не A^2 * B? Там же 3 цикла. И 2 из их - одинаковые (они и будут A^2). А 3-й будет B. Не так?
@Cronis4 жыл бұрын
Добрый день, Ерванд! Первый цикл выполняется А раз, вложенный в него -- В раз, а вложенный в него -- 100000 раз. Итого получаем: A * B * 100000 = O(A * B)
@Daoway-f7o2 жыл бұрын
не понял почему на 8:08 функция рекурсивная и почему выполняться будет 10 или 100 раз. там просто линейное вычисление!
@Cronis2 жыл бұрын
При n равном 10 она будет выполняться 10 раз, а при n равном 100 - 100 раз. Все верно. Это и есть линейная сложность. Не совсем понимаю ваш вопрос.
@Daoway-f7o2 жыл бұрын
@@Cronis спасибо, разобрался. там метод вызывает сам себя. и делает это несколько раз. это не относится к интерфейсу Iterable, но принцип тот же по коду
@johnwhite99062 жыл бұрын
int sum(int n) { if (n == 1) return 1; return n + sum (n - 1); } Выдает ошибку, почему? File "", line 1 int sum(int n) { ^ SyntaxError: invalid syntax
@Cronis2 жыл бұрын
Это же не питон :)
@Юрий-е8щ8у4 жыл бұрын
В современном мире ещё очень важное значение играет возможность распараллелить алгоритм. Но я не встречал, как эта концепция вписывается в концепцию bigO. То есть кроме времени и памяти важно понимать, а возможно ли в принципе распараллелить вычисление или нет. От этого ведь тоже может зависеть оценка времени очень сильно.
@Cronis4 жыл бұрын
Распараллеливание ни на что не влияет с точки зрения сложности. Представьте, что Вам надо последовательно вывести на экран N = 300 букв. И у вас есть 3 процессора. Да, каждый из них выполнит в 3 раза меньше работы и алгоритм выполнится в 3 раза быстрее. То есть итоговая сложность будет N/3 = O(N). Как видно, сложность алгоритма все равно остается линейной, т.е. прежней. Чтобы бы O(N) превратилось в O(1), вам надо 300 процессов. И это всего лишь для обработки 300 букв. А представьте, что вы работает с десятками тысячи букв или элементов массива. Тогда вам необходимы десятки тысяч машин, чтобы решить задачу. Поэтому нужно смотреть на алгоритм, а не на распараллеливание. Оно улучшает ситуацию, но на какое-то константное значение. А константы в оценке сложности отбрасывается.
@alex_mech Жыл бұрын
Ответчик выше имхо слабо знаком с теорией параллельных вычислений, на это намекает грубое сравнение «в лоб» в стиле «чтобы из О(300) сделать О(1), нужно 300 истинно параллельных исполнителей», хотя это всего лишь один частный случай из множества решений. Теория по распараллеливание вычислений есть, она несложная как со стороны алгоритмов, так и со стороны прикладной математики, порог вхождения не настолько высокий (и связь с bigO там кстати тоже оговаривается)
@vsezanyato3 жыл бұрын
Классно, только где j = i .. n там не половину убрали, а меньше
@6rk5h4 жыл бұрын
11:06, мне кажется, что сколько раз 1 на 2 не умножай, всегда 2 выходит.
@Cronis4 жыл бұрын
1*2*2*2*2 мы умножили единицу на два 4 раза :)
@6rk5h4 жыл бұрын
@@Cronis мы умножили 1 на 2 один раз, потом умножили 2 на 2 один раз, потом 4 на 2 и 8 на 2 по разу
@sherzod_mamadaliev5 жыл бұрын
Cronis, а продолжение будет или это всё?
@Cronis5 жыл бұрын
В ближайшие 10-14 дней появится видео на 2 часа полностью разбирающее теорию Big O во всех подробностях и самых сложны примерах. Но оно будет платным
@zukora2 жыл бұрын
Дякую, годно!
@Cronis2 жыл бұрын
Пожалуйста
@Excalib5 жыл бұрын
21:01 квадрат не стал на половину меньше, вы пропустили 4 шарика:)
@Cronis5 жыл бұрын
Спасибо за комментарий! Квадрат стал "примерно" меньше на половину. Идея в том, что нам необходимо аппроксимировать результат (по русски прикинуть на глаз куда примерно стремится сумма)