• Как постороить дерево как на картинке?

    @Alexander1705
    Каждая вершина, это структура, которая содержит данные, указатель на родителя и список указателей на дочерние элементы.

    struct item {
        int value;
        item* parent;
        vector<item*> children;
    
        item(int v, item* p = nullptr) : value(v), parent(p) {}
        
        void addChild(int value) {
            children.push_back(new item(value, this));
        }
    
        ~item() {
            for(auto child : children)
                delete *child;
        }
    }


    Естественно, value может быть любого другого типа.
    Ответ написан
    1 комментарий
  • Вывод диагонали квадратной матрицы. Как правильно на АСМ + Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    imul eax, 4

    shl eax, 2 же. Или даже
    lea edx, dword ptr [eсx * 4 + 4]
    (почему +4 -- см. ниже).

    push edx
    ...
    pop edx

    Зачем? У тебя полно регистров -- используй их.

    add eax, edx
    add eax, 4

    Слабо было перед циклом сделать edx сразу правильным?
    Ответ написан
    1 комментарий
  • Можно ли одной bitwise операцией (без циклического сдвига) определить степень двойки(номер бита)?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    На x86 -- BSF/BSR.
    Ответ написан
    Комментировать
  • Для чего программисту нужно знать физику?

    @mamkaololosha
    Если вы начинаете программировать что-то отличное от веба и прочего LAMP, а именно: поиск, обработку сигналов, графику, физику для игр, железяки и прочие "computer scince"-ёмкие вещи, то без знания матана, физики и прочего вы просто не сможете решить поставленную задачу. Все основополагающие вещи: оптика, процессоры, видеокарты, интернет, оптоволокно, hdd это физика. IT это тоже самое, что машиностроение. Только одни "делают машины", а другие их "красят". Так вот для того чтобы "делать машины" нужны физика, матан и прочие старперские скучные вещи.
    Ответ написан
    Комментировать
  • Как добавить строку в динамический массив строк?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    array = realloc(array, (i + 1) * sizeof(char *));
        array[i] = malloc((strlen(string) + 1));

    Поскольку вы отмечаете последний элемент массива с помощью NULL, этот код должен выглядеть так:
    array = realloc(array, (i + 2) * sizeof(char *));
        array[i] = malloc((strlen(string) + 1));
        array[i + 1] = NULL;


    Без этого, после добавления первого элемента цикл поиска будет искать за пределами массива array.
    Ответ написан
    2 комментария
  • Какой алгоритм коррекции ошибок выбрать для двумерного баркода?

    Мне кажется, или обычный контроль четности по строкам и столбцам (4 контрольных бита в последнем столбце + 4 контрольных бита в последней строке) позволит Вам исправлять любую одиночную ошибку ? (она будет находиться на пересечении строки и столбца с поврежденными четностями; а повреждение в контрольных разрядах будет определяться отсутствием нарушений в другом измерении).

    Ну и из 9-ого бита, наверное, можно что-то полезное извлечь ...
    Ответ написан
  • Какой Таненбаум лучший?

    @oleg0xff
    Я не могу ответить непосредственно на Ваш вопрос, но могу сказать что книги по программировании и математике надо читать на англ. Как минимум Вы будете знать термины, и сможете погуглить если что. А читая на русском Вы ни объясниться с заказчиком, не погуглить не сможете.
    Ответ написан
    2 комментария
  • Ребята, вопрос к умеющим, как лучше: сначало изучать теорию потом кодить когда она прочно закрепится в голове либо сразу начать кодить?(Html/css/js)?

    b0nn1e
    @b0nn1e
    Alcohol & Ruby on Rails
    1. Нужно освоить теоретическую базу, что-бы вы знали какие воообще есть теги, свойства и прочее.
    2. Ставиться задача.
    3. В процессе решения задачи непонятные моменты гуглятся.
    Пункты 2 и 3 повторяем тех пор пока не наберемся нужное количество опыта.
    4. Profit!
    Ответ написан
    Комментировать
  • Как решать задачу на счастливые билеты?

    SagePtr
    @SagePtr
    Еда - это святое
    Думаю, решать эту задачу примерно так:
    Допустим,
    M = AAAA BBBB
    N = CCCC DDDD
    1. Считаем массив сумм, который в исходном решении обозначен за C.
    2. Считаем кол-во счастливых билетов от AAAA BBBB до AAAA 9999.
    3. Считаем кол-во счастливых билетов от (AAAA+1) 0000 до (СССС-1) 9999 - то есть, массив сумм от AAAA+1 до CCCC-1 и поэлементно умножаем его на массив C из первого шага, получив в конечном итоге сумму.
    4. Считаем кол-во счастливых билетов от CCCC 0000 до CCCC DDDD.
    5. Суммируем все три количества на шагах 2-4, и задача решена.
    Сложность каждой подзадачи такая же, как у исходной задачи. Думаю, понятно набросал алгоритм.

    UPD: Ну и крайний случай учесть, если первые 4 цифры M и N совпадают - тогда всё это не надо считать, а провести только 1 перебор от правых 4 цифр первого числа до правых четырёх второго, и проверить их сумму цифр на равенство левой сумме цифр.
    Ответ написан
    4 комментария
  • Как реализуются сложные большие проекты?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    Сложные большие проекты обычно выращиваются: сначала делается прототип, потом итеративно доделывается, постепенно вбирает новые фичи и новых пользователей, а потом глядишь, -- оп, стал большим и сложным.

    А большой и сложный проект следующего поколения или по схожей тематике делается по аналогии с уже сделанным проектом, типа как Хабр → GeekTimes, Мегамозг, Тостер. Наработав опыт, авторы таких проектов уже не задают вопросов в интернетах.
    Ответ написан
    Комментировать
  • Как реализуются сложные большие проекты?

    @mamkaololosha
    Если про методологии, то гуглите Scrum, Agile и прочее.
    Если про архитектуру, то гуглите Фаулера, "Быстрая разработка программ. Принципы, примеры, практика" и прочее.
    Как составляются ТЗ, делается архитектура, план, делегирование полномочий

    Никак. Серьезно. Садятся 2-4 человека и кодят сутками. Если удастся развести начальство, то выделят средства и площади под проект. Если нет, то либо доделывается по ночам, либо своё ООО и поиск инвестиций/заказчиков.
    Ответ написан
    4 комментария
  • Что нужно знать, чтобы понять - бинарные деревья, графы, синтаксический анализ?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Ничего. Просто берете и разбираетесь.
    Кнут и Кормен основные авторы.
    Ответ написан
    Комментировать
  • Что нужно знать, чтобы понять - бинарные деревья, графы, синтаксический анализ?

    donkaban
    @donkaban
    Умею рисовать тени
    Там нет соли. Читать -
    https://ru.wikipedia.org/wiki/Двоичное_дерево
    https://ru.wikipedia.org/wiki/Граф_(математика)

    для начала. Там есть ссылки, как ни странно.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    ErmIg
    @ErmIg
    Программист
    Есть развернутый ответ для С++ кода, но его можно обобщить и на другие языки и платформы:

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

    1) Важно понимать, что алгоритмическая оптимизация практически всегда может дать лучший эффект, чем программная. Так, если алгоритм имеет сложность O(n^2), то на больших исходных данных он при любой оптимизации будет медленнее, чем неоптимизированный алгоритм сложности O(n). Впрочем, при выборе алгоритма, опираться только на его сложность не стоит: если объем исходных данных не велик, то вполне может оказаться, что алгоритм со сложностью O(n^2) будет работать быстрее, чем с O(n).
    2) Очень важно повторное использование (кеширование) промежуточных данных, вычисленных в программе – ибо быстрее всего выполняется работа, которую не надо делать. Тем не менее, не надо чрезмерно кешированием увлекаться – если объем кэшируемых данных слишком велик, то это может отрицательно сказаться на общей производительности программы (некоторые данные быстрее вычислять на лету, чем считывать из памяти).
    3) Следует избегать излишнего копирования данных (например, передавать сложные типы данных по ссылке, а не по значению).
    4) По возможности следует избегать условных операторов во вложенных циклах. Так как условные переходы, вызываемые такими операторами, плохо обрабатываются современными процессорами с конвейерной архитектурой.
    5) Данные в памяти, которые используются алгоритмами, должны по возможности лежать упорядочено, и использоваться последовательно. Это позволит процессору их эффективно кешировать. Важно помнить, что доступ к кэшу процессора значительнее быстрее, чем к оперативной памяти.
    6) Если алгоритмы это позволяют, то возможно стоит реализовать их параллельное исполнение (в отдельных потоках или процессах). Это позволит эффективно задействовать современные многоядерные процессы.
    7) В некоторых случаях (например обработка изображений) большого эффекта можно достичь применением специализированных расширений процессора (SSE, SSE2, AXX, AVX2 и другие). Стоит отметить, что большинство современных компиляторов (GCC, MSVS, ICC) поддерживают непосредственное использование данных расширений непосредственно из С++ кода при помощи специальных встроенных функций (intrinsics). Минусами такого подхода является потеря переносимости (впрочем, эта проблема решается наличием разных веток программы под разные процессоры) и значительное усложнение программы.
    8) Также большого эффекта можно достичь применением специализированных ускорителей, например GPU (технологии CUDA, OpenCL). Минусами таких решений являются потеря универсальности и значительное усложнение программы, а также то, что на специализированных ускорителях, как правило, хорошо работает далеко не каждый алгоритм.
    Ответ написан
    Комментировать
  • В каком возрасте можно (начать) заниматься программированием?

    @asd111
    В МВД есть отдел К - занимаются преступлениями в компьютерной сфере. В идеале тебе нужно попасть туда после университета. Спроси у кого нибудь из приемной комиссии на какой факультет поступать чтобы потом работать в отделе К. Если таких нет, то ничего страшного, если есть связи в МВД.

    Насколько я понимаю университет будет отправлять на практику где то на 3-4 курсе и перед дипломом. Проси чтобы отправляли на практику в отдел К или сам договорись - это не сложно, я проходил так практику в следственном комитете в своем городе, просто подходишь к начальнику отдела и спрашиваешь можно ли у них пройти практику от университета - скорее всего ответ будет положительный, т.к. ВУЗ МВД.
    Ответ написан
    Комментировать
  • Стоит ли продолжать учиться?

    afiskon
    @afiskon
    Учитесь дальше. Сейчас вам математика кажется довольно бесполезной. Возможно она вам будет казаться такой еще лет 5 после оказания ВУЗа. Но это до тех пор, пока вы пишите простые приложения "сходил в базу, сгенерил json" или там клипаете формочки в C#. Когда начнете заниматься настоящими задачами, это очень пригодится. Не будете знать математику - так и будете всю жизнь формочки клепать.
    Ответ написан
    1 комментарий
  • Каким алгоритмом можно проверить Большое число на простоту?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    методы гарантированной проверки

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

    b57ef5f35bb3412cbb1f8669dd4e4a7f.jpg
    Вместо перебора делителей можно использовать http://ru.wikipedia.org/wiki/Признаки_делимости
    Ответ написан
  • Как направить программиста на путь истинный?

    viktorvsk
    @viktorvsk
    Недавно запустил Rubocop на Rails. Кажется, порядка 80 000 замечаний. Ничо, живут как-то ребята
    Ответ написан
    Комментировать
  • Как направить программиста на путь истинный?

    Так вам же бабки платят за работу? Нудак делайте и всё, или если не можете пересилить себя и работать с таким плохим кодом, то отказывайтесь и всё. Он найдёт за деньги другого человека кто будет разбираться в его коде, только без нотаций как надо правильно делать...
    Ответ написан
    Комментировать