• Как найти наибольшее значение у такой функции?

    wataru
    @wataru Куратор тега Алгоритмы
    BitNeBolt, Чем больше защитный слой - тем меньше модулей влезает. Логично?

    Значит функция количества впихуемых модулей f(d) - монотонна. Тут работает бинпоиск. Перебирайте им ширину защитного слоя d, а там уже внутри функции перебирайте 2 варината ориентации модулей, считайте сколько их в ширину и в высоту поместится, перемножайте. Вам надо найти максимальное d, при котором модулей влезает >= n.
  • Как найти наибольшее значение у такой функции?

    wataru
    @wataru Куратор тега Алгоритмы
    BitNeBolt, Вы чего-то не до конца расказали. В текущей постановке задача имеет только наивное решение (очевидно, слишком медленное). Дайте, что ли, ссылку на задачу.
  • Как найти наибольшее значение у такой функции?

    wataru
    @wataru Куратор тега Алгоритмы
    Давайте больше данных. Что у вас за задача, откуда функция взялась? Как она задана? Какие-то еще свойства? Может можно свести к чему-то быстрому.

    А если просто вот такая кусочно константная функция, то представьте себе функцию, которая везде принимает значение 0, кроме одного отрезка длины 0.000001 где-то. Так вот, единственный способ найти этот максимум - это перебрать все точки с шагом 0.000001.
  • Почему не проходит решение?

    wataru
    @wataru Куратор тега Алгоритмы
    BitNeBolt более того, не надо ни из каких списков соседей ничего удалять. А предложенном решении надо пройтись по соседям ровно один раз, когда вершина стала листом. Ну, пройдетесь вы по удаленным соседям один раз, это на скорость работы не влияет.
  • Для чего нужен возврат значения по ссылке?

    wataru
    @wataru Куратор тега C++
    Владимир Коршунов, int& b = ... - это ссылка, которая инициализируется ссылкой, возвращенной func.
  • Как минимизировать логическое уравнение?

    wataru
    @wataru Куратор тега Математика
    iamevg, А откуда тогда взялось четвертое слагаемое? Ну не важно. Читайте только последний абзац тогда - вынесите B! из первых двух и сокращайте через X+!X Y = X+Y
  • Как реализовать дерево на основе связного списка?

    wataru
    @wataru Куратор тега Алгоритмы
    Axretit, Ну да, вы как дерево ни храните, оно останется деревом. Вершина Б так и будет ребенком А. Принципиально ничего не поменяется. Можно дальше уже думать, какой способ храния вам удобнее и быстрее для вашей задачи. Если дерево не меняется, то самый быстрый и удобный способ - хранить детей в виде массива в каждой вершине. Еще лучше все эти массивы объеденить в один и в вершине хранить только начало и конец ее куска. Если вы дерево постепенно собираете, можете добавлять или удалять вершины, вырезать поддеревья, то уже имеет смысл хранить детей в виде связных списков в каждой вершине. Объединить все в одну структуру может быть выгоднее из-за возможности ручного управления памятью.
  • Как скомпилировать c++ код через терминал на MacOS?

    wataru
    @wataru
    Armyashka, Ах, у вас проблемы не с макосью и терминалом а вообще с g++. Ну, начните с g++ --help. Там основные ключи расписаны.
  • Известно множество точек периметра фигуры, как найти её площадь?

    wataru
    @wataru Куратор тега Математика
    Можно ещё проще - не надо ничего разбивать на треугольники. Если площадь треугольника по этой формуле считать со знаком, то можно тупо соединить все вершины полигона с точкой (0, 0). В итоге все лишнее и дважды подсчитаное уйдет и останется только площадь полигона.
  • Как исправить ошибку: "LNK 2019 ссылка на неразрешенный символ" c++?

    wataru
    @wataru Куратор тега C++
    Или можно в h или cpp файле продекларировать специализацию шаблона со всеми типами, которые будут использоваться.

    Типа
    template <> class unit<int>;
  • Как доказать это или где можно почитать доказательство этого факта?

    wataru
    @wataru Куратор тега Математика
    MuffinLover3, А как вы себе представляете, какой номер будет иметь число с бесконечным количеством единиц в двоичной записи? Подмножества конечные => конечное количество единиц => конечный номер у элемента. С бесконечными никакую нумерацию счетную не задать.
  • Как доказать это свойство векторного произведения?

    wataru
    @wataru Куратор тега Математика
    MuffinLover3 а как векторное произведение определено при размерностях не равных 2 или 3?
  • Следствие из свойств скалярного произведения. Из чего это следует?

    wataru
    @wataru Куратор тега Математика
    MuffinLover3, Там греческие буквы - это константы. Числа. Поэтому (alpha*a, beta*b)= alpha*beta*(a, b)
  • Следствие из свойств скалярного произведения. Из чего это следует?

    wataru
    @wataru Куратор тега Математика
    MuffinLover3,
    (a+b, c+d) = (a, c+d)+(b,c+d) = (a,c) + (a,d) + (b,c) + (b,d)
  • Как написать функцию расшифровки этого алгоритма?

    wataru
    @wataru Куратор тега C++
    Dmitry81923, Вряд ли есть сайты. Но не надо самому писать. Там по ссылке даже код есть с объяснением.

    Но вообще, если оно вам не понятно, то можно проще. Вам же всего один раз обратные найти, можно сделать более медленным методом. Для каждого множителя A просто переберите все числа X от 0 до 65535 в цикле. Найдите то единственное, при котором A*X == 1:
    uint16_t a = 26399;
        uint16_t x = 0;
        while(true) {
            uint16_t t = a;
            t *= x;
            if (t == 1) {
                cout << x << "\n";
                break;
            } 
            ++x;
        };
  • Как написать функцию расшифровки этого алгоритма?

    wataru
    @wataru Куратор тега C++
    Dmitry81923, Вот, допустим, мы работаем с вещественными числами. Чтобы отменить умножение на 2 надо поделить на 2. Но как вообще определить деление? Математики определили его как домножение на обратное - на 0.5. 2*0.5=1. Точно так же 5*0.2 = 1 и поэтому для отмены умножения на 5 надо домножить на 0.2. А для отмены умножения на 3 надо домножить на 0.3333... Пока понятно?

    Это было среди вещественных чисел. Но у вас-то в программе операции среди целых чисел помодулю 65536. Потому что state 16-битный и переполнение просто обрезает старшие биты. Те же самые числа можно получать, если перемножать в 32-битные и брать остаток от деления на 65536 (на самом деле процессор скорее всего так и работает).

    Обратите внимание, в группе по модулю сложение и умножение работают похоже на обычные числа. Но вот деление - совсем нет. Потому что тупо не все числа можно делить по обычным школьным правилам. Вот как поделить 3 на 27569 и получить целое число в 16 бит? По школьным правилам оно тупо не делится. А из математики груп получается, что операция должна быть применима ко всем членам группы. Надо придумать такое "деление", что бы любое число от 0 до 65535 можно было "поделить".

    Так вот, вам надо почитать про группы, операции по модулю и потом ссылку в ответе про "обратные по модулю".

    И вот так получается, что у некоторых чисел есть обратные по модулю. 26399*27569 = 1 (mod 65536). Напишите программу, которая эти два числа перемножит в 16-битных. Получите 1. Точно так же, как 2*0.5 = 1 среди вещественных чисел, по модулю 65536 эти два числа обратны к друг другу.
    Поэтому можно домножить на обратное, чтобы отменить домножение:
    (x*26399)*27569 = x*(26399*27569) = x*1 = x (mod 65536).
    Найти эти обратные можно, например, с помощью расширенного алгоритма эвклида.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Еще опишите, что там за ужас со вводом происходит. Какой формат данных в файле?
  • Как найти максимально похожий цвет?

    wataru
    @wataru Куратор тега Алгоритмы
    Maxim Siomin, Совремменные процессоры могут выполнять несколько сот миллионов операций в секунду. Допустим, мобильный процессор - слабенький. Пусть будет 100 000 000 операций в секунду. у вас будет 3 разности, 3 произведения, два сравнения на каждый цвет. ну еще по мелочи округлим до 20 операций на цвет. Итого - 30000 операций на каждый запрос. Итого - в секунду поместяца 3300 запроса. А вам надо упихнуть 120. Т.е. все помещается и еще 97% свободного процессорного времени остается.
  • Как найти максимально похожий цвет?

    wataru
    @wataru Куратор тега Алгоритмы
    Maxim Siomin, Нет, это вопрос не про платформу или можность процессора, а про количество цветов и скорость поступления запросов. Т.е. если у вас сотни тысяч цветов задано и пользователю надо искать ближайший несколько раз в секунду - то тут да, скорость важна. Если же у вас всего 20-50 цветов и запрос будет выполнятся максимум раз в секунду, то тут подойдет и простой линейный алгоритм.