Задать вопрос
  • Как генерируется hashcode по умолчанию, то есть в классе object, в C#?

    Griboks
    @Griboks Куратор тега C#
    Хотелось бы добавить, что стандартная реализация не стандартизирована и не рекомендуется к явному использованию.
    Furthermore, .NET does not guarantee the default implementation of the GetHashCode method, and the value this method returns may differ between .NET implementations, such as different versions of .NET Framework and .NET Core, and platforms, such as 32-bit and 64-bit platforms. For these reasons, do not use the default implementation of this method as a unique object identifier for hashing purposes.
    Ответ написан
    1 комментарий
  • Как генерируется hashcode по умолчанию, то есть в классе object, в C#?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    /// <summary>Служит хэш-функцией по умолчанию.</summary>
        /// <returns>Хэш-код для текущего объекта.</returns>
        [__DynamicallyInvokable]
        public virtual int GetHashCode()
        {
          return RuntimeHelpers.GetHashCode(this);
        }

    https://stackoverflow.com/questions/720177/default...

    Она же вызывает вот этот нативный код.

    FCIMPL1(INT32, ObjectNative::GetHashCode, Object* obj) {  
        CONTRACTL  
        {  
            THROWS;  
            DISABLED(GC_NOTRIGGER);  
            INJECT_FAULT(FCThrow(kOutOfMemoryException););  
            MODE_COOPERATIVE;  
            SO_TOLERANT;  
        }  
        CONTRACTL_END;  
    
        VALIDATEOBJECTREF(obj);  
    
        DWORD idx = 0;  
    
        if (obj == 0)  
            return 0;  
    
        OBJECTREF objRef(obj);  
    
        HELPER_METHOD_FRAME_BEGIN_RET_1(objRef);        // Set up a frame  
    
        idx = GetHashCodeEx(OBJECTREFToObject(objRef));  
    
        HELPER_METHOD_FRAME_END();  
    
        return idx;  
    }  
    FCIMPLEND


    Еще посмотрите эту статью.
    see Knuth Vol 2 p16 (3.2.1.2 Theorem A)

    https://habr.com/ru/post/188038/

    https://codingsight.com/the-origin-of-gethashcode-...
    Ответ написан
    Комментировать
  • Читабельность кода или скорость его выполнения?

    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 комментариев