• Читабельность кода или скорость его выполнения?

    tzlom
    @tzlom
    Читабельность тоже не простой вопрос, я встречал людей для которых рекурсия менее читабельна чем цикл. Но читабельность это главное, суть в чём - код все равно когда-то придется менять (например он работает слишком медленно), если он не читабельный - его проще выкинуть, а это и потраченные ресурсы и риск.
    Ответ написан
    2 комментария
  • Смысл и предназначение обычного бинарного дерева? Какова погрешность измерение времени программы при помощи Stopwatch'ера?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Просто бинарное дерево ради бинарного дерева особо нигде не используется. Это просто вид организации данных. Можно их линейно в список или массив сложить, можно организовать в виде дерева. Но на нем можно делать разные крутые штуки, навешивая что-то сверху. Обычно получается делать всякие полезные вещи с логарифмической сложностью - потому что дерево, если его удачно организовать имеет логарифмическую высоту.

    Можно поддерживать его сортированным и балансированным - вот и стандартные деревья поиска, работающие за log n. Можно поддерживать свойство кучи (предки больше потомков), и у вас получается куча, на которой можно делать приоритетную очередь. Можно зафиксировать высоту дерева и класть данные только в листы, а в промежутачных вершинах считать сумму детей - так получается дерево отрезков, которое позволяет за логарифм считать сумму или максимум на любом отрезке в массиве, менять элементы, добавлять значение ко всем элементам на отрезке и много чего другого.

    Про stopwatch ничего не знаю, что это такое даже.

    А вопросы на бинарные деревья - они неинтересные и тривиальные (сколько детей? Минимально возможная высота дерева? Сколько промежуточных вершин при данном количестве детей и выстое?)
    Вопросы надо задавать про конкретную структуру данных - какие операции с ней можно выполнять и как долго они работают. Сколько памяти нужно для хранения.
    Ответ написан
    Комментировать
  • Смысл и предназначение обычного бинарного дерева? Какова погрешность измерение времени программы при помощи Stopwatch'ера?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Бинарные деревья это обычно деревья поиска. Просто бинарные деревья, по-моему, не используются. Единственное, что на ум приходит, это hash tree(Merkle tree) в криптографии. В общем, правила будут такие, какие задашь в имплементации.
    Вопросы, ну например, что такое высота дерева? (Здесь и далее за дерево считай BST). Каково асимптотическое поведение основных операций над деревом? Как их улучшить? Что такое сбалансированное дерево? Какие реализации сбалансированных деревьев поиска ты знаешь? Какие из них используются в стандартной библиотеке твоего основного языка?
    Можно придумать пачку вопросов про обход: как обойти дерево по слоям(в ширину)? В глубину? Как проверить, что бинарное дерево является деревом поиска?
    Ну и потом можно спросить, какие небинарные деревья ты знаешь?
    Ответ написан
    Комментировать
  • Зачем нужно знать эффективность\сложность алгоритма?

    mayton2019
    @mayton2019
    Bigdata Engineer
    На алгоритмической сложности стоит вся современная криптография (https-соединения в браузере) и криптовалюты. Все они сегодня работают и существуют только потому что есть алгоритмы которые работают в одну сторону легко и быстро (нанесение электронной цифровой подписи) а в обратку - настолько туго и бесконечног долго что сама по себе генерация лже-подписи становится невыгодной злоумышленнику просто по временнЫм затратам.

    А если говорить простыми словами то все подмножество алгоритмов делится на константные O(1) - это поиск в хеш-табличке. Логарифмические O(Log n) - это поиск в дереве или сортированной коллекции. Линейные - любой поиск в произвольнйо коллекции O(n). И дальше идут полиномиальные (это всегда цикл в цикле) экспоненциальные O(exp n). Здесь начинается криптография. И комбинаторные, в формулу которых входит факториал от N или еще апроксимируется O(n^n). Последние как-раз и создают тот самый класс нерешаемых наукой алгоритмов для которых пытаются строить квантовые устройства работающие совсем на других физических принципах.
    Ответ написан
    Комментировать
  • Зачем нужно знать эффективность\сложность алгоритма?

    Griboks
    @Griboks Куратор тега C#
    Если кратко: для вас смысла учить нет.

    Если подробно...

    1. Сложность/эффективность бывает разной. Обычно понимается как время выполнения или количество операций. Но также бывают и другие эффективности/сложности, например эффективность использования памяти.
    2. Знание всей этой математики не даёт абсолютно никакой пользы при написании кода. Требуется оно только в двух случаях:
    а) при проектировании (программным архитекторам) и только при условии жёстких ограничений (обычно слабого железа)
    б) при оптимизации, когда вы просматриваете результат профилирования и видите узкое место в каком-то конкретном алгоритме
    Ответ написан
    Комментировать
  • Читабельность кода или скорость его выполнения?

    Ni55aN
    @Ni55aN
    Конечно же чистота кода. В 99% процентах случаев не важно, выполняется ваша функция за O(n3) или O(log n). Про низкоуровневые оптимизации вообще стоит забыть, если изначально не стоит требования писать под "калькуляторы".
    Наверное одно из немногих, о чем не стоит забывать, это применение правильных структур данных, чтобы не получилось так, что на каждый чих будет там что-то пересчитываться, когда этого можно избежать
    Ответ написан
    Комментировать
  • Читабельность кода или скорость его выполнения?

    tomnolane
    @tomnolane
    профессиональный разработчик
    DRY, KISS ваше все.
    Остальное придет с опытом, особенно когда будете работать в команде
    Ответ написан
    Комментировать
  • Читабельность кода или скорость его выполнения?

    Griboks
    @Griboks Куратор тега C#
    Однозначно, читабельность. За скорость выполнения не беспокойтесь, C# сам её обеспечит на достойном уровне.
    Ответ написан
    Комментировать
  • Читабельность кода или скорость его выполнения?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вот откуда возник вопрос: рекурсия выполняется медленнее, но она более читабельна, чем цикл, который выполняется быстрее рекурсии.
    Спасибо, поржал)
    Лучше - учите операции досрочного выхода из "вихря" рекурсии.

    1. Читабельность кода - определяется его архитектурой.
    2. Скорость выполнения - правильно выбранным алгоритмом для конкретной задачи и количеством операций для динамической работы с памятью: выделение памяти под объекты, переменные, etc.
    Ответ написан
    2 комментария
  • Зачем нужно знать эффективность\сложность алгоритма?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Выше всё верно написали.
    Вот тут есть наглядно про сложность, а также про сложность многих классических алгоритмов. Для того чтобы понять и въехать - самое то.
    Ответ написан
    1 комментарий
  • Зачем нужно знать эффективность\сложность алгоритма?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Есть два алгоритма для одной задачи:
    - один проходит по всем элементам один раз и что-то делает, выполняя поставленную задачу O(N)
    - другой проходит по всем элементам для каждого элемента: O(N^2)

    При количестве элементов N=10, в цикле в первом случае будет 10 операций, во втором случае 100 (казалось бы, в 10 раз больше всего, как и элементнов)
    Но при увеличении до N=1000 в первом случае 1000 проходов, во втором уже 1 000 000 ! Видите как сильно растет разница.

    Даже при небольших значениях N это может быть важно, если каждая операция долгая/тяжелая и даже 2-3х кратное увеличение может быть проблемой.
    Ответ написан
    Комментировать
  • Зачем нужно знать эффективность\сложность алгоритма?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Понимайте прямо. Алгоритм работает дольше. Хуже того с ростом данных его сложность возрастает, иногда линейно, а иногда по экспоненте. Ищите в интернете O и прочее. Особый привет EF и прочим ORM там это играет во все поля.

    Обновил
    https://tproger.ru/articles/computational-complexi...

    https://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B5%D...

    https://www.wisereport.ru/big-o/
    https://otus.ru/nest/post/1124/
    Ответ написан
    7 комментариев