Задать вопрос
  • Как транспонировать биты числа максимально быстро?

    wataru
    @wataru Куратор тега Алгоритмы
    SergeySerge11, вы правы, я не в том порядке маски для строк выписал.
    Написано
  • Почему нельзя использовать private метод в качестве аргумента для алгоритмов в другом private методе?

    wataru
    @wataru Куратор тега C++
    Давайте пример кода и всю ошибку. Вполне можно использовать приватные методы в алгоритмах.

    Может, у вас проблема с тем, что вы пытаетесь не статические методы использовать? вот с этим действительно проблема может быть. Надо метод в bind оборачивать, потому что не статические методы на самом деле имеют +1 аргуент, они еще и this принимают под капотом.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    BlinCT, Ну вот вы рассчитали точки, когда полотно было 25x300. Когда его размер 100x600 вам надо все координаты домножить на 100/25 по x и 600/300 по y.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    BlinCT, Ну тут у вас все точки растягиваются вместе с графиком. По идее просто все числа домножаются на коээфициент растяжения по оси OX и по оси OY. Если вы график увеличили c 25 x 300 до 100 x 600, то вы все x координаты умножаете на 4, а y - на 2.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    BlinCT, Я не понимаю, что у вас за размер. У вас есть ключевые точки, кривая через них пройдет и никак иначе.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    BlinCT, Вот, например, статья. Там с кодом. https://habr.com/ru/articles/749288/

    Вам точно также придется 2 раза прогнать для данных {i, xi} и {i, yi}, потому что этот метод все еще не работает с вертикально расположенными точками.

    И вообще, гуглите: интерполяция кубический сплайн на плоскости.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    Стоп. Вам надо, чтобы линия проходила через вот эти вот все точки, так? Тогда никакого пересчета делать нельзя.

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

    Вы сейчас все точки итерполируете одним полиномом очнь большой степени. А вам нужны, допустим, кубические сплайны - вы там каждый кусок между двумя точками будете интерполировать полиномом маленькой степени. Тогда кривая не будет так далеко убегать между точками.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    BlinCT, Да, первый лист выглядит так. Второй:
    0;24
    1;21
    2;18
    3;16
    4;11
    5;8

    Результаты нельзя просто объединить. Вам над взять y от первого листа и потом y от второго. Это и будет список x,y координат точек. При этом они могут идти вертикально, справа-налево или вообще закручиватья в спираль. Что совсем не полином, но по крайней мере, эта гладкая кривая пройдет через все ваши изначальные точки.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    Что именно? вы хотите вариант с параметрической функцией для x и y?

    Просто весь ваш код оборачиваете в функцию. Передаете ей list 2 раза, только первый раз m_X равен номеру точки, m_Y равен m_X точки. Второй раз m_X тот же номер, а m_Y равен m_Y точки.
    Написано
  • Ошибка в алгоритм получения интерполяции с помощью Лагранжа?

    wataru
    @wataru
    Кстати, по коду, его можно сильно упростить, не надо вам bFirst вообще. Вы просто инициализируйте Hi = 1.0 и в цикле всегда домножайте на calc. Тогда и calc можно выкинуть вообще и просто сразу домножать. Или вообще сразу инициализируйте как list.m_List[j].m_Y.
    Написано
  • По какому принципу работает алгоритм с массивом очереди?

    wataru
    @wataru Куратор тега Алгоритмы
    Alexandroppolus, Только там жаваскриптовые массивы и там вставляется пустое место прям внутрь. Я не берусь давать никаких гарантий про то, какая там на самом деле структура данных на самом деле используется.
    Написано
  • По какому принципу работает алгоритм с массивом очереди?

    wataru
    @wataru Куратор тега Алгоритмы
    MishaXXL, Выделяется новый массив размера 2000 элементов. Эти 1000 туда копируются. Потом спокойно дописываются 5 новых в конец.
    Написано
  • По какому принципу работает алгоритм с массивом очереди?

    wataru
    @wataru Куратор тега Алгоритмы
    MishaXXL, Массив будет размера столько, сколько максимально было заявок в какой-то момент времени (ну, в 2 раза больше на самом деле). Он не будет расти бесконечно.

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

    После того, как вы какой-то элемент "удалили", заменив на undefined, он будет снова переиспользован, когда "змейка" пройдет полный круг и вернется на эту позицию.

    Если змейка догоняет свой хвост, то массив увеличивается в 2 раза, и змейка помещается туда. Массив не будет длиннее, чем длина змейки*2 в какой-то момент времени. Но массив не растет просто так при добавлении заявок. Если у вас максимум 100 активных заявок есть в каждый момент времени, он никогда не будет длиннее 200. Ибо змейка длины 100 сама себя не догонит в таком массиве никогда и нового увеличения не произойдет.
    Написано
  • По какому принципу работает алгоритм с массивом очереди?

    wataru
    @wataru Куратор тега Алгоритмы
    MishaXXL, Массив не выделяют сразу фиксированного размера, чтобы вообще все влезло. Выделяют, допустим, 10 элементов. Если циклический буфер заполнился, то перевыделяют память на 20 элементов, все их туда копируют. Когда заполнится этот, выделяют 40 элементов и т.д. В результате любая операция добавления будет O(1) в среднем, ибо эти перевыделения будут происходить все реже и реже за счет увеличения длины в 2 раза. Так работает тот же std::vector.

    Если же вы используете связный список, то там памят выделяется отдельно под каждый элемент по мере надобности.
    Написано
  • Как передать массив как поле класса(см. код)?

    wataru
    @wataru Куратор тега C++
    xfnxfn, Вместо функции arr используйте конструктор.

    Вот совсем правильный С++ код, с использованием списка инициализации и с _ в именах приватных переменных. Explicit в конструкторах с одним параметром обычно пишут, чтобы нельзя было int приводить к MyWorld неявно.

    class MyWorld{
    public:
       explicit MyWorld(int n) : _n(n), _num(new int[n]) {}
       ~MyWorld() {delete[] num;}
       void Show() {
          for (int i = 0; i < _n; ++i)
          // ...
       }
    private:
       int _n;
       int _num;
    }


    Более простой но не такой идиоматичный код:
    class MyWorld{
    public:
       MyWorld(int n) : {
          _n = n;
          _num = new int[n];
        }
        // ...
    }
    Написано
  • Как передать массив как поле класса(см. код)?

    wataru
    @wataru Куратор тега C++
    xfnxfn,
    class MyWorld{
    public:
    	int *num = nullptr;
    		
    	void arr(int n)
    	{
                   if (num) delete[] num;
                   num = new int[n];
    		for (int i = 0; i < n; ++i)
    		{
    			num[i] = i;
    		}
    	}
    		
    	void show(int n)
    	{
    		int s = 0;
    		for (int i = 0; i < n;++i)
    		{
    			s +=num[i];
    		}
    		cout << s;
    	}
        
            ~MyWorld() {
                     if (num) delete[] num;
             }
    };
    Написано
  • Как работает релаксация плоского графа?

    wataru
    @wataru Куратор тега Алгоритмы
    mayton2019, 21 миллион вершин - это будет 3000 на 7000 точек на листе A2. Расстояние между точками будет меньше 0.1 мм. К этому добавьте ребра туда-сюда, и ваш helicopter view будет равномерно черный лист.

    У вас слишком большой граф для визуализации.
    Написано
  • Как работает релаксация плоского графа?

    wataru
    @wataru Куратор тега Алгоритмы
    Что вы там в графе на 21 миллионов вершин вообще заметить собираетесь? Там у каждой вершины несколько дюжен ребер исходящих будет. Это такая мешанина будет, что фиг вы там чего найдете вообще.
    Написано
  • Как называется алгоритм?

    wataru
    @wataru Куратор тега Алгоритмы
    EDIsaev, Но тогда вам надо хранить какой-то ассоциативный массив со всеми известными состояниями в ключах. Ведь вот есть у вас текущее состояние (одна переменная), вы сделали какой-то ход - поменяли состояние, и вам надо найти узел для этого состояния.

    По памяти это может быть даже сильно больше, чем просто граф с набором ребер. Если состояние больше X чисел.
    Написано
  • Как называется алгоритм?

    wataru
    @wataru Куратор тега Алгоритмы
    EDIsaev, Но вы же все-равно храните в каждой вершине ребра-ходы? Вам же как-то надо определять, куда преведет какой-то ход и, соответственно, где 2-бита для следующего состояния смотреть?

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

    Поскольку она похоже очень специфична к вашей игре - у нее нет никакого названия.
    Написано