Алгоритмы и Структуры Данных. Урок 1: Введение. Числа Фибоначчи.

Поділитися
Вставка
  • Опубліковано 10 лис 2024

КОМЕНТАРІ • 161

  • @alishevN
    @alishevN  6 років тому +15

    КУРС ПО GIT: www.udemy.com/course/git-alishev/?referralCode=71994763964B8E2E6A4E

    • @caspianniko8555
      @caspianniko8555 3 роки тому

      i know im asking randomly but does anyone know of a way to log back into an instagram account..?
      I somehow lost my account password. I appreciate any assistance you can offer me

  • @midnight_essay
    @midnight_essay 6 років тому +86

    Спасибо огромное, что начал еще и этот курс, я и не надеялся, что после андроида и EE останутся силы на алгоритмы)
    Очень жду уроков по всем курсам, ужасно благодарен за труд)

  • @claypresent6422
    @claypresent6422 6 років тому +67

    Только не смей перестать!

  • @shukhratkasimov6791
    @shukhratkasimov6791 3 роки тому +17

    Все уроки отличные. Пересмотрел все уроки канала. Подход уроков просто шикарный. До этого смотрел много уроков, но всегда оставалось чувство неполноты. После уроков автора все стало на свои места. Очень благодарен автору за огромный труд. Ты №1.

  • @igorshishikin7647
    @igorshishikin7647 5 років тому +8

    Боже, это то что я так долго искал. alishev спасибо тебе огромное, продолжай снимать такой же качественный контент.

  • @ernestmyrmyr9932
    @ernestmyrmyr9932 4 роки тому +13

    прям идеальное дополнение к книге "Грокаем алгоритмы"! Спасибо !

  • @wildjoe6259
    @wildjoe6259 6 років тому +16

    Спасибо за Вашу работу!!!

  • @vadimoff22
    @vadimoff22 5 років тому +17

    Когда вы стали в начале видео говорить о том, что первый способ примитивный и банальный и самый такой который в первую очередь приходит в голову, то я ожидал услышать именно этот вариант, который вы показали вторым, мне бы никогда в голову не пришло бы вычислять число Фибоначчи каким-то другим способом, а уж тем более рекурсивным... Я ожидал услышать какою-то мега крутой и секретную формулу (алгоритм), а оказалось все так просто и банально.... Это как взять поставить стакан с водой перед человеком и сказать выпей его и он бы взял трубочку стал использовать и затратил бы большее количество времени, чем если бы просто взял в руку и в пару гладков выпил бы её)) Видео отличное, но концовка неожиданная ))

    • @lowlight1063
      @lowlight1063 9 місяців тому +3

      Что сказать, Вадим, вы красавчик, вы крутой, вы ахуенный, а вот я подумал в первую очередь про рекурсивное решение. Я даже не думал, что это настолько плохо и не задумывался над тем, что этот алгоритм совершает много дубликатов в своих вычислениях. Понимаете кто то рождается с пониманием того что можно сделать глоток воды без трубочки, а кто то пъёт из трубочки, потому что другого не знает

  • @ИванАлешечкин-б8к
    @ИванАлешечкин-б8к 3 роки тому +1

    Наиль, ты лучший! Спасибо тебе что ты есть!

  • @rudikshul25
    @rudikshul25 9 місяців тому

    Второе решение которое вы продемонстрировали выглядит очень простым по сравнению с первым , по крайней мере для восприятия . Спасибо за видео !

  • @alexeystambulzhan
    @alexeystambulzhan 6 років тому +3

    очень хорошо объясняется, всё понятно, просмотрел все java курсы и купил новые на udemy, спасибо

  • @alisaholainen6334
    @alisaholainen6334 4 роки тому +2

    Спасибо большое. Именно, с Фибоначчи я начинала изучение алгоритмов. Ваше видео было чУдным дополнением к моим знаниям

  • @babkenromyan6129
    @babkenromyan6129 5 років тому +2

    Доброе время суток, большое спасибо за урок!
    Более подробного и доступного объяснения я не нашел нигде!

  • @retropiligrim
    @retropiligrim 4 місяці тому

    Спасибо тебе автор. Вкатываюсь в бэк с фронта и ты очень помогаешь.

  • @АлександрКожевников-ь2о

    Наиль Спасибо вам огромное, все очень понятно объясняете, одно удовольствие изучать АиСД по вашим урокам)

  • @crataegus2653
    @crataegus2653 День тому

    спасибо человечище!

  • @RuslanZinovyev
    @RuslanZinovyev 6 років тому +4

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

  • @igorkudryk2199
    @igorkudryk2199 6 років тому +7

    Спасибо за алгоритмы, надеюсь выйдет больше видео на эти темы :)

  • @Tokamame
    @Tokamame 4 роки тому +5

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

  • @isomurodovaziynat669
    @isomurodovaziynat669 2 роки тому

    Здравствуйте. Спасибо большое за уроки.

  • @alexanderwicked8990
    @alexanderwicked8990 6 років тому +3

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

  • @andreyevlash725
    @andreyevlash725 3 роки тому +13

    Вот ещё вариант:
    private static long fibEffective2(int n) {
    if (n

    • @TezkaTszyu
      @TezkaTszyu 2 роки тому +4

      О, я как раз задал вопрос "зачем массив в плане памяти, 2*long против n*long" и уведел ваш комментарий 👍

    • @АсланбекЕлбосынов
      @АсланбекЕлбосынов Рік тому

      @@TezkaTszyu +

    • @adekakz9794
      @adekakz9794 Рік тому

      тоже самое, но без массива. В массиве хранить данные удобнее, согласитесь

  • @denistalko6585
    @denistalko6585 3 роки тому

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

  • @lowlight1063
    @lowlight1063 9 місяців тому +1

    Думал смотреть курс от индийского мужчины, но он первые 5-10 видосов обьясняет что то, а Вы сразу пишете код, что по моему намного лучше. Вы без лишних слов, а просто десятком строчек кода заинтересовали меня в том, что нужно посмотретоь весь плейлист. Я когда увидел разницу во времени экзекуции метода, я просто охуел. Спасибо

  • @Chaevnicher
    @Chaevnicher 6 років тому +9

    число 1 000 000 000:
    твой алгоритм с массивами выполняется 23-31 сек,
    а если использовать три переменные - 3-5 сек)
    ```go
    var d int
    _, _ = fmt.Scanf("%d", &d)
    var a int64 = 0
    var b int64 = 1
    var c int64 = 0
    for i:= 0; i < d; i++ {
    c = b
    b += a
    a = c
    }
    fmt.Println(a)
    ```
    при 10 000 000 000
    вариант с переменными выполнился за 13.233214662s
    твои массивы заполнили всю оперативную память (8гб) и 15гб памяти на ssd:
    Process finished with exit code 137 (interrupted by signal 9: SIGKILL) пам-пам!
    вот она сила алгоритмов на практике))

    • @CrownlessX
      @CrownlessX 6 років тому +1

      Я вот чёт тоже думал про переменные, а не массивы.. но, тем не менее, надо смотреть на логичность задачи. Кому понадобится 10 000 000 000 элемент чисел фибаначи?)
      BTW, такое число в лонг не запихать. БигИнт надо какой то.... Но опять же - где логика таких задач?)

    • @Chaevnicher
      @Chaevnicher 6 років тому

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

    • @CrownlessX
      @CrownlessX 6 років тому

      Спору нет, хранить может и не стоит... но вопрос всё ж логически постановке задачи.
      Почему ты тогда не протестировал поиск гуголплексового значения?)
      Всё ж это больше выглядит, как - некчему докопаться, докопись до орфографии.
      Тут рассматривается ВАРИАНТЫ решения алгоритмов, а не единственное возможное.
      Вариант с хранением данных может пригодится в том случае, если мы постоянно будем числа искать - простая модификация и никаких вычислений в будущем.

    • @skazhenyy_enot_
      @skazhenyy_enot_ 4 роки тому

      бл, в шоке от твоего говнокода. Логика норм. Но названия. Блевануть мля.

    • @NoName-ec4wg
      @NoName-ec4wg 4 роки тому

      inp, array = int(input()), [0,1]
      for i in range(1, inp): array.append(array[i] + array[i-1])
      print(array)
      -------------------------------
      Как это выглядит на питоне с использованием списка в 3 строки) Базару нет, можно и с переменными, но все зависит от поставленных задач (тобишь от диапазона чисел). Да и видео вроде как называется не "самый эффективный алгоритм для решения задачи чисел Фибоначчи", если вы читали название:) Здесь PoC обьясняется и ради этого я сюда зашел как бы, алгоритм я для себя напишу и подберу уже сам. Темболее что это и логично, потому что ты хранишь все возможные числа до N в одном типе данных, по этому оно так оперативу и хавает, лол. Или может на ассемблере перепишем раз на то пошло? :D

  • @ДенисКрылов-л3х
    @ДенисКрылов-л3х 2 роки тому

    Спасибо за видео, очень доступно

  • @Nexn0n
    @Nexn0n 3 роки тому

    Простой и понятный пример. Алгоритм можно ещё больше оптимизировать. Недавно в универе дали задание найти n-ое число Фибоначчи за время O(log n). А это уже бинарное возведение в степень и матрицы)

  • @ByTheKema
    @ByTheKema 6 років тому +3

    Наиль, спасибо большое, ждал)

  • @Andrzej3935
    @Andrzej3935 3 роки тому

    "Тип int у нас перекрутился несколько раз..." - улыбнуло) Спасибо за прекрасные уроки!

  • @karensrapyan845
    @karensrapyan845 4 роки тому +4

    private static long fibEffective(int N) {
    long a = 0;
    long b = 1;
    long sum = 0;
    for (int i = 0; i

    • @MsDima9999
      @MsDima9999 4 роки тому

      maby i dont ubderstend something but if I put 10 in this method it returns 144 but not 55
      What is wrong?

    • @karensrapyan845
      @karensrapyan845 4 роки тому

      @@MsDima9999 my function just shows some apprach for sum and as u see I wrote return sum or b which means I didnt tested that. The only info from my code u need to take it is using 3 vars

    • @chupnmsk
      @chupnmsk 2 роки тому

      your algorithm is good, but it will return a number that will be 2 numbers from the desired one, because the loop starts at 0.

  • @ivantyshchenko61
    @ivantyshchenko61 2 роки тому +2

    Спасибо за видео!
    По поводу затрат памяти, я бы в массиве хранил только предыдущие 2 числа

  • @Artem_35_
    @Artem_35_ 6 років тому +2

    Спасибо большое! Очень интересно и доступно и отдельное спасибо за 1440p60! Очень жаль что на Udemy всего 720р...
    И подумайте о том, что бы прикрутить к своим видео тут какую-то донат-платформу. Думаю многие бы благодарили, каждый в меру своих возможностей.

  • @ПетрДанькин-ф2с
    @ПетрДанькин-ф2с 6 років тому

    как всегда, все доходчиво и интересно

  • @trrt9756
    @trrt9756 2 роки тому

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

  • @denzzero8920
    @denzzero8920 5 років тому

    Благодарю, хорошо объяснил.

  • @go_alloman8106
    @go_alloman8106 11 місяців тому

    Решение без массива вообще
    static int fib(int n)
    {
    int a = 0;
    int b = 1;
    int result=n;
    for (int i = 2; i

  • @yourownazog8069
    @yourownazog8069 6 років тому

    Шикарный урок

  • @alekseyshibayev5243
    @alekseyshibayev5243 6 років тому +6

    Привет друг, ты супер полезную работу делаешь, однако, на данном этапе, я хочу тебе сказать что фибоначчи 100 не влезает в long ((2^64) -1)

  • @ВикторГусев-н5т
    @ВикторГусев-н5т 5 років тому

    Спасибо! Очень понятно!

  • @roman8735
    @roman8735 6 років тому

    Спасибо отличное видео, жду ещё!! )))

  • @vladbasov8863
    @vladbasov8863 3 роки тому +1

    Написал данный алгоритм (Effective) на swift, использовал Decimal в качестве типа данных, при n = 100 получил число 354224848179261915075. Это число отличается от результата на видео. Попробовал в инете онлайн калькулятор числа Фибоначи - результат был как в моей проге. Похоже с long такие вычисления не катят.

  • @vyacheslavtatsianafilipovi5784
    @vyacheslavtatsianafilipovi5784 5 років тому +1

    Подскажите,а в какой последовательности правильнее смотреть ваши курсы? Например, Джава для начинающих,потом Алгоритмы и структуры,потом Продвинутая Джава,а потом уже к примеру Спринг.

  • @programer8
    @programer8 Рік тому

    Давайте полный курс по Алгоритмам и структур данных для начинающих на udemy

  • @olgasukhova777
    @olgasukhova777 4 роки тому

    Курс купила по яве🤗👌😍

  • @karenjantv2302
    @karenjantv2302 3 роки тому

    Это гениально

  • @РадикГимадиев-ч3и
    @РадикГимадиев-ч3и 5 років тому +1

    Спасибо за урок! Подскажите, пожалуйста, как настроить Idea так, чтобы вверху над рабочей областью высвечивалось имя метода, в котором находится курсор, как у Вас в этом видео?

  • @TezkaTszyu
    @TezkaTszyu 2 роки тому +1

    А зачем массив, если можно 2 предыдущих значения хранить в 2х переменных и в результате выдавать сумму? Ну в плане памяти 2*long против n*long

  • @ДанилЯнчук-ч4щ
    @ДанилЯнчук-ч4щ 2 роки тому

    Можно же выполнить задачу и без массива используя три переменных и перезаписывавать их. Так мы не сохраняем последовательность чисел посчитанных но по идее памяти меньше будет использовано та и запоминать последовательность и не нужно

    • @aleksey8405
      @aleksey8405 Рік тому

      Согласен. Нам достаточно выделить память лишь под массив из 3-х элементов, а не n+1. arr[0] - это будет F-2, arr[1] - это будет F-1, arr[2] - будет само число Фибоначчи. И в конце каждой итерации надо будет копировать значение arr[1] в arr[0], а значение arr[2] в arr[1]. И снова вычислять число Фибоначчии, т.е. arr[2] на основании этих двух значений (arr[0] и arr[1]). И тогда память также тратиться не будет. Но автор, в любом случае, молодец.

  • @kensaitakeso
    @kensaitakeso 8 місяців тому

    The 100th Fibonacci number is 354,224,848,179,261,915,075. Since 100 is relatively large, it would take quite a bit of time and calculation to find the 100th Fibonacci number using our recursive formula. не помещается 100е число в лонг. если весь массив напечатать то видно что под конец вылазят отрицательные числа. наверно бигИнт нужно прикрутить но их складывать плюсом не выйдет

  • @mikegemini9503
    @mikegemini9503 2 роки тому

    Здравствуйте! Шикардос! Почему этот алгоритм не рассказывают, в учебниках? Рекурсия-рекурсией, но надо (имхо), сразу давать понятия об алгоритмах и вычислении их эффективности. Может, я не те книжки читал. Самоучка, если что.

  • @pochan1585
    @pochan1585 4 роки тому +1

    А если написать следующий код(на js), он сделан с рекрсией, но вычисляет так же быстро
    let a = 0,
    b = 1,
    c = 0,
    k = 1;
    function fibonachi(n) {
    c = a + b;
    k++;
    a = b;
    b = c;
    if(k == n) {
    console.log(c)
    } else {
    fibonachi(n);
    }
    }
    fibonachi(1300)

  • @costavashchuk7368
    @costavashchuk7368 2 роки тому

    Наиль, спасибо огромное! Замечательные курсы! Только возник вопрос. Сотое число не помещается в long, помоему. Попробовал long и BigInt, получился разный результат.

  • @shushanbalayan6267
    @shushanbalayan6267 4 роки тому +3

    спасибо, ну я решала эту задачу и без масива, для чего хранить в массиве если просто переопределив a1, a2 задача решается?

    • @alishevN
      @alishevN  4 роки тому

      да, можно без массива.

    • @OrionChrome
      @OrionChrome 3 роки тому

      Я тоже так сначала решил, до того как видео посмотрел. Просто переопределял x и y на каждой итерации и вычислял их сумму. Ну, думаю, этот способ явно "тупой", так как сразу в голову приходит, посмотрю ка я в видео что же там за умный способ показан, рекурсия наверное. А оказалось всё как раз наоборот.

  • @MegaFeel1
    @MegaFeel1 6 років тому

    АиСД, вот за это отдельная спсаааа

  • @aliaskararzykulov2361
    @aliaskararzykulov2361 2 роки тому

    Спасибо за уроки. а почему когда в аргумент передаем 0 то скидывает ошибку ?ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1.

  • @Arimototoku
    @Arimototoku 6 років тому

    ШикарнО:)

  • @miapdesign5201
    @miapdesign5201 6 місяців тому

    Подскажите пожалуйста, в каком порядке нужно проходить курсы, размещенные у автора на канале?
    В плейлистах порядок курсов такой:
    1. Java для начинающих
    2. Android для начинающих
    3. Java EE для начинающих
    4. Алгоритмы и Структуры Данных
    5. Spring Framework
    6. Git Полный курс
    Но я не уверен, что проходить изучение будет правильно именно в таком порядке. Может кто-то знает с высоты собственного опыта?

  • @sorrelofsuccess5513
    @sorrelofsuccess5513 Рік тому

    Спасибо, мог бы тот же пример продемонстрировать через рекурсию но с кэшированием, тогда бы вопросов в конце не возникло

  • @Tokamame
    @Tokamame 4 роки тому

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

  • @BillionairesHouse2024
    @BillionairesHouse2024 3 місяці тому

    Сделай видео о дереаьях и графах, пожайлуста
    😊😊😊

  • @ruslanvolovik2745
    @ruslanvolovik2745 4 роки тому +1

    Как же не используется память при рекурсивном варианте если все равно же стек очень сильно забиваеться, а стек это же структура данных - то что хранит данные в памяти

  • @АлексейНицуленко
    @АлексейНицуленко 3 роки тому +1

    Здравствуйте, начал осваивать IT с нуля, стараюсь освоить базис (до банального пересматриваю краткий курс информатики 10-11класс), начал с Вашей помощью учить python, понимаю, что нужны алгоритмы, но в первом же видео, вы пишете код на неизвестном мне языке. Хочу параллельно эти дисциплины проходить. Как быть? Нужно сначала бросить python и выучить другой язык? Вопросы может глупые, но все, я думаю, были на моей стадии ;)

    • @BobrKurvva
      @BobrKurvva 2 роки тому +3

      продолжай учить, просто слушай суть. в пайтоне тоже наверняка есть циклы, рекурсия, массивы и примитивы)

  • @gevorghovhannisyan7784
    @gevorghovhannisyan7784 Рік тому

    Не совсем понял рекурсивный метод. Можно по подробнее? Спасибо

  • @lulikb7547
    @lulikb7547 Місяць тому

    wow!!! SUPER

  • @ИльяХрулев-ь7ц
    @ИльяХрулев-ь7ц 2 роки тому

    А почему при использовании наивного алгоритма не возникает ошибка - стек овер флоу?

  • @LitvinenkoBoris-b7z
    @LitvinenkoBoris-b7z 2 роки тому

    Не обязательно помнить весь массив чисел Фибоначи, достаточно последних 2-х. В таком случае мы добьемся решения задачи за линейное время и константную память

    • @aleksey8405
      @aleksey8405 Рік тому

      Только хотел написать то же самое. Нам достаточно выделить память лишь под массив из 3-х элементов, а не n+1. arr[0] - это будет F-2, arr[1] - это будет F-1, arr[2] - будет само число Фибоначчи. И в конце каждой итерации надо будет копировать значение arr[1] в arr[0], а значение arr[2] в arr[1]. И снова вычислять число Фибоначчии, т.е. arr[2] на основании этих двух значений (arr[0] и arr[1]). И тогда память также тратиться не будет.
      А если делать так, как сделал автор - то при необходимости вычислить какое-нибудь огромное число Фибоначчи - просто памяти не хватит, и будет краш или типа того.
      Но в любом случае, видео очень полезное, спасибо большое автору!

  • @ilias3624
    @ilias3624 3 роки тому

    Не сказал бы, что первый алгоритм более очевидный и наивный, я почему-то сразу подумал именно про второй, был уверен, что он и будет наивным. Интересно было узнать, каким будет продвинутый в таком случае)))
    Еще вопрос - а что эффективнее с точки зрения скорости и памяти - хранить в массиве все числа или перезаписывать промежуточные результаты в переменных?

    • @aleksey8405
      @aleksey8405 Рік тому

      На самом деле, нам достаточно выделить память лишь под массив из 3-х элементов, а не n+1. arr[0] - это будет F-2, arr[1] - это будет F-1, arr[2] - будет само число Фибоначчи. И в конце каждой итерации надо будет копировать значение arr[1] в arr[0], а значение arr[2] в arr[1]. И снова вычислять число Фибоначчии, т.е. arr[2] на основании этих двух значений (arr[0] и arr[1]). И тогда память также тратиться не будет.

  • @MrVakial
    @MrVakial 4 роки тому

    А почему тело цикла for не в фигурных скобках? Не понимаю. По идее ведь должно ошибку выдать.

  • @yeson6581
    @yeson6581 2 роки тому

    Мне искреннее интересно, как Наиль посчитал время вычисления 100-го числа Фибоначчи первым методом? Я забивал в код 50-е число и оно посчиталось довольно оперативно - 43 секунды.
    Кстати, используйте BigInteger вместо long для правильного расчёта например 100-го числа Фибоначчи и не забывайте про метод сложения - add и valueOf(n).

    • @kkkaadoanswg
      @kkkaadoanswg Рік тому

      возведи 43 секунды в 50 степень и удивишься

  • @dendr576
    @dendr576 2 роки тому

    Скажите пожалуйста, как реализовать на python Фибоначчи именно списком?

  • @demontaraz
    @demontaraz 7 місяців тому

    Я не совсем понял зачем массив? Почему нельзя 2 переменные постоянно переопределять? Возможно по производительности ничего не изменилось бы, но по памяти всяко быстрее

  • @PimpLable
    @PimpLable 6 років тому

    11 -14 строку можно уместить в одну строку через тернарный оператор java.

  • @bulka6839
    @bulka6839 Рік тому

    Здравствуйте, это демо или полный курс?

  • @AndriiRabinovych
    @AndriiRabinovych 4 роки тому +1

    мне кажется допущена ошибка в 5:10 , в слайде. F100 = 3736710778780434371, а так то спасибо огромное!

  • @footballlife9931
    @footballlife9931 5 років тому

    спасибо

  • @apterion
    @apterion 9 місяців тому

    Тут что-то не так. В 64 битах 20 порядков в десятичном представлении -- у вас 19.
    В rust мне не удалось 100-е число Фибоначчи вычислить -- упёрся в ограничения unsigned int 64 (в отладочной сборке rust это проверяет).
    Да, действительно, там переполнение. Пора переезжать на 128 бит))
    P.S. Запустил без проверок на переполнение -- результат как у вас стал. Починил!))

  • @konstantindobrinskiy9740
    @konstantindobrinskiy9740 6 років тому +1

    Спасибо! А почему массив брали размером n+1, а не n ? Зачем тут на один размер вперед место еще резервировать?

    • @alishevN
      @alishevN  6 років тому +7

      Потому что нам надо найти все числа Фибоначчи от 0 до n, где n - аргумент метода.
      От 0 до n как раз n + 1 чисел Фибоначчи.
      Например, пользователь вводит 3.
      От 0 до n - [0,1,2,3] - 4 (n+1) числа Фибоначчи.

    • @ДмитрийДмитриев-г5у
      @ДмитрийДмитриев-г5у 6 років тому

      Блин, нифига не понял.

    • @alishevN
      @alishevN  6 років тому +4

      В массиве
      long a = new long[n]
      при обращении a[n] будет ошибка ArrayIndexOutOfBound, потому что нумерация элементов в массивах начинается с 0.

  • @siegfried_dd
    @siegfried_dd 6 років тому

    прошу вас, продолжайте эту тему с алгоритмами..

    • @alishevN
      @alishevN  6 років тому

      На следующей неделе.

  • @enered3944
    @enered3944 Рік тому

    Объясните пожалуйста, почему длинна массива n+1?

    • @pandainbyt
      @pandainbyt Рік тому

      Потому что первый элемент в массиве заполняется нулём

  • @elenoramalygina2796
    @elenoramalygina2796 8 місяців тому

    Ареально вообще понять и выучить эти алгоритмы если уже под сорокет а за плечами ток технарь и то непомню уже.

  • @ILawrance
    @ILawrance Рік тому

    Разве у первого алгоритма сложность не 2^N , а у второго N? И именно в этом основная проблема

  • @aliakseidev5390
    @aliakseidev5390 3 роки тому

    Коммент поддержки

  • @---fq2kd
    @---fq2kd 4 роки тому

    кролики не только ценный мех!

  • @alexanderlojhkin8997
    @alexanderlojhkin8997 4 роки тому +1

    А зачем собственно тратить память на массив, если на выходе у нас только n число, при том что для расчетов нужны только n-1 и n-2, а не вся числовая последовательность, не будет ли более эффективным такой код:
    long n1=1;
    long n2=0;
    long r=0;
    for (int i=2;i!=n;i++){
    r=n1+n2;
    n2=n1;
    n1=r;
    }
    return r;

    • @alishevN
      @alishevN  4 роки тому

      да, вы правы. ваш код еще лучше.

    • @dentor2005
      @dentor2005 3 роки тому +1

      а ты пробовал этот код запустить и сравнить результат, например с он-лайн калькуляторами?

    • @user-xl2tf4gq1g
      @user-xl2tf4gq1g 3 роки тому +1

      нужно заменить i !=n этим i

  • @rigfftreee8190
    @rigfftreee8190 5 років тому

    Более эффективный вариант
    public long getFib(int n) {
    long ar [] = new long[] {0,1};
    for (int i = 2; i

  • @VitaliyZlobin
    @VitaliyZlobin 5 років тому +1

    То чувство, когда абсолютно не понял как работает "наивный" метод, но если бы нужно было реализовать данную конструкцию, то я бы думал в направлении "эффективного" способа - даже не знаю, хорошо или плохо это)))

    • @kek_pupold
      @kek_pupold 5 років тому

      Мне кажется все так думали, потому что "наивный метод" намного сложнее, там логика извращенная какая-то

    • @stas4985
      @stas4985 5 років тому

      если ты не понял рекурсию то еще придет время и будешь ее пытаться понять

    • @dragulaxis
      @dragulaxis 3 роки тому +1

      @@kek_pupold да там же школьная формула, вы чего.

    • @kek_pupold
      @kek_pupold 3 роки тому

      @@dragulaxis я даже не помню про что я писал, нашел когда ответить )

  • @dragulaxis
    @dragulaxis 3 роки тому

    Посмотрел 6 минут ролика и всё понял, написал прогу с ArrayList, так как F(100) не вмещается в long.

  • @konig231
    @konig231 6 років тому

    видео как всегда супер, однозначно лайк. но у меня есть вопрос по fibNaive (11:09). никак не могу понять, почему return fibNaive(n - 1) + fibNaive(n-2); не равен return (n - 1) + (n - 2);. буду очень признателен, если у кого-то появится желание ответить.

    • @АлександрКозлов-в4в
      @АлександрКозлов-в4в 6 років тому +1

      Может потому что "return fibNaive(n-1) + fibNaive(n-2)" - это рекурсивный вызов? т.е. зайдя в этот метод с неким n > 1, возвратным значением будет снова вызов этого же метода с новым n (один вызов будет n-1, другой n-2, которые в свою очередь о5 вызовут методы). Соответственно результат будет "комом" нарастать. А return (n - 1) + (n - 2) просто вернёт значение, произведя математическое действие. Передав методу параметр 5, он вернёт 7

    • @RuslanZinovyev
      @RuslanZinovyev 6 років тому +1

      Потому что рекурсии в твоем примере (n - 1) + (n - 2) нет. Ответ будет не верным. А алгоритм для вычисления рекуррентный, поэтому без рекурсии никак. Запись вида fibNative(n - 1) + fibNative(n + 2) рекурсивна, функция вызывает саму себя дважды, рекомендую почитать про рекурсию если не понятно все равно.

    • @konig231
      @konig231 6 років тому

      понял, спасибо!

  • @MuratFatykhov
    @MuratFatykhov Рік тому

    Вообще, в среднем вычисление числа Фибоначчи с помощью этого алгоритма занимает 50 тысяч лет 😂 Размотало 😂

  • @3x0d7s
    @3x0d7s 2 роки тому

    Что скажете по поводу моей реализации метода получения числа Фибоначчи?
    class Fibbonacci{
    static final int n0 = 0;
    static final int n1 = 1;
    static long toGetNumber(int n){
    if (n < 2) return n;
    else{
    long sum2 = n0, sum1 = n1;
    for(long x = 2; x

  • @ujin7835
    @ujin7835 Рік тому

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

    • @ViktorAr2023
      @ViktorAr2023 Рік тому

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

  • @mashkovvan
    @mashkovvan 3 роки тому +1

    Честно говоря рассчет не верный, лонг заканчивается на 92 элементе массива

  • @albertrain7093
    @albertrain7093 6 років тому

    Я так и не понял, чесло 0 считать или нет? Если считать, то 5 - получается шестым числом, или 0 - это нулевое число Фибоначи? :)
    З.Ы. Спасибо за видео!!!

    • @alishevN
      @alishevN  6 років тому +1

      Можно считать, можно не считать. Даже в википедии приведено два варианта.

    • @albertrain7093
      @albertrain7093 6 років тому

      спасибо большое!

    • @eugenesmith9940
      @eugenesmith9940 Рік тому

      при n+1, видимо, не считают (точнее начинают считать с 0. Т.е 0 (это нулевое число), 1 (1-е число), 1 (2-е число), 2 (3-е число) и т.д)

  • @MrPe4KiN96
    @MrPe4KiN96 6 років тому

    это всё конечно очень хорошо, но что делать если и тип лонг переполнится?)

    • @alishevN
      @alishevN  6 років тому +2

      Использовать класс BigInteger.

    • @WaveTheEmeraldDragon
      @WaveTheEmeraldDragon 6 років тому

      Спасибо за восхитительные уроки! (Кстати именно при Fn92 он уже переполняется -> 7540113804746346429).
      Но уроки и правда хорошие. Как досмотрю ютуб - подпишусь на новый курс.

  • @АртемДеренчук
    @АртемДеренчук 3 роки тому

    Заебись, а то что 100-ый элемент нельзя через long посчитать, то похер)))) Число 100-го элемента считается через BigInteger и оно будет немного больше...

  • @lukianhrabchuk3909
    @lukianhrabchuk3909 6 років тому

    100-й элемент вычислило за мгновение... Я что-то не так делаю?

  • @maximpanfilov4388
    @maximpanfilov4388 4 роки тому

    Крутой курс) Что планируется в будущем???

    • @alishevN
      @alishevN  4 роки тому +5

      Разбор задач из собеседований

  • @ОлегМосягин-р8й
    @ОлегМосягин-р8й 6 років тому +1

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

  • @lifedrummercom
    @lifedrummercom 4 роки тому

    100тое число фиббоначи = 354224848179261915075 !

    • @dentor2005
      @dentor2005 3 роки тому

      вот именно! алгоритм то неправильный !

  • @NarkotikAsd
    @NarkotikAsd 3 роки тому

    function fibona(n){
    let art = [n+1];
    art[0]=0;
    art[1]=1;
    for(let i = 2; i

    • @eugenesmith9940
      @eugenesmith9940 Рік тому

      потому что 100-е число Фибоначчи выходит за пределы примитива long. Верхний лимит в данном случае - это 92-е число.