Задать вопрос
Ответы пользователя по тегу Математика
  • Как сделать сортировку матрицы?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Результат сортировки будет красивее, если делать так.
    Рекурсия:
    - делим более длинную сторону матрицы на две равные (или различающиеся на 1) части.
    - если длинная сторона была вертикальной, то сортируем элементы матрицы по y, чтобы элементы с меньшим y оказались в нижней половине, а если горизонтальной - то сортируем по x, чтобы элементы с меньшим x оказались в левой половине. Сортируем не строки-столбцы, а матрицу в целом (как одномерный массив).
    - повторяем процедуру для каждой из полученных половинок.
    Ответ написан
    Комментировать
  • Как решается уравнение x^x?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Уравнение x*ln(x)=c решать проще. Можно методом Ньютона. А можно и итерациями: x_{n+1}=c/ln(x_n), сходиться должно очень быстро.
    UPD. Хотя нет, оно будет сходиться только при c>e. Метод Ньютона, всё-таки, надёжнее:
    x_{n+1}=(c+x_n)/(ln(x_n)+1)
    Ответ написан
    Комментировать
  • Какую кривую эффективнее построить на множестве [0; 1] - Безье, нецелочисленную степенную или гиперболу?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если надо, чтобы кривую можно было провести через любую точку квадрата, то гипербола, пожалуй, лучше. Уравнение выглядит привлекательно: (a^2-1)*x*y+(x-a^2*y)=0, найти значение a для любой точки, через которую проходит кривая, несложно. Немного сложнее её нарисовать, чтобы точки были расположены с нужной густотой.
    Я думал над чем-нибудь вроде y^a+(1-x)^a=1, но оно вряд ли подойдёт, хоть и симметрично: семейства кривых при a<1 и a>1 получаются не симметричными друг другу.
    Ответ написан
  • Критерий статистики для оценки изменения порядка элементов

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В качестве расстояния можно взять что-нибудь вроде суммы модулей разностей положения каждого элемента в этих перестановках. То есть, если A, B - исходные перестановки, а A*, B* - обратные к ним, то dist(A,B)=sum_k |A*(k)-B*(k)|.
    Для перестановок 9 5 4 1 2 3 6 8 7 и 9 7 4 1 3 8 6 2 5 это будет 0+3+1+0+7+0+7+2+0=20.
    Ответ написан
    Комментировать
  • Найти количество чисел заданного порядка, модуль разницы соседних цифр которых не больше 1

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Формула, несомненно, существует. Правда, в ней будут присутствовать корни многочлена (z^5-6*z^4+10*z^3-z^2-6*z+1)*(z^5-4*z^4+2*z^3+5*z^2-2*z-1) (неразрешимого в радикалах), и выписать её совсем не просто. Но, при большой необходимости, возможно.
    Впрочем, если в формуле может присутствовать матрица, то ответ такой:

    (1 1 1 1 1 1 1 1 1 1)*(M^(n-1))*transpose(0 1 1 1 1 1 1 1 1 1),

    где M - матрица 10х10, в которой в клетках (m,n), для которых abs(m-n)<2, стоят единицы, а в остальных клетках - нули.
    Ответ написан
  • Сколько треугольников на картинке?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если искать ответ в виде формулы - то [n*(n+2)*(2*n+1)/8]
    Там для чётных и нечётных n получаются разные серии, поэтому приходится брать целую часть (или мудрить с (-1)^n).
    Ответ написан
    Комментировать
  • Как построить конечные поля (Поля Галуа)?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Не получится. Нужен неприводимый многочлен, а x^5+x+1=(x^2+x+1)*(x^3+x^2+1).
    Ответ написан
  • Доверительный интервал

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Без априорной вероятности тут тяжело. Одно наблюдение (или любое число наблюдений) может уточнить вероятность той или иной ситуации, но определить её с нуля не сможет.
    Например, в случае лотереи. Одно дело, когда вы считаете, что вероятность выигрыша может быть любой, скажем, от 1/100 до 1/1000, причём вероятности этих значений примерно одинаковы. Тогда, после своих наблюдений, вы можете сказать, что вероятность, скорее всего, близка к 1/550, и даже определить распределение этой вероятности. Другое дело, когда вы знаете, что в лотерее может быть вероятность выигрыша только 1/200, 1/500 или 1/1000, но не знаете, в какую из лотерей играете (хотя шансы на то, что вам подсунули каждую из них, равны). Тогда ваши наблюдения покажут, что вероятность, скорее всего, 1/500 (а вовсе не 1/550 - так как такого исхода в списке не было).
    Так что надо взять или придумать априорные вероятности моделей, и воспользоваться формулой Байеса.
    Ответ написан
    Комментировать
  • Как реализовать создание ортогонального массива?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Насколько я понимаю, подобные массивы описываются здесь: habrahabr.ru/post/187882 Правда, там рассматривается частный случай - когда для каждой пары столбцов требуются все комбинации, а не только присутствующие в другом массиве. Но это не делает задачу легче.
    А ортогональность (в смысле линейной алгебры) тут вообще ни при чём.
    Ответ написан
    1 комментарий
  • Сколько существует различных уникальных подпоследовательностей из последовательности цифр длиной N?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Хорошая задачка, жаль, что я её раньше не заметил.
    Решение за O(N):
    static long nways(string seq) {
        long[] sum=new long[10];
        long cursum=1;
        foreach(char c in seq) {
            int d=c-'0';
            long x=cursum-sum[d];
            sum[d]=cursum;
            cursum+=x;
        }
        return cursum-1;
    }
    Ответ написан
    1 комментарий
  • Проективное преобразование (поиск относительного положения точки)

    Mrrl
    @Mrrl
    Заводчик кардиганов
    А можете для какого-нибудь примера написать полученные прямую и обратную матрицы? Например, для A=M, B=N, D=K, C=(2,2) ?
    Ответ написан
  • Как построить матрицу проективного преобразования без сторонних библиотек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Проще всего сначала построить матрицу преобразования из квадрата в 4-угольник, а потом взять обратную.
    Точки плоскости будем записывать, как принято в компьютерной графике, как строки: (x y 1) для собственной точки и (x y 0) для несобственной. Строка (c* c*y c) обозначает ту же точку, что и (x y 1) (при с!=0).
    Пусть матрица преобразования M=((a11 a12 a13) (a21 a22 a23) (a31 a32 a33)). Точка (u,v) квадрата переходит в точку (x,y) четырёхугольника, если для некоторого с!=0 выполняется
    (u v 1)*M=(c*x c*y c).
    Сначала возьмём вершину (0,0). Получим
    a31=c1*x1, a32=c1*y1, a33=c1. Видно, что мы можем взять a33=c1=1 (матрица тоже определена с точностью до пропорциональности), и у нас есть последняя строчка:
    a31=x1, a32=y1, a33=1.
    Теперь подставим остальные вершины. Получим 9 уравнений:
    a11+x1=c2*x2
    a12+y1=c2*y2
    a13+1=c2
    a11+a21+x1=c3*x3
    a12+a22+y1=c3*y3
    a13+a23+1=c3
    a21+x1=c4*x4
    a22+y1=c4*y4
    a23+1=c4
    Это квадратная система из 9 линейных уравнений. Её легко решить методом Гаусса. А можно вручную исключить все переменные, кроме c2,c3,c4, получить систему из 3 уравнений, решить каким-нибудь методом Крамера (через определители) и восстановить a11,a12,...,a23.
    Потом уже посчитать матрицу, обратную к построенной. Можно тоже через определители.
    Ответ написан
  • Поиск алгоритма в графе

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Насколько я понял, вам надо раскрасить вершины N-мерного куба (иначе как объяснить 2^N вершин и N рёбер?) в K цветов так, чтобы в 1-окрестности любой вершины (т.е. она сама плюс все её соседи) присутствовали все цвета.
    Задача очень похожа на коды, исправляющие ошибки. Но там обычно ставится двойственное условие - чтобы в 1-окрестности любой вершины каждый цвет встречался не более одного раза.
    Если N=2^m-1, то у задачи есть точное решение (c K=N+1), оно описывается кодом Хэмминга: все кодовые слова красим в один цвет, а множество вершин каждого другого цвета получаем из кодовых слов с помощью XOR с константой (своей для каждого цвета).
    Для других N надо думать. Но в этом есть смысл только если я правильно понял задачу.
    Ответ написан
    Комментировать
  • Алгоритм подсчета количества чисел в промежутке от А до B, сумма цифр которых четна?

    Mrrl
    @Mrrl
    Заводчик кардиганов

    На каждом отрезке от 10*n до 10*n+9 таких чисел ровно 5. Поэтому нам достаточно посчитать число таких полных отрезков, и обработать краевые отрезки. Пусть sumdig(n) - функуция, которая выдаёт остаток от деления суммы цифр n на 2. Тогда: int s0=(B/10-A/10-1)*5; int s1=(10+sumdig(A/10)-A%10)/2; int s2=(2+B%10-sumdig(B/10))/2; return s0+s1+s2;

    Ответ написан
    Комментировать
  • Определение местоположения множества векторов во множестве точек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В случае, если векторов между потенциально видимыми кубиками не безумно много (например, если на карте много комнат, но в каждой комнате не очень много кубиков), то всю задачу можно решить быстрее, чем за O(n). Берем равномерную сетку, но помещаем в нее не координаты кубиков, а вектора между ними (номера двух кубиков и вектор). Скорее всего, даже хеширования не понадобится — будет плотно заполненный двумерный массив списков. Берем любой вектор между двумя видимыми кубиками, находим соответствующий ему список векторов между кубиками базы, и идем по нему. Для каждой пары из списка находим положение наблюдателя и выполняем шаги (6,7) из алгоритма DankoUA (т.е. сетка с кубиками нам тоже понадобится).
    Ответ написан
    Комментировать
  • Определение местоположения множества векторов во множестве точек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    А, кстати, если известны и относительные координаты маяков, и направление север-юг, то все вообще просто. Для каждой пары «маяк из базы — видимый маяк» вычисляется наше положение для случая, если они соответствуют друг другу, после чего в полученном облаке из 100 точек определяется самый плотный 5-точечный кластер (за последнее время задача обсуждалась здесь по меньшей мере трижды).
    Ответ написан
    Комментировать
  • Определение местоположения множества векторов во множестве точек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Я сейчас занимаюсь именно этой задачей. В данных условиях (небольшая база опорных точек и довольно точно известное положение нескольких из них в системе координат наблюдателя) ее можно решать так.

    1 (предобработка). Для каждой точки из базы определяем расстояния до остальных 19 точек, полученный вектор сортируем. Получаем 20 векторов LB[20][19].
    2. Для видимых точек делаем то же самое — получаем 5 векторов отсортированных расстояний LS[5][4].
    3. Для каждой пары «вектор из LB / вектор из LS» определяем меру того, насколько второй вектор является подмножеством первого — для каждого элемента второго вектора ищем ближайший элемент первого и находим максимум или сумму отклонений.
    4. Для каждого вектора из LS берем ближайший (в смысле заданной в (3) меры) вектор из LB. Получили первую кандидатуру на соответствие точек. Проверяем, соответствуют ли друг другу расстояния, и если да — пытаемся найти преобразование системы координат. Если видимые точки с хорошей точностью совпали с базой, то нам повезло.
    Если не повезло, то дальше есть два пути.
    5a. Начинаем просматривать не наилучшие соответствия, а следующие за ними (какой-нибудь динамикой). В конце концов повезет — у нас всего 5 индексов для перебора.
    5b. Выбираем вектор из LS, соответствие которого с вектором из LB было наиболее надежным в том смысле, что второе по качеству соответствие (того же вектора из LS но с другим вектором из LB) гораздо хуже. Говорим, что самое надежное соответствие — правильное, т.е. один кубик мы узнали. Корректируем меру соответствий, добавляя новый критерий — расстояния до найденного кубика должны совпадать. После чего снова выбираем наиболее надежное соответствие, и т.д. Скорее всего, повезет.
    Если не повезло, придется повышать сложность — например, сравнивать не расстояния между парами точек, а форму треугольников. Но я надеюсь, что до этого не дойдет.
    Ответ написан
    Комментировать
  • Алгоритм экспоненциального закона распределения?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Непонятно, зачем вообще статистика поступления пакетов и время опыта. Достаточно того, что «линия связи состоит из 2 каналов… При поступлении сообщения каждый из каналов може бути занят с вероятностью 0.4. Если оба канала заняты, то информация теряется» Ясно, что как бы посылки не поступали, теряться будет в среднем 16%.
    Ответ написан