• Как построить сложный алгоритм на комбинаторику?

    Mrrl
    @Mrrl
    Алексей: Или я чего-то очень не понимаю, или она будет печатать
    10/10/10/10/10/950
    20/20/20/20/20/900
    ...
    190/190/190/190/190/50
    - и больше ничего (если порядок не важен). То есть, 5 чисел всегда будут одинаковы.
  • Расчет количества замощений прямоугольника меньшими прямоугольниками?

    Mrrl
    @Mrrl
    ewb: А что же тогда значит "рассчитать и зафиксировать"? При подсчёте количества способов сами эти способы вы не увидите.
    А количество считается так.
    Будем считать, что горизонтальная сторона прямоугольника короче вертикальной. Рассмотрим конфигурации, обладающие следующими свойствами:
    - нижние k-1 рядов полностью заполнены
    - в k-м ряду заполнены клетки b1,b2,..,br (обозначим их множество S)
    - в k-м ряду нет ни одной горизонтальной плитки
    - все ряды выше k-го пустые.
    Нам надо для каждой пары (k,S) посчитать количество допустимых способов P(k,S) заполнения этой фигуры. Для этого для любой пары множеств (S1,S2) считаем число способов R(S1,S2), которыми конфигурацию из (k,S1) можно превратить в (k+1,S2). Это число не зависит от k.
    Например, если прямоугольник имеет ширину 3, то
    R({},{1})=R({},{3})=R({},{1,2,3}=1
    R({1},{})=R({1},{2,3})=1
    R({2},{1,3})=1
    R({3},{})=R({3},{1,2})=1
    R({1,2},{3})=R({1,3},{2})=R({2,3},{1})=1
    R({1,2,3},{})=1
    Для остальных пар множеств R(S1,S2)=0.
    Исходно у нас есть P(1,{})=1. Надо найти P(H+1,{}), где H - высота прямоугольника. Для этого перебираем k от 1 до H, и зная P(k,S) для всех S, находим P(k+1,S) опять же для всех S. Или просто возводим матрицу перехода в степень H.
  • Как построить сложный алгоритм на комбинаторику?

    Mrrl
    @Mrrl
    А что Вам мешает при печати умножить все числа из массива на 10?
  • Как построить сложный алгоритм на комбинаторику?

    Mrrl
    @Mrrl
    Нет, N - число игроков. Размер шага здесь считается равным 1, при печати все числа придётся умножить на 10. output(A) - функция, которая должна печатать массив A, или делать с ним что-то ещё - вам виднее, что именно. Её напишите сами.
  • Как подсчитать объем?

    Mrrl
    @Mrrl
    Возьмите пирамидку с вершинами (0,0,0),(0,0,1),(1,0,1),(0,1,1). Для трёх её граней величина (x1*(y2*z3-y3*z2)+x2*(y3*z1-y1*z3)+x3*(y1*z2-y2*z1)) будет равна нулю (для них x1=y1=z1=0), а для четвёртой - единице. Объём пирамиды равен (S*h)/3=(1/2*1)/3=1/6. Поэтому и приходится делить на 6=3! . На плоскости делили бы на два.
  • Как, используя алгоритм быстрой сортировки, определить лежит точка в массиве отрезков или нет?

    Mrrl
    @Mrrl
    А проще всего код получается, если искомые точки сложить в тот же массив, что и концы отрезков (со вторым числом 0 и третьим - индексом точки) и отсортировать всю кучу. Можно уложиться в один экран на C :)
  • Как подсчитать объем?

    Mrrl
    @Mrrl
    STL расшифровывается как "стереолитография", то есть рассчитан на описание поверхностей реальных тел. Контроля замкнутости и отсутствия самопересечений в самом формате нет, но теоретически, такие модели (с краями или самопересечениями) должны считаться некорректными.
    Да и как определить объём тела "с самопересечением"? Убрать все внутренние плёнки, поменять неправильную ориентацию внешних частей (если она есть) и посчитать объём тела, ограниченного только внешней поверхностью? Наверное, какие-нибудь дорогие пакеты это умеют.
  • Каким будет время работы построения кучи?

    Mrrl
    @Mrrl
    Никогда не понимал этих омега и тета. На всякий случай, попробуйте набор Ω(n), O(n^2), O(nlogn), Ω(nlogn) (в последней я не уверен).
  • Как подсчитать объем?

    Mrrl
    @Mrrl
    Не будет работать для невыпуклых тел. А как считать объём выпуклой оболочки (да и саму оболочку) вручную, "не разбираясь в 3d", трудно даже представить.
  • Какой использовать алгоритм обхода массива и сравнения каждого элемента с остальными в этом массиве?

    Mrrl
    @Mrrl
    Если условие, по которому "равны два объекта" для какого-нибудь поля имеет вид, например, ((a.X<0 && b.X<0) || a.X==b.X) (т.е. если поля отрицательны, то они считаются равными независимо от их конкретных значений), то хеш придётся специально изобретать - просто так ввести в него поле X не получится. А если условие ещё сложнее, когда сравниваются комбинации полей, одни поля сравниваются при определённых условиях на другие поля, и т.п. - то в конечном итоге мы рискуем получить задачу поиска канонического представления объекта. И в общем виде она может оказаться неразрешимой :(
    А если ситуация более простая - когда мы сравниваем только определённые поля объектов и структур, то функцию сравнения, скорее всего, можно "поднять" до функции порядка (например, лексикографически по результатам сравнения отдельных полей). И после этого сортировать массивы уже без всякого хеша.
  • Какой использовать алгоритм обхода массива и сравнения каждого элемента с остальными в этом массиве?

    Mrrl
    @Mrrl
    Только если удастся найти хеш, который будет одинаковым на одинаковых в смысле данного сравнения элементах. Из описания это не очень очевидно.
  • Как найти все комбинации символов?

    Mrrl
    @Mrrl
    Это из C#. Какие аналоги на Python, я не знаю.
    1) char[,] - двумерный массив с индексами от 0 до 2 по каждой координате. Тип массива - символ.
    2) (char)('a'+a%3) - прибавляем к коду символа 'a' остаток от деления a на 3. Если a%3==0, то получим тот же символ 'a', если a%3==1, то 'b', а если a%3==2, то 'c'.
    3) функция, которая делает с матрицей то, что вам надо. Например, печатает.

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

    Mrrl
    @Mrrl
    Мне тоже непонятно. Если бы было 9 символов, можно было бы понять (9! матриц). Матрица, в которой каждая строчка - перестановка, но строчки друг с другом не связаны - странная постановка. Латинские квадраты 3*3? Их совсем немного. Какие-нибудь таблицы Кэлли? Тоже маловато будет. А пример, приведённый в вопросе, является как раз выборкой с повторениями.
  • Как найти все комбинации символов?

    Mrrl
    @Mrrl
    Вероятно, там должно быть не i=-1, а i=8?
  • Как посчитать вероятность?

    Mrrl
    @Mrrl
    Если вы сами можете выбирать размер ставок, и если ваш капитал неограничен, то беспроигрышной будет стратегия Мартингейла: https://ru.wikipedia.org/wiki/%CC%E0%F0%F2%E8%ED%E...
    В ней игрок получает итоговый доход в 1 рубль за каждый выигрыш независимо от того, сколько проигрышей было перед ним
  • Как найти мантиссу десятичного числа?

    Mrrl
    @Mrrl
    Из двоичного формата десятичная мантисса не вырезается. Он годится только чтобы оценить порядок с точностью +-1.
  • Какую кривую эффективнее построить на множестве [0; 1] - Безье, нецелочисленную степенную или гиперболу?

    Mrrl
    @Mrrl
    Это понятно. И оба уравнения, которые я написал, это учитывают. Но вопрос в том, как определяется оставшаяся степень свободы - ещё одной точкой, через которую должна пройти кривая, или как-нибудь иначе (слайдером регулировки параметра?)
  • Какой выбрать алгоритм для решения задачи?

    Mrrl
    @Mrrl
    Не совсем классическая. Хотя с помощью этой задачи классическую решить можно - заливаем сколько-то топлива, смотрим, может ли он объехать все города. И делением пополам находим оптимальный маршрут.
  • Разность элементов массива

    Mrrl
    @Mrrl
    Здесь может быть проблема с "количество не определено заранее". Обычно это означает, что числа нельзя сохранить в массив (а тем более, отсортировать его). К сожалению, эту задачу конечным автоматом решить нельзя. А если хочется обрабатывать числа по одному и сообщить, когда нужные три числа появятся, то пригодилось бы какое-нибудь дерево поиска.
  • Найти количество чисел заданного порядка, модуль разницы соседних цифр которых не больше 1

    Mrrl
    @Mrrl
    Пусть мы уже посчитали числа длины N-1. На 0 кончается a0 чисел, на 1 - a1,... на 9 - a9 чисел. Тогда среди чисел длины N на 0 будет заканчиваться a0+a1, на 1 - a0+a1+a2,..., на 9 - a8+a9 чисел. Обозначим вектор-столбец (a0,a1,...,a9) как v{N-1}, а (a0+a1, a0+a1+a2,..., a8+a9) как vN. Нетрудно увидеть, что vN=M*v{N-1}, где M - матрица, описанная выше. Если v1=(0,1,1,...,1) - вектор, содержащий количество чисел длины 1 (все цифры кроме нуля), то получим, что vN=M^(N-1)*v1. Осталось найти сумму его координат - для этого умножим вектор слева на строку (1,1,1...,1). И получим формулу с матрицей.
    Чтобы получить формулу без матрицы, надо перейти в её жорданов базис - найти собственные значения и собственные векторы. Собственные значения будут корнями характеристического многочлена (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). В конечном итоге, формула будет выглядеть как S(N)=sum(ci*zi^N), где zi - корни многочлена, а ci - какие-то коэффициенты. Чтобы их найти, придётся немного посчитать, но при наличии хорошей системы компьютерной алгебры это можно сделать за несколько часов (или даже быстрее - если система хорошо знакома).