Чому алгоритми важливі? Розберемо на прикладі

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

КОМЕНТАРІ • 172

  • @arthur_white30
    @arthur_white30 Рік тому +57

    Готовий дивитись далі про алгоритми та архітектуру. Дуже корисно, тому що пояснюєшь на пальчях, а не на 100 сторінок тексту

  • @ОлексійСирота-ы6т
    @ОлексійСирота-ы6т 11 місяців тому +1

    Хоч вивчаю Python, але все зрозуміло, дуже гарно подається інформація, дякую за контент))

  • @AdminAdmin-sl2qf
    @AdminAdmin-sl2qf 8 місяців тому +1

    ❤❤❤❤❤❤❤❤

  • @MykhSerh
    @MykhSerh 10 місяців тому +1

    Дуже класне відео! Продовжуй, так тримати!

  • @user-gywunrl
    @user-gywunrl Рік тому +15

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

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

    Дякую за такий корисний контент! Дуже класна подача

  • @lev_vasyok
    @lev_vasyok Рік тому +33

    В тебе дар пояснювати все дуже доступно, відразу помітно що розумієш все зсередини, а не поверхнево, окремо респект за Український контент🔥
    Підписався і друзям пошерив твій канал, так тримати, все буде Україна💛💙

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

      Дякую! Мотивує розвивати канал :)

  • @user-ke2on2ju8m
    @user-ke2on2ju8m 11 місяців тому

    супер ) дякую за чітке та наглядне пояснення!

  • @yehorishtvan3802
    @yehorishtvan3802 10 місяців тому

    дуже круто цікаво що саме практичні приклади.

  • @turbosega
    @turbosega Рік тому +2

    Дуже гарний контент. Цікаво! Дякую.

  • @etniqa3638
    @etniqa3638 Рік тому +1

    Да, круто. Ніколи це не вчив ніде, але з якихось інших відосіків шарю в цьому. Круть )

  • @НикитаШевченко-ы8я

    Дуже цікаво. Вчу алгоритми, і якось помітив що навіть там де воно може і не дуже суттєво впливає на результат, пишу біль оптимально.

  • @pavel7930
    @pavel7930 Рік тому +12

    Формат подачі матеріалу легкий і зрозумілий! Дякую! Продовжуйте канал буде дуже крутий!

  • @BohdanKonovalov-g6j
    @BohdanKonovalov-g6j 11 місяців тому

    Те, що треба👍 Дякую!

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

    Наскільки ж я радий, що я потрапив на Вас у Доу Подкасті❤❤❤

  • @ПавелБабич-э2ф
    @ПавелБабич-э2ф Рік тому

    Клас згадав, що вчив колись, дякую.

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

    Дуже класно пояснюєте, більше би таких відео про алгоритми

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

    Супер цікаво! Дякую! Якраз працюю з таким тай думаю, як виключить цикл з цикла. Це просто геніально.

  • @voltstas
    @voltstas Рік тому +1

    Дякую! Чекаю на більше таких відео

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

    Про мердж двох масивів дуже цікаво! І практично. Дякую
    Бінарний та інтерполяційний пошук вже знав, тому просто повторив матеріал. А мердж, це прям відкриття

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

    Клас!!! Розклав дуже наочно і зрозуміло!! Індекси в БД це бінарний пошук, принцип роботи бінарного пошуку - стали для мене відкриттям)

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

    Шок контент, я тепер зміню те як я код пишу. Дякую!

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

    Класний контент, дякую

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

    Дякую за відео!

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

    Це дуже гарне відео та пояснення. Також дякую за мотивацію грокати алгоритми

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

    Чувак, ти так круто розказуєш, дай я тебе обніму)))

  • @Bartosh-r4k
    @Bartosh-r4k Рік тому

    Спасибо большое за видео

  • @SuperBogdanek
    @SuperBogdanek 10 місяців тому

    супер доступно.

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

    Дуже цікаво, дякую! Продовжуйте в тому ж дусі

  • @vladyslavkarpenko9372
    @vladyslavkarpenko9372 Рік тому +2

    Чудові лаконічні приклади з дійсних ситуацій, без foo/bar🤝🏻 Успіху в розвитку каналу та досягнення цілей що собі ставили при його започаткуванні!

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

    крута робота та подача матеріалу, дякую

  • @ЯрославГавриленко-ъ7к

    Дуже подобається формат подачі та конент. Цікаво було б послухати від тебе про архітектурні паттерти та приклади реалізації. Дякую)

  • @назарійгригоришин
    @назарійгригоришин 2 місяці тому

    Круто розказуєш!👍🔥🔥

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

    Комент для підтримки українського контенту.
    Більше алгоритмів богу алгоритмів!

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

    Йооо, це дуже круто, дякую тобі зараз стало зрозуміло чому навіть frontend розробники мають вивчати алгоритми

  • @average-user9
    @average-user9 Рік тому

    ех, крутий канал, дякую:)
    здається я починаю розуміти, як вимірюється складність моїх пошуків по масивам на фронтенді і що означають ці O(n), дякую!)

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

    ого оце контент, велике спасибі! дуже дуже дякую

  • @alexeylysenko7380
    @alexeylysenko7380 Рік тому +1

    Дякую за відео! Було б цікаво почути про різні алгоритми та структури данних!

  • @Bohdan-Venhrenovych
    @Bohdan-Venhrenovych Рік тому +1

    Топчик !!!!

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

    Дуже жирний контент! Дякую! Так тримати! Ще як варіант, хотілося б побачити порівняння різних алгоритмів і послухати де краще які використовувати.

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

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

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

    Дуже цікаво і зрозуміло по алгоритмам, вже йду шукати чи є ще таке на каналі)) якщо нема то треба додати ;)

  • @Vladyslav_Sliusar
    @Vladyslav_Sliusar Рік тому +1

    Було цікаво та все зрозуміло, дяка)

  • @andriyleliv4608
    @andriyleliv4608 Рік тому +3

    Спасибі велике! Все зрозуміло - не треба деталізувати. Цікаво більше почути про структури даних та інші відомі алгоритми і їх рішення на JS.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Зроблю ще пару відео по алгоритмах точно. Й спробую на реальних прикладах розібрати

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

    Ввважаю, що ти геній, там де потрібно надихати та пояснювати

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

    дякую за корисний контент! Підписався

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

    Дякую! Простими і та доступними словами із наведенням прикладів для перевірки теорії! Круто!

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

    Дуже дякую за контент.

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

    Дякую

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

    Це просто першокласний контент! Респект! Так тримати!

  • @ВладиславЛевківський-т2у

    👍👍👍👍

  • @bvs-16
    @bvs-16 Рік тому +1

    Тема про алгоритми прям топ

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

    Класс! Дякую за випуски :)

  • @SS-bo9yt
    @SS-bo9yt Рік тому

    Дуже класна подача, дякую. Ще було ю цікаво розбирати все на більш низькорівневому рівні, на зразок С. Ще по Rust можна спробувати запустити цикл відео.

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

      Дякую. На прикладі з C щось зможу показати, а от з Rust взагалі досвіду немає - тільки робив різні proof of concepts для себе. Але є плани зробити пару відео про роботу опецаційної системи всередені

  • @АлександрСосо-щ1б

    Очень информативно! Лайк в поддержку канала! Ждем новые выпуски.

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

    Мені подобається. Продовжуй. Можна занурюватися ще глибше :).

  • @romkalily
    @romkalily Рік тому +2

    Дуже круто, було б круто почути за індекси і дерева подробніше
    Бо це те що дійсно зустрічається:)
    Круті відео!!!

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

      Дякую! Вже навіть план для відео накидав 🙂

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

    Чудово! Дякую.

  • @ArtemHordiienko-h2p
    @ArtemHordiienko-h2p Рік тому

    Дуже класний контент, продовжуйте , у Вас все вийде)
    Хоч не знаю JS, але наче зрозуміло)

  • @СергейЛиствягов-х9ы

    Дякую за контент. Пропоную тему для відео таку як дебагінг, з зануренням в стек виклику та особливості дебагінгу асинхронних функцій. В ідеалі на прикладі хром дев тулзів 🦾

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

      Тут головне підібрати гарний приклад, що не так просто)

    • @СергейЛиствягов-х9ы
      @СергейЛиствягов-х9ы Рік тому +1

      Згоден, взагалі цю тему всі оминають але вона досить важлива, бо багато з нас дебажать на рівні console.log )

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      @@СергейЛиствягов-х9ыта я сам в більшості випадків дебажу через console.log, тільки часом запускаю дебагер 😄 але звісно бувають ситуації, коли без дебагера нікуди

  • @RomanRoman-bh8wu
    @RomanRoman-bh8wu Рік тому

    Крутий відос! Лайк + підписка :)

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

    Просто, зрозуміло і круто)

  • @ihor-pidhornyi
    @ihor-pidhornyi 11 місяців тому

    Круто пояснюєте, дуже приємно вас слухати.
    Думаю, що варто ще окрім Time Complexity нагадати про Space Complexity, тобто незважаючи на те, що в нас Time Complexity в другому варіанті мерджа стала O(n+m), то ми використовуємо O(n) Space Complexity, для того щоб отримати мапу юзерів.

    • @AboutProgramming
      @AboutProgramming  11 місяців тому +1

      Дякую за відгук! 🙂 Так, гарне доповненя. По суті, це обмін time complexity на space complexity

  • @andrewb3790
    @andrewb3790 Рік тому +1

    Привіт ,Вікторе ! Дякую за пізнавальний контент для розробників! Ідея для відео - комунікація для програміста, як краще розуміти бізнес велью програмування, в який період кар єри розробнику варто вибирати нішу і лише в ній розвиватись - наприклад займаюсь лише бекендом для хелскеру чи щось таке.

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

      Гарне питання. Спробую зробити відео на цю тему

  • @asholok
    @asholok Рік тому +1

    Вікторе Віталійовичу, це нереально крутий безкоштовний контент. Дякую. В свій час я платив не малі гроші на курсах за таку інформацію. Хай квітне український youtube!
    P.S Можна ще зауважити що в оптимізованому варіанті збільшиться N по пам'яті.

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

      Дякую дякую) Так, те часто обмін CPU на RAM

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

    Дякую за відео

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

    відео суперове. якщо хтось хоче почитати книжечку, то "Грокаєм алгоритми" непогано описує про О від н (там правда приклади на пайтоні здається, але то нічьо)

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

    Супер, дякую! Цікавить використання структур даних та алгоритмів з точки зору вирішення практичних завдань, як на початку відео. Також цікавить мриклад створення DSL на JS та компілятора/інтерпритатора для нього.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Доводилося писати пару разів компілятор/інтерпретатори, але це були досить специфічі задачі. Ось робив доповідь про один кейс - ua-cam.com/video/08bkGZTGxjM/v-deo.html, інші кейси це були транспайлер (де користували екосистему babel, але писали власні граматики) та парсер для query language, де теж розбирали за допомогою peg.js. Й ще був кейс, де дозволяли користувачу описати математичну модель й виконати її в безпечний спосіб.
      Відносно DSL, то частіше це просто набір бібліотек з domain specific api, або опис в декларативному форматі в конфігах.
      Якщо підкажете, яку саме проблему хочете вирішити за допомогою DSL (й поділитесь прикладом) й чому не підходить просто JS API, то можливо зможу ще якійсь кейс згадати. Зараз бачу тільки кейс, коли нам потрібно дати можливість користувачам описувати певну логіку, яку треба безпечно виконати. Й тут стандартне рішення приходить на думку - пишемо граматику на ANTLR або PEG.js для парсингу DSL в абстрактне синтаксичне дерево (AST), а потім просто пишем інтерпретатор або генератор коду для дерева. Сам інтепретатор написати для AST досить просто, оскільки дерево це по суті набір операторів й операндів, які можна замапити на виклики функцій
      Але ідея для відео гарна :)

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

    Приємно, коли розумієш шо Вітя розказував тобі про це, ще до запису відео роки 2 назад :D

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Інфа, яка не встаріває - була корисна два роки тому, зараз корисна, буде корисна й через п'ять років 🙂

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

      @@AboutProgramming сто відсотків)

  • @j.d.3890
    @j.d.3890 Рік тому

    вау! дякую! я хоч і тестувальник але дуже цікаво дивитися і розбирати ці речі.
    Не зовсім зрозумів що значить "пайтон без джита" 22:40
    Хотілося б ще почути про різні методи аусентикацій зрозумілою мовою (oauth, oauth2, особливості типу колбек урл, грант тайпів, authorization code, pkce, можще ще про sso як під капотом працює)

    • @AboutProgramming
      @AboutProgramming  Рік тому +2

      Дяку за відгук ) Відносно пайтона, то це про JIT (just in time compilation), якої немає в cpython (стандартному інтерпрететорі), але є в PyPy. Також JS V8 має потужних механіз JIT компіляції. Відносно авторизації, то дуже гарна тема. Колись навіть SAML бібліотеку повністю руками реалізоував. Думаю, що варто зробити відео, але не стільки про деталі oauth, скільки взагалі про концептуальні нюанси різних механізмів аунтентифікації (SSO й не тільки) й підтрими сессії (JWT, Signed cookies, серверні сесії й так далі) .

    • @j.d.3890
      @j.d.3890 Рік тому

      @@AboutProgramming Згоден, буде дуже цікаво послухати. Часто стикаюсь з цим по роботі, бо маємо багато різних аус механізмів на різних сервісах, які іноді треба тестувати автоматично і без ЮІ.

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

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

    • @AboutProgramming
      @AboutProgramming  Рік тому +3

      Є одна з моїх доповідей (правда ще російською) про реальний проект, де ці знання дуже допомогли. Й часто знання алгоритмів допомогають зрозуміти властивості існуючої системи, а тут довелося й самому багато чого реалізовувати - ua-cam.com/video/08bkGZTGxjM/v-deo.html
      Але віде на каналі про реальні кейси ще теж буде :)

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

    Дуже цікаво, дякую! Але таке враження, що найбільш корисне в алгоритмах це якраз порахувати складність та бінарний пошук)

    • @AboutProgramming
      @AboutProgramming  Рік тому +3

      Так)) Складність то ключове. Але мені доводилося повертатися до алгоритмів не один раз - й дерева, й інвертований індекс реалізувати, й топологічну сортировку. Й все це давало значну цінність бізнесу. Ще зроблю пару відео на цю тему

  • @MityaEr
    @MityaEr 5 місяців тому

    супер, ще треба розкрити шось інше крім О(n), О(n+1) i log(n) :)

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

    Дякую. Порада: більш послідовно давайте матеріал, структуровано. Плигати (тут граємо, тут не граємо, тут рибу загорнули...)... Хм... Для знаючих матеріал не потрібен, незнаючім важко зрозуміти. Успіхів. :)

  • @ВолодимирВячеславович-ж9ш

    Дякую за контент! Дуже пізнавально) А чи плануєте (або порадите) відео по тому як правильно рахувати складність алгоритму? Щоб так просто і доступно як це робите Ви)

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

      Є книга "Cracking the Coding Interview. 189 Programming Questions and Solutions" Gayle Laakmann McDowell. Й там мені сподобався розділ цьому присвячений - "Big O", в якому різні приклади є й набір вправ по розрахунку алгоритмічної складності

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

    Nice :)

  • @SerhiiZhydel
    @SerhiiZhydel Рік тому +1

    доброго дня, Вікторе. я unity developer, тож маю інший стек і можливо через це меня турбують декілька речей з відео, не могли б ви пояснити мені їх?
    1. ви кажете шо алгоритмічна складніть пошуку в хеш таблиці це О(1). я не знаю як побудовані алгоритми в JS але в C# хеш таблиця складається с бакетів (масивів) і данні кладуться в ці бакети в залежності від їх хешкоду. тож для того щоб знайти дані в таблиці, потрібно порахувати хешкод - О(1), далі знайти бакет в який цей хешкод мав кластися - О(кількість бакетів) або О(log(кількість бакетів)) і далі всередині бакета знайти елемент який нам потрібен О(кількість елементів в бакеті) або О(log(кількість елементів в бакеті)). тоже в залежності від того на скільки бакетів поділена таблиця і скільки елементів знаходиться в конкретному бакеті, складніть може бути дуже різна. навіть в ідеальному випадку це О(1) + О(log(кількість бакетів)) + О(log(кількість елементів в бакеті)). та й взагалі, на базовому рівні хештаблиця - це данні відсортовані по хешу і задача пошуку в ній аналогічна до пошук числа в сортованому массиві, тобто О(log(n)). чому ви (ну і ще в кількох містях я про це чув) кажете что пошуку в хеш таблиці це О(1)?
    2. якщо казати про пошук юзера по Id, то мабуть правильніще було б казати про пошук в базі данних, тому що Object.FromEntries(users.map(...)) (знову ж таки я не знаю JS, але якщо я правильно зрозумів) це створення нової, відсортованної коллекції данних. тобто якби щось подібне мало б місце в проді, то це б означало що я б повинен був запулити всю таблицю с користувачами, а потім іще її пресортувати и лище потім шукати юзера. хіба ORM якії ми передаємо запит не повинна сама сформувати найоптимальніший запит до БД? в такому разі ваш перший приклад з users.find має набагато більше сенсу і потрібно зосередитись над тим щоб в БД приходили оптимізовані запити.
    3. чи часто вам доводиться писати такі алгоритми власноруч? бо з мого досвіду знання алгоритмів зводиться до правильного використання типів данних і їх комбінацій, а не до безпосереднього їх написання.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Гарні моменти підмічені, але є нюанси.
      1. Відносно алгоритмічної складності хеш-таблиці, то я кажу в відео про "середньому, якщо немає колізій" й там буде константний час пошуку. Час пошуку бакету насправді не "О(кількість бакетів) або О(log(кількість бакетів))" , а O(1), оскільки це просто доступ по індексу в масиві. Відносно пошуку в бакеті, то він виникає тільки, коли у нас є колізії (тому в середньому у нас константа, а найгірший варіант це коли у нас всі значення потрапляють в один бакет й отримуємо пошук по звʼязаному списку за O(n)).
      2. >"Object.FromEntries(users.map(...)) це створення нової, відсортованної коллекції данних". Тут немає сортування, але так це стоврення щось типу хештаблиці (в JS це обʼєкт, який працєє трохи по інакшому, там є inline caching й більше на struct тоді схоже). Чи треба тягнути всі дані - ні. Наприклад, я витягаю список банківських операцій, а потім збираю список користувачів, які згадувалися там й потім роблю запит лише на список потрібних користувачів. Але після цього мені треба додати інформацію про користувачів в таблицю за банківльськими операціями. Це можна вирішити через JOIN на бекенді, але часом база не вміє джойн(MongoDB), або дані з різних джерел тягнуться, або таке API у бекенда й треба робити на клієнті або ще щось.
      3. Померджети дані часто буває треба. Й звіти різні, й просто в UI, коли апіха тільки так вміє. Але якщо говорити взагалі про стуктури даних й алгоритми, то значно частіше це про використання, а не написання. Й розуміння структур даних це більше для того, щоб розуміти їх властивості, а не щоб їх безпосередньо реалізовувати ці структури (але буває й таке :) Колись робив доповідь про цікавий проект ua-cam.com/video/08bkGZTGxjM/v-deo.html (російською)

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

      @@AboutProgramming дуже дякую вам за таку швидку та детальну відповідь!
      1. Дуже гарне зауваження щодо пошуку бакета. Справді, якщо їх кількість фіксована, то простіше використовувати остачу від ділення хешкоду на кількість бакетів як індекс в масиві і мабуть саме так це і робиться) Проте все ж, як я розумію, при значній кількості даних (або гарантовано - якщо елементів більша ніж кількість бакетів), колізій не можна уникнути, тому у результаті все одно потрібно буде виконувати перебір, тож всеодно це не O(1). У випадку коли ми маємо 200к елементів в таблиці і додавали їх поштучно (не вказали одразу скільки бакетів потрібно), алгоритмічна складність буде значно гіршою ніж навіть O(log(n)), бо нехай там буде стандартних 16 бакетів (нагуглив це число для Java, для інших мов мабуть щось схоже), це все ще ~12500 елементів в бакеті, правильно? Або ж ця таблиця буде перераховуватися кожен раз коли кількість елементів буде наближатися до кількості бакетів (тобто разів 10 щонайменше) і тоді цей тип даних теж важко назвати оптимальним для подібних задач (пошуку елементів всередині локальної функції), краще вже віддати це в БД з індексами)
      2.1 Може розгатка до попереднього пункту полягає у вашій відповіді на цей. Бо якщо в JS існує якесь магічне рішення для проблем з хеш таблицею, то воно мало б працювати і тут. Створення і заповнення таблиці теж доволі важка операція (як мінімум, це вже обхід початкового массиву, щоб покласти його в цю таблицю), а якщо вона ще й це відбувається локально, то й генеруюча багато сміття, яке щоб потім прибрати, треба теж тратити процесорний час.
      2.2 А якщо у нас небагато елементів у масиві (як у випадку з кількістю юзерів у транзакції), то пошук перебом у 95% випадків виглядає як найбільш оптимальне рішення. Звичайно, якщо масив великий і уже відсортований, то можна придумати і щось інше, проте я таких випадків на своїй роботі майже не пам'ятаю)
      2.3 Інші зауваження про MongoDB і багато запитів на зовнішні сервіси звучать як проблеми вищого рівня і навряд проблема саме в процесорному часі. Тут автору цього рішення скоріше треба було б спочатку дивитися відео про архітектуру)) Проте я розумію що інколи таке має місце і тоді треба просто писати костиль, бо швидко цю проблему не вирішити і тоді можна вклеїти сюди ваш код) Але навіть так, мабуть більше часу буде витрачено на чекання відповіді від зовнішніх сервісів і парсення їх в обьекти.
      3. Думаю ви самі про це чудово знаєте і просто упустили цей момент і не підкреслили у відео, що передчасна оптимізація така ж небезпечна як і її відсутність. Звістно, кожен программіст повинен розуміти як використовувати різні структури даних, проте у мене складається враження що основна аудиторія яка буде дивитися це відео і брати його на озброєння, будуть джуни. І через їх оптимізацію, їх і без того важкий до читання код, стане іще важчим, а заодно доведеться розгрібати конфлікти у команді щодо того коду))
      4. Я б іще доповнив відео правильним вибором інструментів для рішення різних проблем. Може якийсь алгоритм можна написати на c++, щоб він виконувався на стеці, щоб не було кеш місів? А потім зверху іще запакувати це у векторні операції? Або переписати алгоритм, щоб він виконувався на шейдері, якщо річ йде про клієнський код? А може все ж простого перебору буде достатньо)

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      @@SerhiiZhydel хеш таблиця в середньому має константний час доступу й більшість реалізацій забезпечують завдяки динамічній зміні розміру й рехешингу. Відносно кількості бакетів, то нормальний load factor на рівні 0.6-0.7. Тобто бакетів має бути більше ніж значень

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

      @@AboutProgrammingЗараз передивився іще раз відрізок про цю оптимізацию з хеш таблицею, а також прогнав бенчмарки. Дійсно, навіть при відностно малій кількості елементів (5 юзерів і 100 месседжів, 1000 ітерацій), другий варіант відпрацьовує майже в 2 рази швидше, а коли кількість елементів зростає (1000 юзерів, 20_000 месседжів, 1000 ітерацій), то різниця доходить 100 разів. Проте і споживання пам'яті теж значно зростає. В першому випадку різниця також в 2 рази, а в другому за 1000 ітерацій другий варіант від'їдає 30 мб, в той час як перший 0.1мб. Я закешував таблицю (очищав її перед кожним запитом) і тоді споживання пам'яті впало до 1кб. Я просто в шоці, в мене розрив шаблонів, ніколи не думав що можна перекладати дані з одніеї колекції в іншу для якоїсь локальної обробки і що це даватиме такий буст.

  • @Philip_Just
    @Philip_Just Рік тому +1

    Дякую за відео. Я взагалі нічого про алгоритми не читав хоча давно в індустрії. Можливо книгу порадиш?

    • @Epic0n
      @Epic0n Рік тому +2

      "Грочуємо алгоритми" класика

    • @AboutProgramming
      @AboutProgramming  Рік тому +2

      @@Epic0n Не чув до цього про цю книгу. Глянув й книга виглядає класно - базові алгоритми й без хардкору - те, що треба для ознайомлення з темою

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

      @@Epic0n дякую. Замовив.

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

    +

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

    цікаво а в js якщо object дуже великий (ну наприклад 1 млн ключів) то наскільки швидкий доступ по ключу в обїекті? під капотом js самі ключі теж тримає в якійсь відсортованій структурі?

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

      В v8 реалізація трохи хітріша, але в цілому 1млн не сильно має відрізнятися від 1тис елементів по швидкості (при читанні), а от пам'яті звісно вимагатиме. Ну й залежить від того , наскільки V8 зможе заоптимізує все. В v8 використовується щось по типу сішного struct (просто масив) й в рантаймі на об'єкти чипляються класи (типу внутрішній ідентифікатор типу). Й коли відомий тип, то можна використати inline caching для швидкого доступу до специфічних ключів (inline cache додається не в місце ініціалізації об'єкту, в кожне місце, де ми читаємо дані по конкретному ключу). Якщо в об'єкт додається новий ключ, то відбувається зміна класу й новий клас описує, що з'явилося нове поле й вказує на попередній клас. Якщо у нас буде багато ключів й ключі будут адресуватися через змінні, то скоріше за все буде фолбек на хешмапу.
      Але в цілому, можна очікувати поведінки хеш-таблиці

  • @MiiDosvid
    @MiiDosvid Рік тому +1

    Є нюанси:
    - В більшості випадків це не потрібно.
    - Більшість бібліотек вже має це все під капотом.
    - Джуна не будуть саджати за алгоритмічні системи.
    - Коли тобі треба щось зоптимізувати це легко гуглиться.
    - Робота з алгоритмами набагото складніше того що ти показав, це не одна книжечка "алгоритми", це глибокі знання математики, вміння читати та розуміти научні пейпери, та вміня це все юзати для розробки того що тобі треба. Фактично це або РнД або дослідницька діяльніть, але аж ніяк everyday practice.
    - Я дуже не рекомендую запам'ятовувати те що не потрібно кожень день.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Дякую. Цікава думка, але не можу погодитися. Спробую пройтися по всім пунктам.
      >В більшості випадків це не потрібно.
      Алгоритмічна складність це основа й досить важлива. Регулярно опираюся на це в щоденній роботі, що просто в написанні коду, що в проектуванні складних підсистем.
      Відносно алгоритмів й структур даних, то теж бачу багато випадків, коли розробникі не розумають властивостей індексів в базах даних, оскільки не розуміють, що там B-Tree всередені. Аналогічно з інвертованими індексами.
      Робив відео на каналі "Навіщо глибоко розбиратися в речах й як менше забувати те, що вивчили?" - ua-cam.com/video/vunaSc37B5o/v-deo.html
      Знати в деталях неможливо, але розуміти принципи дуже корисно.
      > Більшість бібліотек вже має це все під капотом.
      Але треба розуміти, що там, що розуміти властивості, щоб можна було обрати відповідно бібліотеку. Банальний приклад LinkedList vs Array.
      >Джуна не будуть саджати за алгоритмічні системи.
      Так, а мідла чи сеніора вже можна. Тобто, мідл/сеніор знають, як працюють алгоритми, а джун - ні. Тобто, якщо джун хоче вирости, то йому теж доведеться це знати.
      >Коли тобі треба щось зоптимізувати це легко гуглиться.
      Зазвичай можна нагуглити, як поміряти перфоманс, а оптмізації можуть займати місяці. Декілька прикладів з життя:
      1. Система перевірка пермішенів для IoT проекту. Треба чітко розуміти алгоритмічну складність було й стурктури даних, щоб отримати достатній рівень масштабованості систем.
      2. В Гуглі оптимізуємо latency веб-інтерфейсу й ця робота більше ніж на рік.
      Але так, часом буває й простіше кейси. Наприклад переписати 3 вкладених цикли на 3 цикли один за одним. Й замість O(n^3) отримати O(n). Але це часто видно на код-ревʼю, якщо є розуміння алгоритмічної складності.
      >Робота з алгоритмами набагото складніше ...це або РнД або дослідницька діяльніть.
      Буває й таке, але в таких проектах не доводилося приймати участь.
      >Я дуже не рекомендую запам'ятовувати те що не потрібно кожень день.
      Просто запамʼтовувати не працює, але працює підхід, коли інженер намагається сформувати у себе в голові систему. Тоді все йде набагато легше. Окрім того, це дозволяє інженеру зростати. Є є про це в тому відео вище.
      Чи можна без цього - так можна. Чи є велика користь від знань алгоритмів й структур даних? Тут діє закон спадної граничної корисності - з кожним додатковим алгоритмом й структурою даних додаткова корисність падає. Але зовсім без цього буде складно.
      В Гуглі алгоритми й структури це те, що очікують від джунів, як найпростіше, що можна знати. Від мідлів й сеніорів очікують вже вміння проектувати.

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

      @@AboutProgramming у гугла очень не очень подход к найму, изза чего такое огромное количество мертвых проектов и никакая прибыль от них.
      Гугл очень плохой пример того как надо особенно сейчас. Да и сори но таких обьемных контор раз два и обчелся, ориентироваться на 1 из ярдов так себе решение.
      Помню ли я как работает б-три индекс - нет, надо ли мне это помнить - нет, могу ли я за 5 мин прочитать и вспомниить - да. следовательно ценность памяти ничего не стоит. А вот место в буфере очень сильно позволяет не тупить.
      ты не можешь запомнить все аспекты разработки. это физически нереально, а следовательно и пытаться это делать не стоит. А вот уметь быстро искать инфу и в ней разбираться надо.

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

      @@AboutProgramming вот смотри вы оптимизируете латенси год. а вы считали насколько эти затраты эффективны?
      оптимизация это крайне дорогая штука которая в 99.9% не окупается, я именно про оптимизацию а не правки за косолапыми девами

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      @@MiiDosvidта ніби Гугл нормально заробляє) Відносно людей, які працюють в Гуглі, то виключно позитивно оцінюю їх професіоналізм й бізнес орієнтованість. Багато людей, які успішно запускали бізнеси й стартапи й благо людей після Гугла запускають бізнеси й стартапи.
      Відносно b-tree, то багато джунів взагалі не знають про індекси, а хто знає, то дивує чому LIKE '%searchstr%'. Відносно закритих проектів, то не закривають ті, які не приносять користі бізнесу, що ок.
      Віднесено питання про latency, то настільки є запитів від продактів, що доводиться дуже зважено підходити до пріоритетів й робити тільки те, що максимально важливо. Задачі по latency теж не виникли з порожнього місця

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

      @@AboutProgramming у гугл зарабатывает реклама и клауд, остальное почти все убытики

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

    Оце б відео мені років 5 тому побачити або комусь хто починає розбиратися з O notation і алгоритмами - розцілував би.

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

    Омг, я поставив 2й лайк, відео 4.9к переглядів. Тобі точно варто про це нагадувати 😂

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

    Зайшов залишити холіварний коммент.
    Відео називається "чому алгоритми важливі". У вступі розповідають про кейси, коли на інтерв'ю задають питання на знання алгоритмів.
    А по факту мова про те "чому важливо розуміти алгоритмічну складність" і приклади для джунів 😅 дуже наглядний приклад і цікаво було подивитись, але очікував зовсім іншу тему.
    Мені все ще не зрозуміло навіщо треба знати як заімплементити сортування бульбашкою і інші купу назв, які тобі дійсно майже ніколи не потрібні і на додачу вміти це демонструвати на співбесідах?

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

      Так, в першу чергу важливо розуміти властивості алгоритмів й головна властивість для алгоритму це алгоритмічна складність, хоча для кожного алгоритму можуть бути й інші властивості (наприклад, стабільність для сортування). Але згоден, що є алгоритми не дуже корисні (як бульбашковий метод сортування), але є алгоритми й структури даних, розуміння яких може допомогти зрозуміти властивості більш комплексних систем. Планую на каналі робити відео з більш складними прикладами, але треба спочатку розповісти про базу :)

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

      @@AboutProgramming дякую за відповідь. Тоді бажаю тобі наснаги, щоб випустити усі ці відео) було б круто побачити приклади, які змусять подивитись на цю тему інакше.
      Приклади з поточного відео точно круті і подібні задачки під час співбесіди дуже допомагають перевірити джунів.
      Але коли мова заходить про більш серйозні задачки для умовно сеніорів, то я можу уявити тільки дуже специфічні напрямки розробки, де дійсно можуть знадобитись серйозні знання алгоритмів.
      На більшості проектів може буде 1-2 місця, де доведеться заюзати якусь більш хитру структуру. Тобто далеко не кожному розробнику пощастить долучитись до челенджа))

  • @Jesus_On_Extasy
    @Jesus_On_Extasy 10 місяців тому

    І чому всі розказують про binary search виключно на числах, адже саме з простими даними ми не так часто працюємо. Частіше у нас саме об'єкт адже даних багато і ми їх групуємо. Тож як ефективно шукати в масиві об'єктів?

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

    Для початку і нащупування подачі в цій темі ідеально. Хотілося б більше деталей почути типу якщо всі субд працюють плюс мінус з одинаковими структрами індексів і підходом до пошуку, то яка фактично між ними різниця окрім квері ленгвіджу (фронтенду)

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

      Якраз планував наступним відео розповісти про відмінності, бо насправді з індексами бази працюють трохи по різному й це забезпечує трохи різні властивості для баз

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

    Не зрозумів, чому 2-га функція сказано що на плюсах, якщо в JS теж є метод includes?

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Тут про те, що V8 реалізований на плюсах й відповідно вбудований метод includes написаний на плюсах. Ми викликаємо його с JS, але реалізації на C++

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

    B-Tree замість массиву як раз під зовнішню пам'ять розраховане. Індекс, це структура данних для пошуку, не обов'язково в контексті MongoDB чи SQL.

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

      Так, є відео на каналі про дерева

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

    Було б дуже непогано відео по архітектурі. Де краще моноліт, а де мікросервіси…. І по тулзам який рушій БД в яких проектах доцільніше. Чи є життя для php в нових проектах… Ще купа питань, але то наглість з мого боку😂
    Може у Вас планується освітній проект? Чи може вже є, а я відстав від життя.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Відео по архітектурі будуть й багато)

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

      @@AboutProgramming дуже буду чекати! Дякую! Хоч я і не програміст, але дуже потрібно розібратись з тим, що накипіло за час роботи🤣🤣.

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

      Виявилось, що треба передивитись все, а потім питати🤣🤣🤣 трохи про мікросервіси і моноліт вже є: ua-cam.com/video/MCFMQR6Yvd0/v-deo.htmlsi=M2cUwKma4NFK5v_V

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

    Але дивний цей ДЖС. А я на дарті пишу, більш схожої мови на ДЖС ніж дарт мабуть немає)

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

      А що саме пишеш? Flutter апки чи web? Й чи можна вже нормально писати бекенд на dart? А то вже давно дивився на нього. Ось думаю, що може варто ще раз поглянути 🙂

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

      @@AboutProgramming апки усілякі, невеликі. Бек на дарте чув що можна але власноруч не робив. Фаербейс/супабейс. Або апішку на дотнет можу підняти, якщо нема бажання до усіляких сервісів звертатись.

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

    Наочний приклад всім користувачам «всього готового». Без знання алгоритмів в програмуванні нічого буде робити років за 3-5. Бо звичайний щіткод краще і дешевше буде генерити умовний gpt-6.0. Критикам нагадаю, що вже зараз sql запити chatgpt формує коректніше і краще ніж більшість джунів, яких я бачив за останні 3-4 роки.

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

    1:43 Хіба тільки усерНейм?)

  • @ІгорьКосмінський

    то вчити Пайтон чи ні?

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

    порадьте, будь ласка, книгу або курс по алгоритмах. Дякую за контент

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

      Якщо так, щоб потренуватися задачі писати для підготовки для співбесід, то найкраще www.algoexpert.io/questions . Якщо книгу для початківців (базові алгоритми), то в коментарях радили, то Grokking Algorithms. Якщо саме курс, то ніколи не проходив й тут складно щось порадити конкретне

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

      З більш повного є "The Algorithm Design Manual"

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

      @@AboutProgramming дякую

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

    ок, перший приклад ОК... швидше. але шо по памяті? збільшилась, бо масив згенерував ще один. на тисячах ОК... а як про 100к, 1000к??

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

      Памʼяті треба більше. Hashtable вимагає O(n) памʼяті. Але тут потрібна памʼять не під весь обʼєкт, оскільки ми можемо тримати референс на нього

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

      @@AboutProgramming ok, тобто створюючи новий ми робимо асоціативний масив. якщо так то може й не в два рази. але якщо це буде новий, то біда. можливо я помилився. бо це ж не клонування...

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

      @@chuabaka864 так, але тут обираємо де менша біда. по пам'яті ми будемо умовно 2x, а от по CPU зростання може бути квадратичним. Припустимо, що у нас по одному юзерів й повідомлень й нам потрібно додатково пам'яті на одного юзера. А тепер припустимо, що у нас 10k юзерів й повідомлень, то пам'яті нам треба тепер в 10k більше або CPU в 10млн разів більше.
      По цій самій причині й індекси в базах існують хоч й займають додаткове місце

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

      @@AboutProgramming індекси, то трохи інше. у вас не індекси у вас нова структура. індекси мають фізичні оффсети. а у вас дані.

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

    Але навіщо питати про балансування В+ дерева на співбесіді на роботу, яка передбачає зміну кольорів кнопочек, питання відкрите 😃

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

      У мене жодного разу не питали)

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

      @@AboutProgramming в мене питали, при чому не на сеньорну (як потім виявилось) позицію 😃

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

      @@sergiig9336 в Гуглі зазвичай кодінг інтерв'ю це база, яка для всіх - й джуни й менеджери проходять. Там не вимагається зазвичай прям реалізувати якійсь відомий алгоритм, а дається задача, де знання алгоритму можу бути корисним, щоб зробити більш оптимальне рішення. На старші позиції вже додається system design interview

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

    краще бути вже не може

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

    Як хтмл-програміст згідний на всі сто

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

      Особливо, якщо робити складні анімації на канвасі)

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

    Цікаво, дак! Але... багато тошноти. Щоб не було тошноти потірібні дублі і монтаж, а не все робити в один захід.

    • @AboutProgramming
      @AboutProgramming  Рік тому +1

      Нажаль, цього не буде. Це особливість формату, але я розумію, що може не всім заходити