Как найти закономерность в матрице

Там достаточно 16 строчку исправить и Ваше недовольство будет исключено.
Чтобы проверять на возрастающую/убывающую последовательность необходимо ещё 1 строчку допилить – будет работать всегда и для всех чисел; но думать тоже надо, если вы не хотите получить что-то типа такого:

C++
1
2
3
4
5
15 14 13 12 11 10 9 8 7 6 5
15 14 13 12 11 10 9 8 7 6 5
15 14 13 12 11 10 9 8 7 6 5
15 14 13 12 11 10 9 8 7 6 5
15 14 13 12 11 10 9 8 7 6 5

А вообще, насколько я понял, там необходимо формировать матрицу до тех пор, пока не дойдём до <= 0, что в 3ем тесте соблюдается – мы уходим в отрицательные числа и начинаем формировать сначала от 15. При написании я решил сделать так, чтобы мы формировали последовательность от 15 при достижении единицы. Повторюсь – исправляется это в 16 строчке

Добавлено через 55 минут
ну вот, например:
перед main добавляем:

C++
1
#define iiif m[i * cols + cols - 1]

и:

C++
1
2
3
4
5
6
// заменяем 16 строчку
if (_t <= cols)
// на
if (iiif - _tt * cols < cols || iiif - cols < 0)
// и ещё у меня очепятка, в теле заменяем:
(_tt = -1), (_t = 0xf);

Исправляет Ваше замечание и уход в минус. В остальных случаях тоже вроде работает))

Закономерности двумерного массива

Здесь я опишу некоторые закономерности двумерного массива, которые помогут тебе (или Вам) с лёгкостью решать любую задачу по двумерному массиву, не прибегая к чьей-либо помощи. Начнём с того, что любой двумерный массив представляет собой матрицу, т.е. набор чисел, каждое из которых, так сказать, «вставлено» в конкретную ячейку, имеющую свой индивидуальный адрес. Адрес – это два индекса, которые показывают на пересечении какой строки и какого столбца находится тот или иной элемент. Теперь конкретнее. Взгляни на рисунок.

sss568

На нём изображена квадратная матрица, т.е. матрица, у которой количество элементов по длине и ширине одинаково. В последующем мы будем пользоваться именно такой из-за её удобства. Это матрица размером 10 на 10 элементов, заполненная не произвольными числами, а индексами (или адресами) элементов. Вот как раз по этим индексам у нас и происходит обращение к элементам массива. Мы можем присваивать им значения, импортировать, сравнивать, производить какие-либо действия и давать им уже новое получившееся значение. Но чтобы все эти операции производить не вручную, а с помощью компьютера, надо выявить определённую закономерность с индексами элементов. Описав последнюю нужным образом и заключив в цикл, мы получим основную часть программы для решения определённой задачи на двумерный массив. Закономерность в 100% случаев заключается в одинаковом соотношении первых и вторых индексов для всех элементов, лежащих в определённом месте, к примеру, выше главной диагонали, на побочной диагонали, сверху от пересечения диагоналей, ну и т.д.

Перейдём к конкретным примерам. Допустим, нам надо найти сумму элементов на главной диагонали. Для начала напомним, что главная диагональ идёт начиная от верхнего левого угла до нижнего правого, а побочная, соответственно, из левого нижнего в правый верхний. Ну так вот, посмотри на первый и второй индекс каждого из элементов, лежащего на главной диагонали. Что ты видишь? Они равны! Поэтому в условии ты можешь смело писать:

if i=j then s:=s+a[i,j] , где s – переменная суммы, i – первый индекс, j – второй индекс.

Ну а теперь без объяснений: просто смотри на рисунок и сверяй.

1. Индексы элементов, лежащих на главной диагонали равны (доказано ранее) т.е. i = j

2. Первый индекс всех элементов выше главной диагонали меньше второго, т.е. i < j

3. Первый индекс всех элементов ниже главной диагонали больше второго, т.е. i > j

4. Для элементов побочной диагонали сумма первого и второго индексов равна «наращенному» на единицу порядку матрицы, т.е. i + j = N+1 ,где N – порядок матрицы. Порядок матрицы – это количество элементов матрицы по вертикали или горизонтали. И элемент матрицы на побочной диагонали в общем виде будет иметь адрес a[i, N+1– i] , где a – название массива.

5. Для элементов, находящихся над побочной диагональю должно выполняться равенство: i + j < N+1 ,т.е. в условии надо писать: if i + j <N+1 then …

6. Для элементов ниже побочной диагонали в предыдущем неравенстве надо всего лишь сменить знак на противоположный, т.е. здесь у нас будет: i + j > N+1, а в условии: if i + j > N+1 then …

7. Для элементов над пересечением диагоналей должны выполняться одновременно два неравенства: i + j < N+1 и i < j , т.е. в программе мы напишем if (i + j<N+1) and (i < j) then … (здесь скобки обязательны)

8. Для элементов под пересечением диагоналей знаки обоих предыдущих неравенств должны быть противоположными и будет это выглядеть так: i + j> N+1 и i > j ,или в программе: if (i + j> N+1) and (i > j) then … (здесь скобки обязательны)

9. Для элементов, находящихся справа от пересечения диагоналей справедлива закономерность: i + j <N+1 и i > j или в среде Pascal это будет выглядеть так: if (i + j<N+1) and (i >j ) then …

10. Для элементов, слева от пересечения диагоналей верно соотношение: i + j >N+1 и i < j ,а в программе это будет отражено как: if (i + j>N+1) and (i < j) then …

Ну вот в общем и всё. Вроде все закономерности описал.

Добавил:

Upload

Опубликованный материал нарушает ваши авторские права? Сообщите нам.

Вуз:

Предмет:

Файл:

сборник лабораторных работ.doc

Скачиваний:

2

Добавлен:

17.11.2019

Размер:

5.38 Mб

Скачать

Под обходом матрицы
понимается перечисление всех ее
элементов. На следующем рисунке
представлены несколько способов обхода
элементов матрицы:

Примеры
вариантов обхода матрицы:

а – обход
по строкам, б – обход по столбцам, в –
“обход змейкой”, г – обход по спирали,

д – обход “змейкой по
диагоналям”, е – “лабиринт”

Для каждого из
представленных способов, кроме последнего,
который выполняется по правилу выхода
из лабиринта, можно предложить закон,
связывающий индексы между собой.

Самые простые
обходы: по строкам и столбцам.

Обход по строкам
реализуется вложением циклов:

for(i=0; i<n; i++)

for(j=0; j<m; j++)

//обработка элемента
a[i][j]

При обходе по
столбцам меняются местами циклы по
строкам и столбцам:

for(j=0; j<m; j++)

for(i=0; i<n; i++)

//обработка элемента
a[i][j]

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

Рассмотрим
закономерность формирования индексов
диагоналей квадратной матрицы.

Определив
закономерности, можно построить цикл
прохода по диагонали матрицы. Например,
для диагонали, проходящей через элемент
[р][к] параллельно главной, получаем:


if p-k>0 then s:=n-p+k else
s:=n-k+p;

for i;=1 to s do

<обработка элемента a[i,i-p+k]>

13Индивидуальные задания

Задача 1

Формулировка задачи

1

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое элементов
каждого из четных столбцов этой
матрицы.

2

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое элементов
каждого из нечетных столбцов этой
матрицы.

3

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое элементов
каждой из строк этой матрицы.

4

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое элементов
каждой из четных строк этой матрицы.

5

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое элементов
каждой из нечетных строк этой матрицы.

6

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
среднее арифметическое из всех
отрицательных элементов этой матрицы.

7

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти среднее
арифметическое из всех положительных
элементов этой матрицы.

8

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
характеристику каждой ее строки (сумму
положительных четных элементов в
каждой строке).

9

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти характеристику
каждого ее столбца (сумму модулей
отрицательных нечетных элементов в
каждом столбце).

10

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти сумму и произведение
всех ее положительных элементов.

11

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
сумму и произведение всех ее отрицательных
элементов.

12

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
сумму всех ее положительных и
произведение всех ее отрицательных
элементов.

13

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
сумму всех ее элементов и заменить ею
все диагональные элементы этой матрицы.

14

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
произведение всех ее элементов и
заменить им все диагональные элементы
этой матрицы.

15

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
минимальное из чисел, встречающееся
в данной матрице более одного раза.

16

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
максимальное из чисел, встречающееся
в данной матрице более одного раза.

17

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
сумму наибольших элементов каждой
строки матрицы и их координаты.

18

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
произведение наибольших элементов
каждой строки матрицы и их координаты.

19

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из действительных элементов. Найти
сумму наибольших элементов каждого
столбца матрицы и их координаты.

20

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти, сколько
положительных элементов содержит
данная матрица в каждой строке.

21

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти, сколько
отрицательных элементов содержит
данная матрица в каждом столбце.

22

Получить новую
матрицу путем деления всех элементов
данной матрицы на ее наибольший по
модулю элемент.

23

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Заменить нулями все
ее элементы, расположенные на главной
диагонали и выше нее.

24

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Сформировать вектор
из суммы элементов строк и найти их
среднее арифметическое.

25

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Сформировать вектор
из произведения элементов столбцов
и найти их среднее арифметическое.

26

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Сформировать вектор
из наименьших значений элементов
строк и найти их среднее арифметическое.

27

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Сформировать вектор
из разностей наибольших и наименьших
значений элементов строк.

28

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти сумму элементов
строки, в которой расположен наименьший
элемент.

29

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Найти сумму элементов
столбца, в котором расположен наименьший
элемент.

30

Задана квадратная
матрица A размером NxN (N<=10), состоящая
из целых чисел. Поменять местами
строку, содержащую максимальный
элемент, со строкой, содержащей
минимальный элемент.

Задача 2.
Решить задачу с использованием
статического двумерного массива.
Предполагаемая размерность массива (n
, в некоторых случаях m)
задается с помощью константы.

Формулировка задачи

1

Составьте
программу обмена местами максимального
и минимального элементов на побочной
диагонали матрицы B[n][n].

2

Составьте
программу вычисления среднего
арифметического каждого столбца
матрицы B[n][n]
и запишите данные значения в главную
диагональ данной матрицы.

3

Составьте
программу вычисления среднего
арифметического каждого столбца под
главной диагональю (диагональ включать)
матрицы B[n][n]
и запишите данные значения в последний
столбец данной матрицы.

4

В данном числовом
массиве A[n][m]
найти номер столбца, все элементы
которого одинаковы.

5

В данном числовом
массиве A[n][n]
найти максимальный диагональный
элемент и вывести всю строку, в которой
он расположен.

6

В данном числовом
массиве A[n][n]
найти максимальный диагональный
элемент и вывести весь столбец, в
котором он расположен.

7

В данном массиве
A[n][n]
поменять местами строки и столбцы.

8

В данном массиве
A[n][n]
поменять местами две строки с номерами
р и q.

9

Преобразовать
двумерный массив A[n][m]
в одномерный массив B[n*m],
соединив все строки в одну.

10

Для данного
целого положительного N создать матрицу
A[n][n], в которой элементы, стоящие по
диагонали, равны единице, а все остальные
элементы – нулевые.

11

Для данного
целого положительного N сформировать
матрицу A[n][n], в которой элементы
диагонали равны номеру строки, а все
остальные элементы – нулевые.

12

В матрице A[n][m]
поэлементно вычесть последнюю строку
из всех строк, кроме последней.

13

Матрицу A[n][n]
сформировать по следующему принципу:
по диагонали расположены единицы,
выше диагонали – нули, а элементы,
расположенные ниже диагонали, равны
сумме соответствующих индексов.

14

Задана матрица
В[3][5]. Получить матрицу V путем удаления
из В строки и столбца, в которых
содержится минимальный элемент.

15

Дана матрица
A[m][n]. Дополнить ее (m+1)-й строкой и
(n+1)-м столбцом (создать новый массив
B[m+1][n+1]),
в которых записать суммы элементов
соответствующих строк или столбцов
исходного массива А.

16

Создать вектор
М, содержащий количество отрицательных
элементов каждого столбца матрицы
z[n][m].

17

Имеется матрица
A[m][n]. Найти максимальный из всех
минимальных элементов строк. Вывести
номер строки, в которой расположено
выбранное число.

18

Найти среднее
арифметическое элементов матрицы
Х[n][m] и сформировать вектор У из
элементов, больших среднего
арифметического.

19

Сформировать
одномерный массив из элементов, стоящих
над главной диагональю матрицы K[m][m].
Найти сумму элементов этого массива.

20

Дана матрица
X[m][m]. Сформировать вектор из элементов,
расположенных по спирали.

21

Дано число k
(0 < k < 11) и матрица
размера 4 x 10. Найти сумму
и произведение элементов k-го
столбца данной матрицы.

22

Дана квадратная
матрица размерности N*N, где N –нечетное
число. Элементами матрицы являются
вещественные числа. Требуется вычислить
сумму ее элементов из заштрихованной
области:


23

Дана квадратная
матрица размерности N*N, где N –нечетное
число. Элементами матрицы являются
вещественные числа. Требуется вычислить
сумму ее элементов из заштрихованной
области:


24

Дана квадратная
матрица размерности N*N, где N –нечетное
число. Элементами матрицы являются
вещественные числа. Требуется вычислить
сумму ее элементов из заштрихованной
области:

25

Дана квадратная
матрица размерности N*N, где N –нечетное
число. Элементами матрицы являются
вещественные числа. Требуется вычислить
сумму ее элементов из заштрихованной
области:

26

Дана квадратная
матрица порядка M. Зеркально отразить
ее элементы относительно горизонтальной
оси симметрии.

27

Дана квадратная
матрица порядка M. Зеркально отразить
ее элементы относительно вертикальной
оси симметрии.

28

Дана квадратная
матрица порядка M. Зеркально отразить
ее элементы относительно главной
диагонали.

29

Дана квадратная
матрица порядка M. Зеркально отразить
ее элементы относительно побочной
диагонали матрицы.

30

Написать программу, которая проверяет,
является ли введенная с клавиатуры
квадратная матрица размерности N*N
«магическим» квадратом. Магическим
квадратом называется матрица, у которой
сумма чисел в каждом горизонтальном
ряду, в каждом вертикальном ряду и по
каждой из диагоналей одна и та же (см.
приведенный рисунок).

2

9

4

13

8

12

1

7

5

3

2

11

7

14

6

1

8

3

10

6

15

16

5

9

4

Задача 3.
(задача может быть решена после изучения
темы “Указатели”). Решить задачу 2
с использованием динамического
двумерного массива. Предполагаемая
размерность массива n (в
некоторых случаях m)
задается пользователем во время
выполнения программы.

Тема:
Работа с функциями

Цели: получение
навыков программирования задач с
использованием функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Резюме

Приводится описание закономерностей, которые были установлены в последовательном списке всех решений задачи о распределении n-Ферзей. Установлено, что:

  • Доля полных решений в общем списке всех решений уменьшается, с ростом значения n.
  • Полные решения распределены в последовательном списке всех решений таким образом, что с наибольшей вероятностью встречаются полные решения, расположенные в списке близко друг от друга.
  • Существует симметрия в порядке расположения полных решений в общем списке всех решений. Если в i-ой позиции от начала списка решение является полным, то и симметричное решение от конца списка, находящееся в позиции n-i+1 также является полным (правило симметричности решений).
  • Любые пары решений, как коротких так и полных, расположенных симметрично в списке всех решений, являются комплементарными – сумма индексов позиций соответствующих строк является постоянной величиной и равна n+1 (правило комплементарности решений). Это говорит о том, что только первая половина списка всех полных решений является «уникальной», любое полное решение из второй половины списка можно получить на основе правила комплементарности. Следствием этого правила является тот факт, что для любого значения n, количество полных решений, всегда будет четным числом.
  • Активность ячеек строк матрицы решения симметрична относительно горизонтальной оси, проходящей через середину этой матрицы. Это означает, что активность ячеек i-ой строки всегда совпадает с активностью ячеек строки n-i+1. Под активностью подразумевается частота, с которой встречается индекс ячейки в соответствующей строке списка полных решений. Аналогично, активность ячеек столбцов матрицы решения, симметрична относительно вертикальной оси разделяющей матрицу на две равные части
  • Независимо от n, в последовательном поиске всех решений, первое полное решение появляется только после некоторой последовательности коротких решений. Размер начальной последовательности коротких решений увеличивается с ростом n. Длина списка коротких решений до появления первого полного решения для четных значений n значительно больше, чем для ближайших нечетных значений.
  • Строка в матрице решений, на которой начинаются затруднения в продвижении вперед, и формируется первое короткое решение, делит матрицу по правилу золотого сечения. Для малых значений n такой вывод является приближенным, однако с ростом значения n точность такого вывода асимптотически возрастает до уровня стандартного правила.

В данной публикации приводятся основные результаты из статьи [1], которая опубликована в журнале «Modeling of Artificial Intelligence, 2018, 5(1)». На Хабре были работы, связанные с проблемой n-Queens:[2], [3],
Задача о распределении n ферзей на шахматной доске размера n x n имеет длинную историю. Первоначально она была сформулирована в 1848 году M. Bezzel [4], как интеллектуальная задача для обычной шахматной доски. Со временем, постановка задачи была расширена F.Nauck [5], и размер шахматной доски мог принимать произвольное значение.

Введение

Формулировка задачи достаточно простая: нужно распределить n ферзей на шахматной доске размера n x n таким образом, чтобы в каждой строке, каждом столбце, а также на левой и правой диагоналях, проходящих через ячейку, где расположен ферзь, не было более одного ферзя. Данную задачу легко понять или объяснить кому либо, но достаточно сложно ее решить. Дело в том, что не существует правил на основе которых можно расположить ферзи в каждой строке так, чтобы получить решение. Решение можно получить только на основе перебора различных вариантов расположения ферзей в тех или иных строках. Однако, сложность такого способа решения состоит в том, что количество всех вариантов расположения ферзей растет экспоненциально с ростом n. Кроме того, выполнение любого шага вперед, для расположения ферзя в свободную позицию некоторой строки, приводит к изменению списка свободных позиций в оставшихся строках, а при возврате назад на один шаг, с целью формирования ветви поиска, необходимо очистить следы ранее выполненных действий.

Имеется большое количество публикаций, связанных с различными аспектами решения проблемы n-Queens. Их можно отнести к нескольким направлениям исследования: поиск всех полных решений для заданного значения размера шахматной доски (n), разработка быстрого алгоритма для нахождения одного решения для различных значений n, решение задачи о комплектации до полного решения, для произвольной композиции из k ферзей, вопросы вычислительной сложности алгоритмических расчетов, а также различные модификации исходной постановки задачи. Для ознакомления с данными направлениями, я бы порекомендовал интересные публикации B. Jordan, S. Brett[6] и I.P. Gent, C. Jefferson, P. Nightingale[7], где приводится достаточно подробный обзор различных направлений исследования. Особо следует отметить интернет-публикацию [8], поддерживаемую Уолтером Костерсом, которая была подготовлена группой из Universiteit Leiden и содержит ссылки на 342 публикации, связанные с проблемой n-queens (по состоянию на декабрь 2018 г).

Хотя проблема n-Queens остается активной более 150 лет, и за это время появилось огромное число публикаций, мне не удалось найти работу, которая имела бы отношение к поиску закономерностей в результатах решения этой задачи. Большинство проектов, связанных с поиском всех решений, скорее всего не сохраняли найденные решения и не смотрели что «там внутри», Там, в постановке задачи были другие доминирующие цели, и наши уважаемые коллеги достигли их. Однако, отдаленно, мне показалось, что ситуация похожа на то, когда человек на завтрак варит яйца, но не ест их, а выбрасывает, оставляя в памяти только количество сваренных яиц. Я всегда был уверен в том, что если данные не случайны, то в них должна быть определенная закономерность, если даже эту закономерность мы не можем найти. Именно такая убежденность была причиной поиска закономерностей в данной задаче.

Наряду с желанием преподнести членам Хабра-сообщества полезную информацию для размышления, я хотел бы, чтобы талантливые программисты, коих на Хабре большинство, обратили бы больше внимания такому направлению развития, как компьютерное моделирование (Computational Simulation). Как метод исследования, такая «Алгоритмическая математика» используется на «переднем крае» многих направлений: Artificial Intelligence, Software Science, Data Science, … и я уверен, что очень сложные и важные для практического применения задачи, будут решены на основе алгоритмической математики и никак иначе.

Определения

Здесь и далее, размер шахматной доски мы будем обозначать символом n. Решение мы будем называть полным, если все n ферзей непротиворечиво расставлены на шахматной доске. Все остальные варианты решения, когда количество правильно расставленных ферзей меньше n – мы будем называть короткими решениями. Под длиной решения мы будем понимать количество (k) правильно расставленных ферзей. Количество всех решений, для данного значения n, будем обозначать символом m. В качестве аналога «шахматной доски» размера n x n., мы будем рассматривать «матрицу решения» размера n x n.

Начало

Для того чтобы провести исследование, был разработан алгоритм поиска всех решений для произвольного значения n. Мы не использовали стандартную рекурсию или обычную систему вложенных циклов. Для больших значений n такой подход был бы достаточно проблематичным. Алгоритм строился на основе совокупности взаимодействующих событий, в каждом из которых, происходит некая система действий, взаимосвязанных между собой. Это дает возможность достаточно просто реализовать механизм изменения пространства состояния при выборе следующего узла в ветви решения задачи (Forward tracking), или же очистки следов ранее выполненных действий, при возврате назад на один или более шагов (Back tracking). В алгоритме нет особых требований к объему памяти или быстродействию процессора.

На основе данного алгоритма были найдены все последовательные решения (как короткие, так и полные) для различных значений матрицы решения n=(7, …, 16). Так как размер списка полных решений является именованной последовательностью The On-Line Encyclopedya of Integer Sequences( последовательность A000170 [9] ) и указан во многих публикациях, мне кажется интересным привести размер списка всех решений (коротких + полных), для рассмотренных нами значений n: 7 (194), 8 (736), 9 (2 936), 10 (12 774), 11 (61 076), 12 (314 730), 13 (1 716 652), 14 (10 030 692), 15 (62 518 772), 16 (415 515 376).

Далее, используя найденные решения, мы приведем формулировки некоторых задач, методы их решения и описание полученных результатов.

1. О пространстве состояний, в котором ведется поиск решений

Перебор различных вариантов расположения ферзей в тех или иных строках матрицы решения размера n, приводит к формированию пространства состояния. Если бы не было никаких запретов по расположению ферзей в те или иные ячейки матрицы, то размер пространства состояния был бы равен nn. Если учитывать только правило, запрещающее расположение более одного ферзя в каждой строке и каждом столбце, то мы получим некоторое подмножество пространства состояния, размер которого будет равен n! Это подмножество пространства состояния соответствует задаче о распределении n ладьей. Если, наряду с этим, учитывать также правило, запрещающее расположение более одного ферзя на левой и правой диагоналях, проходящих через ячейку, где расположен ферзь, то мы получим некоторое пространство поиска, размер которого будет меньше чем n!.. Назовем такое подмножество пространства состояния – продуктивным пространством поиска, исходя из того, что только в этом подпространстве находятся все возможные решения. Любые завершенные ветви в продуктивном пространстве поиска являются решениями с некоторым числом правильно расставленных ферзей. В основном – это короткие решения, и лишь небольшая оставшаяся часть – это полные решения.

На рисунке 1 представлены графики зависимости натурального логарифма трех показателей: a) значения факториала (n!) от размера матрицы решения; b) количества всех решений (как коротких, так и полных); c) количества полных решений — в зависимости от значения размера матрицы решения (n). Как и следовало ожидать, для всех кривых характерен экспоненциальный рост с увеличением значения n. Темпы роста количества всех решений и количества полных решений различаются, хотя на графике это не столь заметно, из-за малого размера выборки значений n. Например, при n=13, разность между логарифмами этих показателей равна 3.148, а при n=16 эта разность увеличивается на величину 0.190 и составляет 3.338. Очевидно, что при дальнейшем увеличении значения n, это расхождение будет более значимым.


Рис.1 Зависимость логарифма размера пространства состояния от величины n

2. Как изменяется доля полных решений в общем списке всех решений?

Очевидно, что если темп роста количества полных решений отстает от темпов роста количества всех решений, то вероятность нахождения полного решения в общем списке всех решений будет уменьшаться с ростом значения n. На рисунке 2 представлен график зависимости доли полных решений в общем списке всех решений от значения n. Видно, что с увеличением размера матрицы решения, доля всех полных решений в общем списке уменьшается. Для начальных значений n=(7, …, 14), эта величина уменьшается в 5.66 раза от значения 0.2062 до 0.0364, и далее продолжается постепенное, асимптотическое уменьшение этой величины. Здесь возникает формальное противоречие между двумя утверждениями: с одной стороны — количество полных решений экспоненциально растет с ростом значения n, с другой – вероятность получения полного решения в последовательном списке всех решений постоянно уменьшается. Этот, кажущийся парадокс объясняется очень просто, размер продуктивного пространства и связанный с ним размер списка всех решений растет быстрее с увеличением n, чем количество полных решений. Это похоже на попытку найти иголку в стоге сена – количество сена «с увеличением значения n» растет быстрее, чем количество иголок, которые там потерялись. Поэтому, можно предположить, что если для n=27, количество полных решений равно примерно 2.346*1017, то соответствующее значение количества всех решений будет, скорее всего, на 3-4 порядка больше ~ 1020


Рис.2 Уменьшение доли полных решений в общем списке всех решений с увеличением значения n

3. Какова частота решений различной длины в списке всех решений?

Как было сказано ранее, все завершенные ветви в продуктивном пространстве поиска являются решениями с различным числом правильно расставленных ферзей.
Для нас представляет интерес, с какой частотой встречаются решения различной длины в общем списке всех решений.

В таблице 1 для значений n=(7,…,12) представлены соответствующие значения относительных частот, для решений, имеющих различную длину. Соответствующее визуальное представление этих данных приведено на рисунке 3.

Анализ таблицы позволяет сделать следующие выводы:

a) для каждой матрицы размера n, существует некоторая длина решения, которая имеет максимальную частоту (выделено жирным).

Таблица 1. Относительная частота (%) решений различной длины (k) для матрицы размера n= (7, …,12)

nk 4 5 6 7 8 9 10 11 12
7 10.31 31.23 27.84 20.62
8 2.45 20.38 34.78 29.89 12.50
9 0.34 5.79 21.73 35.83 34.32 11.99
10 0.05 1.35 8.41 25.62 32.94 25.96 5.67
11 0.15 2.12 11.80 26.71 34.47 20.36 4.39
12 0.01 0.29 3.28 13.56 29.88 31.29 17.18 4.51

b) при увеличении значения n, количество решений с различной длиной увеличивается. Соответственно, при этом уменьшается относительная частота всех решений.


Рис.3 Частота решений различной длины в зависимости от размера матрицы решения, n=7,…,16

c) для каждой матрицы размера n, существует некий минимальный размер длины решения, ниже которого короткие решения не встречаются. С увеличением значения n, величина этого порога увеличивается. Например, для n=8 пороговое значение равно 4, соответственно, при n=16, пороговое значение равно 7.

4. Каким является относительное расположение полных решений в последовательном списке всех решений?

В постановке задачи «о распределении n ферзей» нет причин, которые дали бы основание делать какое-либо предположение о порядке следования полных решений в общем списке всех решений. Нас интересовало, распределены ли полные решения в общем списке равномерно, случайно, или оно имеет какие-то особенности. Чтобы выяснить это, был проведен анализ расстояний между ближайшими полными решениями в последовательном списке всех решений. Как видно из рисунка 4, где для n=12, представлен график изменения соответствующих частот,


Рис.4 Зависимость частоты от расстояния между ближайшими полными решениями в последовательном списке всех полных решений (n=12)

с наибольшей частотой встречаются полные решения, которые непосредственно следуют друг за другом в общем последовательном списке всех решений. Это те случаи формирования ветви поиска, когда взаимоотношения свободных позиций в последних строках, позволяют формировать два или более, подряд идущих полных решения. Далее, максимальную частоту имеют те полные решения, между которыми расположены: одно короткое решение, два коротких решения и т.д.

5. Существует ли закономерность в расположении полных решений в общем списке всех решений?

Чтобы ответить на этот вопрос, нами были проанализированы последовательные списки всех решений для значений n=(7, …, 16). Чтобы наглядно продемонстрировать полученные результаты, на рисунке 5, для значения n=8, представлен график, где последовательно указана длина каждого решения в списке из всех 736 решений. Здесь только 92 решения являются полными, и они выделены красным цветом, остальные 644 решения являются короткими, и выделены синим цветом. Видно, что полные решения не распределены равномерно в списке всех решений. Есть зоны, где полные решения встречаются чаще, а есть места, где полные решения встречаются редко или вообще не встречаются.


Рис.5 Длина каждого решения в последовательном списке всех решений, для матрицы размера 8 х 8 (red — полные решения, blue – короткие решения). Общее количество всех решений равно 736

Однако, здесь важно другое. Если внимательно посмотреть на рисунок, напоминающий сине-красный штрих-код, то можно заметить одну очень важную особенность, все красные линии симметричны относительно некоторой, условной вертикальной линии, проходящей через середину списка решений. В самом деле, как показывает проверка, если на i-ом шаге от начала общего списка находится полное решение, то соответственно, полное решение обязательно будет обнаружено и на шаге m-i+1. Например, для n=8, если первое полное решение в последовательном поиске всех решений, появляется на 43-ем шаге, то соответственно, последнее полное решение в списке будет обнаружено на шаге 736- 43 +1=694. Если 17-ое решение для матрицы размера 10×10 появляется в списке на 368-ом шаге, то симметричное ему полное решение появится в списке всех решений на шаге 12774-17+1=12407. Это правило справедливо для матрицы решения любого размера. Поэтому мы можем сформулировать правило. Для любого значения n, если в последовательном списке всех решений, в i-ой позиции от начала списка решение является полным, то и симметричное решение от конца списка, находящееся в позиции m-i+1 также будет полным (правило симметричности решений). Здесь m, как указывалось выше, означает количество всех решений. Следствием этого правила является тот факт, что для любого значения n, количество полных решений, всегда будет четным числом. (Все найденные к настоящему времени размеры списка полных решений – являются четными числами).

Если сравнить индексы любых двух симметричных решений, то можно обнаружить принципиально важную особенность – симметричные пары решений являются комплементарными. Сумма соответствующих значений индексов ферзей симметричных решений будет равна n+1. Например, 17-ое решение для n=10 в списке всех решений находится в 368-ом шаге от начала списка и индексы позиций ферзя на этом шаге равны (1, 5, 7, 10, 4, 2, 9, 3, 6, 8).

Соответствующее ему симметричное решение, находится на шаге 12407 и имеет индексы позиций ферзя (10, 6, 4, 1, 7, 9, 2, 8, 5, 3). Если сложить соответствующие значения индексов каждой пары, то получим (11, 11, …,11). Это правило справедливо для любого значения n, причем, как для полных симметричных решений, так и для коротких симметричных решений. Это позволяет нам сформулировать второе правило. Для матрицы решения любого размера n, любые пары решений (как коротких, так и полных), расположенных симметрично в последовательном списке всех решений, являются комплементарными – сумма индексов позиций соответствующих строк является постоянной величиной и равна n+1 (правило комплементарности решений). Если обозначить через Q(i ) и Q1(i) – массивы индексов комплементарных решений, то будет справедливо правило

           <b>`Q ( i ) + Q1 ( i ) = n + 1,    i = (1, n) `</b>

Данное правило означает, что если получено полное решение на i-ом шаге, то тем самым становится известным симметричное полное решение на шаге m – i +1. Поэтому, при поиске всех полных решений, достаточно найти только первую половину всех полных решений. Вторую половину списка полных решений можно будет определить из уже полученных решений, на основе правила комплементарности. Критерием того, что достигнута половина списка полных решений, является выполнение правила комплементарности между предыдущим полным решением Q(i-1) и последующим Q(i) . т.е необходимо, чтобы сумма каждой пары соответствующих значений индексов двух подряд идущих решений была равна n+1. Так как любое полное решение из списка всех полных решений является уникальным, то только те подряд идущие полные решения будут комплементарными, которые находятся по обе стороны от границы, разделяющей список пополам.

Эти два правила позволят в будущем, при поиске всех полных решений для какого-либо очередного значения n, сократить объем вычислений и соответственно время счета в два раза.

6. Визуализация последовательности шагов поиска первого полного решения

Как происходит процесс выполнения шагов вперед(Forward tracking) и возврата назад (Back tracking) при формировании ветви поиска решения? Для того чтобы ответить на этот вопрос, мы, для матрицы размером 10 х 10 определили последовательность из начальных 194 переходов между строками до появления первого полного решения. Соответствующий график представлен на рисунке 6. Голубые линии означают движение вперед, а красные – возврат назад. В течение этих 194 шагов было создано 35 коротких решений. Из рисунка видно, что большая часть переходов (84.5%) происходит между строками (5, 6, 7, 8). Это, своего рода, «узкое место» по пути к «цели». Как следует из рисунка, имеется только 7 случаев перехода на 4-ую строку и один случай перехода на третью строку. Также имеется 13 случаев перехода на 9-ую строку. Три попытки перехода на 10-ую строку оказались безуспешными, так как в этих ветвях поиска на 10-ой строке не оказалось свободной позиции. Данный пример наглядно демонстрирует все ветви формирования коротких


Рис.6 Визуализация событий Backtracking (red) и Forwardtracking (blue) для первых 194 шагов поиска (n=10)

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

7. Через какое количество коротких решений появляется первое полное решение?

Учитывая, что полные решения появляются неодинаково на различных участках списка всех решений, представляется важным выяснить, через какое количество коротких решений появляется первое полное решение при последовательном поиске всех решений. С этой целью, для значений n=(7, … ,35) были последовательно вычислены все короткие решения до появления первого полного решения. Как видно из рисунка 7, где представлен график зависимости от n, натурального логарифма номера шага, когда появилось первое полное решение, для четных значений n первое полное решение появляется значительно позже, чем для ближайших нечетных значений n. Например, для нечетного значения n=21 первое полное решение появляется на шаге 3138, а для следующего, четного значения n=22 первое полное решение появляется на 628169 –ом шаге. Соответственно, для следующего, нечетного значения n=23 первое полное решение появляется на 9155 –ом шаге.


Рис.7 Количество коротких решений до появления первого полного решения, для различных значений n

Количество шагов итерации при четном n=22, соответственно в 200.2 и 68.6 раза больше, чем у ближайших нечетных значений. Особенно наглядно по времени счета это проявляется для n=34. Здесь первое полное решение появляется на 826 337 184-ом шаге, а для ближайших нечетных чисел (33, 35), соответственно на 50 704 900-ом и 84 888 759-ом шагах. Следует также сказать о нарушении монотонности роста числа коротких решений до появления первого полного решения, с ростом n. Для четных значений n это происходит при n=19, для нечетных – при n=24 и n=26.

8. Одинакова ли частота ячеек каждой строки в списке всех полных решений?

Матрица решения размера n x n, которая служит аналогом шахматной доски, это как сцена, на котором происходят все события. Любое полное решение, сформированное на этой сцене, состоит из индексов ячеек различных строк, т.к. каждая такая ячейка является узлом в ветви поиска решения. Вопрос, который нас будет интересовать, состоит в следующем: является ли в каждой строке нагрузка одинаковой для различных ячеек, при формировании списка всех полных решений? Очевидно, что, чем больше значение частоты, тем выше будет активность данной ячейки в формировании списка полных решений. Чтобы установить это, определим для каждой строки на основе списка всех полных решений, относительную частоту различных индексов. Вначале проведем анализ для матрицы решения размером n=8. Рассмотрим последовательно каждую строку массива хранения полных решений и определим частоту различных значений индекса. В таблиц 2, представлены соответствующие значения абсолютных частот активности различных ячеек в каждом из восьми строк, а на рис. 8

Таблица 2. Абсолютная частота активности ячеек в каждом из восьми строк матрицы решения 8х8, полученных на основе анализа списка всех полных решений

rowcol 1 2 3 4 5 6 7 8
1 4 8 16 18 18 16 8 4
2 8 16 14 8 8 14 16 8
3 16 14 4 12 12 4 14 16
4 18 8 12 8 8 12 8 18
5 18 8 12 8 8 12 8 18
6 16 14 4 12 12 4 14 16
7 8 16 14 8 8 14 16 8
8 4 8 16 18 18 16 8 4

представлена группа из 4 графиков, где каждый график характеризует изменение относительных частот в пределах одной строки. Один из принципиально важных выводов, который можно сделать на основе анализа всех полученных данных состоит в следующем:

  • для матрицы решения произвольного размера n, активность ячеек i-ой строки совпадает с активностью ячейки n-i+1, т.е. активность ячеек первой строки всегда совпадает с активностью ячеек последней строки, соответственно, активность ячеек второй строки совпадает с активностью ячеек предпоследней строки и т.д.

    В случае, если n нечетно, только медианная строка матрицы решения не имеет симметричной пары, для всех остальных ячеек справедливо указанное выше правило

  • Назовем это, «свойством горизонтальной симметрии активности ячеек различных строк матрицы решения». По этой причине мы привели только 4 графика для матрицы решения размера n=8, так как соответствующие графики активности ячеек для строк (1 ,8), (2,7), (3,6) и (4,5) полностью идентичны.

Также следует отметить, что значения частот симметричны относительно вертикальной оси разделяющей матрицу на две равные части (в случае четного значения n), либо проходящей через медианный столбец (в случае нечетного значения n). Назовем это, «свойством вертикальной симметрии активности ячеек различных строк матрицы решения».

Кроме того, как следует из анализа таблицы 2, значения частот в матрице решения симметричны относительно левой и правой главных диагоналей.


Рис.8 Активность ячеек соответствующих строк при формировании списка полных решений, n=8

Думаю, что наличие ограничивающих правил в постановке задачи, и связанное с этим свойство не детерминированности «формируют» некое гармоничное отношение между узлами в различных строках. Те ветви поиска, которые вписываются в эти правила — приводят к формированию полного решения. Остальные ветви поиска, на каком-то шаге нарушают эти правила, и в итоге, «завершают свой путь» в виде коротких решений. Здесь следует отметить, что ячейки матрицы решения имеют только локальную взаимосвязь в пределах проекционной группы влияния, между ними нет предписанных правил о согласованных действиях. Коллективная активность ячеек – это только следствие от результата воздействия ограничивающих правил. Поэтому, остается открытым достаточно интересный вопрос, каким образом ограничивающие правила, как факторы не детерминированности, воздействуют на ячейки матрицы решения, что это, в итоге приводит к формированию «гармоничной» матрицы активности ячеек – симметричной относительно горизонтальной и вертикальной осей, а также относительно левой и правой главных диагоналей. Является ли это характерным свойством только данной задачи, или оно имеет место и для других не детерминированных задач?

9. С какого номера строки включается алгоритм Forward tracking — Back tracking?

Если проследить за работой алгоритма последовательного выбора строк в матрице решений для расположения ферзя, то можно заметить, что начиная с некоторой строки, которую назовем «StopRow», происходит «торможение» процесса продвижения вперед. В ветви поиска такая строка является первой, где возникают проблемы с наличием свободной


Рис. 9-1 Зависимость отношения индекса StopRow к n от размера матрицы решения (часть-1)

позиции для расположения ферзя. Именно с этой строки включается алгоритм Back tracking для очистки следов ранее выполненных действий, и возврата назад. Это та строка, на которой появляется первое короткое решение.


Рис.9-2 Зависимость отношения индекса StopRow к n от размера матрицы решения (часть-2)

Индекс строки «StopRow», с которой начинаются затруднения в продвижении вперед, зависит от размера n матрицы решений. Если рассматривать отношение этого индекса, которую обозначим через StopInd к размеру матрицы решения n, то, как видно из рисунка 9-1, где представлены результаты расчета для начальных значений n=(7, …, 99), это отношение колеблется в большую или меньшую сторону и имеет тенденцию к убыванию. При увеличении значения n= (100, …, 300), это отношение колеблется в пределах 0.619 – 0.642 (рис. 9-2), а при дальнейшем увеличении n, мы получаем следующие результаты (последовательно приводятся значения n, а в скобках – значение StopInd и отношение StopInd/n: 1000(619, 0.6190), 2000(1239, 0.6195), 3000(1856, 0.6187), 4000(2473, 0.6182), 5000(3091, 0.6182). Удивительно, но можно утверждать, что стоп-строка делит матрицу решения по правилу золотого сечения: а именно, отношение StopInd/n отличается от (n-StopInd)/ StopInd на малую величину, которая стремиться к нулю с ростом n. Например, для n=5000 разница между отношениями 3091/5000 и 1909/3091 составляет 0.006, что меньше 0.1% от среднего значения этих двух отношений.

График, представленный на двух рисунках Рис. 9-(1,2) имеет не случайную форму изменчивости, которая напоминает запись на «музыкальном нотном стане». Видны повторяющиеся скачки вверх и ступенчатое падение вниз с некоторой нерегулярной периодичностью. Очевидно, что есть некая причина, обусловливающая такой характер поведения кривой, и возможно, это представит интерес для исследования. По этой причине, с целью более подробной визуализации, график был представлен на двух рисунках.

Я рассмотрел только часть вопросов, которые можно сформулировать на основе результатов решения задачи «о распределении n-ферзей». Надеюсь, что полученные результаты сделают более прозрачными для понимания механизмы формирования не детерминированных процессов и изменения пространства состояния. Возможно, это послужит точкой опоры для формулировки новых задач и продвижения вперед.

Заключение

  • Если, просматривая публикацию, дошли до заключения, то естественно, возникнет вопрос: «а при чем тут One Billion Queens Problem Solution в заголовке статьи?». Подготавливая публикацию для Хабра, я подумал, что человек, который обладает, к примеру, рудником, где добывают алмазы, должен подарить хотя бы по одному алмазу своим друзьям и близким, иначе это было бы несправедливо. Поэтому, я хотел бы преподнести подарок всем членам хабра-сообщества: участникам, организаторам, посетителям. Как следует из названия, это решение задачи о распределении одного миллиарда ферзей на шахматной доске размера миллиард на миллиард.

    Конечно, это не алмаз граненный, но для настоящих ценителей интеллектуального искусства, это может быть более ценным, чем «какой-то там алмаз». Тем более алмазов много разных по миру, а это решение пока только в одном экземпляре. И видит наш Byte-Бог (*), что делаю я это искренне.
    Полученное решение — это одномерный массив, состоящий из одного миллиарда чисел, который представлен в формате MatLab .mat и доступен по адресу:One Billion Queens Problem Solution на Google Drive
    -Первый элемент этого массива характеризует позицию ферзя в первой строке, второй элемент – позицию во второй строке и т.д. Это только одно решение из nBillion возможных решений. А значение nBillion это настолько большое число, что его можно считать близким родственником бесконечности.

  • Мне кажется, что данное решение можно отнести к категории виртуальных интеллектуальных ценностей. Можно сказать, что «это нечто, в котором что-то есть». Их реально «потрогать» не получится, так что оно воспринимается в сознании только на уровне ощущений. Там, в самом деле, есть удивительный порядок и явная и неявная гармония. Это, чисто символический подарок (в прямом и переносном смысле), который адресован всем членам сообщества. Я думаю, что «Вы не такие как все».

    (Надеюсь, что кто-то «заберет подарок домой». Файл достаточно большой – 3.7 Gb. Это чистые, проверенные данные. То, что Google Drive выведет предупреждения – отнеситесь к этому с пониманием)

  • Прежде чем принять данное решение я подумал об индивидуально-коллективном характере такого подарка. Не получится ли так, что одному будет вручен оригинал, а остальным копии? Но решение оказалось простым. Привычные нам «житейские» понятия «оригинал» и «копия» в данном случае, теряют смысл. Мы не копируем, а создаем еще один оригинал. А «оригиналы» для всех одинаковы и равно эквивалентны.
  • Думаю, что в компании родственников, вы, скорее всего, будете единственным, кто получил в подарок такое «интеллектуальное изделие». Будет весело, если вы расскажете тёще о таком подарке: «Представьте себе мамо шахматную доску размером 50 000 км на 50 000 км, на которой распределены 1 миллиард ферзей таким образом, что один другого в упор не видит…». Кто знает, может после этого, будут больше ценить зятя, раз ему такой странный подарок вручают.

Желаю всем членам хабра-сообщества здоровья, успехов и благополучия. Пусть новый год принесет всем нам удачу.

(*) – Раз уж сослался на имя объекта, то следует привести и его описание.
Под Byte-Богом подразумевается многомерная сущность, состоящая из нулей и единиц, разумная во всех смыслах и бесконечная по всем направлениям. Любая последовательность из нулей и единиц в этом пространстве представляет определенные знания.

Список литературы

[4] Max Bezzel, Proposal of 8-queens problem”, Berliner Schachzeitung, Volume
3 (1848), page 363. (Submitted under the author name Schachfreund”.)

[5] Franz Nauck, Briefwechseln mit allen fur alle”, Illustrirte Zeitung, Volume
377 Number 15 (1850), page 182.

[6 ] Bell Jordan; Stevens Brett (2009). “A survey of known results and research areas for n-queens”. Discrete Mathematics. 309 (1): 1–31

[7] Gent, Ian P.; Jefferson, Christopher; Nightingale, Peter (August 2017). “Complexity of n-Queens Completion”. Journal of Artificial Intelligence Research. AAAI Press. 59: 815–848

[8] W. Kosters and all, n-Queens — 342 references, (November 20, 2018)

[9] N.J.A. Sloane, the On-Line Encyclopedia of Integer Sequences, published electronically. 2016


Форум программистов Vingrad

Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> [Найти закономерность] Таблица 4х4, числа в ней. 

V

   

Опции темы

KasMP
Дата 29.9.2008, 21:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30

Приветствую smile !

Жирным выделено что-то типа координат. Надо по паре координат выдать соответствующее число.
Вы видите здесь хоть какую-нибудь закономерность? Кроме симметрии, разумеется smile .

user posted image

PM MAIL   Вверх
vinter
Дата 29.9.2008, 21:48 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Explorer
****

Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56

если представиь каждую клетку как произведение соответвующих координат + число m, То можно посторить матрицу m

0   -2  -4  -8
1    0  -1  -4
1    0   0  -2
1    1   1   0

т.е по краям мы имеем числа от 0 и дальше по возрастанию 2 в степени >=1, со знаком минус. Главаня диагональ все нули. непонятно как сюда приплести -1, а сотальное вроде похоже на закономерность. 

——————–

Мой блог

PM MAIL WWW   Вверх
bars80080
Дата 29.9.2008, 21:59 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

прапор воюет
****
Награды: 1

Профиль
Группа: Завсегдатай
Сообщений: 12015
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315

если из каждого числа вычесть его самого, то мы получим абсолютную матрицу, где каждый элемент равен произведению координат

PM MAIL   Вверх
KasMP
Дата 29.9.2008, 22:13 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30

Вообще говоря, надо найти закономерность не внутри самой матрицы, а во взаимосвязи пары координат и числа.
Т.е. получается как бы функция от двух переменных: например, f(1,2)=3, f(1,4)=4, f(3,3)=8, т.п. и т.д.. Мы знаем значения функции при любых переменных (а они изменяются только от 1 до 4). Нам нужно найти саму функцию!

Изначально задачка звучит так:

Цитата
Есть шахматная доска. На ней стоит конь. Известно поле, на котором он стоит (я назвала это координатами).
Скольким полям угрожает конь?

Добавлено через 3 минуты и 8 секунд

Цитата(bars80080 @  29.9.2008,  21:59 Найти цитируемый пост)
если из каждого числа вычесть его самого, то мы получим абсолютную матрицу, где каждый элемент равен произведению координат 

По-моему, если из каждого числа вычесть его самого (довольно интересная операция, которая с элементарными преобразованиями увязывается тяжело), то мы получим нулевую матрицу… Что такое абсолютная матрица?
Позволю себе повториться: главное – взаимосвязь между парой координат и соответствующим числом.

Добавлено через 7 минут и 16 секунд
На худой конец, перебор smile никто не отменял.

Добавлено через 9 минут и 42 секунды
Хотя, с другой стороны, закономерности внутри матрицы помогут установить взаимосвязь между координатами и числом.

PM MAIL   Вверх
KasMP
Дата 29.9.2008, 22:42 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30

Цитата(vinter @  29.9.2008,  21:48 Найти цитируемый пост)
если представиь каждую клетку как произведение соответвующих координат + число m, То можно посторить матрицу m

0   -2  -4  -8
1    0  -1  -4
1    0   0  -2
1    1   1   0

т.е по краям мы имеем числа от 0 и дальше по возрастанию 2 в степени >=1, со знаком минус. Главаня диагональ все нули. непонятно как сюда приплести -1, а сотальное вроде похоже на закономерность.

Я подумаю об этом завтра. По сути мы получаем из пары координат число, но только через эту доп.матрицу… А в доп.матрице закономерности есть… Надо подумать, короче говоря smile .

PM MAIL   Вверх
bars80080
Дата 29.9.2008, 23:34 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

прапор воюет
****
Награды: 1

Профиль
Группа: Завсегдатай
Сообщений: 12015
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315

та чё здесь думать? ты ж не привела задачу полностью (хотя и по этому куску можно было догадаться).
построй в голове шахматную доску, где клетки – это столбики кубиков. по два в углах и по восемь в середине. какую фигуру это напоминает?
правильно – пространственная парабола. закон по каждой стороне выглядит примерно так: y = -0.25x^2 + 2*x
соответственно, осталось переложить в трёхмерную систему
скажем так:

Код
<?php
function wfunc($x, $y) {
    $z = -0.25*$x*$x + 2*$x - 0.25*$y*$y + 2*$y;
    return $z; 
}
$x = array(0,1,2,3,4,5,6,7);
$y = array(0,1,2,3,4,5,6,7);
echo '<table border="1">';
for($i = 0; $i < 8; $i++) {
    echo '<tr>';
    for($j = 0; $j < 8; $j++) {
        echo '<td>'.wfunc($x[$i], $y[$j]).'</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>

если запустить, то увидишь нечто похожее. но коэффициенты не точные, и нехватает свободного члена. плюс потом нужно округлить. а так это примерно то что надо

PM MAIL   Вверх
Dov
Дата 30.9.2008, 11:58 (ссылка)
|    (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

аСинизатор
***

Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88

Цитата

Ход за мной – что делать!? Надо, Сева, –
Наугад, как ночью по тайге…
Помню – всех главнее королева:
Ходит взад-вперед и вправо-влево, –
Ну а кони вроде – только буквой “Г”.
              Владимир   Высоцкий 

Имхо, здесь никакой закономерности нет. Таблица просто показывает количество допустимых ходов  коня из каждой клетки шахматной доски, подразумевая, что эта доска имеет размеры 8 х 8 и, учитывая тот факт, что конь не может сделать ход за “пределы доски”. Отсюда следует, что, начиная с клетки(3; 3), конь может сделать 8 ходов, т.е. попасть на 8 разных клеток. А чем ближе к “краю доски”, тем меньше допустимых ходов имеет конь. Например, находясь в клетке(1; 1) конь имеет всего 2 допустимых хода. Всё это можно вычислить, прибавляя смещение к “координатам” коня и отбрасывая отрицательный результат, говорящий о том, что конь вышел за “пределы доски”. 
Ну, а так, в данной конкретной задаче, можно “вычислить результат”, используя навыки программирования. Например, на языке СИ это может выглядеть так:

Код
result = (x >= 3 && y >= 3 ? 8 : x + y == 5 ? x * y : x + y); 

Перевожу…
Если обе координаты больше или равны 3, то результат равен 8, 
иначе
     если сумма координат равна 5, то результат равен произведению этих координат, а иначе их сумме.

Вроде так, хотя могу и ошибаться…  smile

——————–

Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.

PM   Вверх
KasMP
Дата 30.9.2008, 13:31 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30

Dov smile , хоть сегодня днем во время перерыва я и решила делать точно так же smile , тебе спасибо за само желание помочь smile, за то, что не поленился все так подробно описать  smile , за приятный тон smile , за примеры smile .
Благодарю smile.

PM MAIL   Вверх
Dov
Дата 30.9.2008, 16:29 (ссылка)
|    (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

аСинизатор
***

Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88

А сама программа по поиску значений(если кому – то интересно) могла бы выглядеть так:

Код
bool isValid(int x, int y)
{
    return ( x >= 1 && x <= 8 && y >= 1 && y <= 8 );
}

int main()
{
    int    x, y, n, result;    
    int offset[8][2] = { {1, 2}, {1, -2}, {2, 1}, {2, -1}, {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1} };

    cout << "Enter test count: ";
    cin  >> n;

    while( n-- )
    {
        cout << "Enter x: ";
        cin  >> x;
        cout << "Enter y: ";
        cin  >> y;        

        result = 0;
        for( int i = 0; i < 8; i++ )
            if( isValid(x + offset[i][0], y + offset[i][1]) )
                result++;

        cout << "Result : " << result << endl << endl;
    }
}

Добавлено через 1 минуту и 31 секунду
Нужно только защиту от дурака прикрутить…  smile

KasMP, не за что…  smile

——————–

Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.

PM   Вверх
KasMP
Дата 30.9.2008, 16:43 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30

А у меня вот так smile smile !

Код

#include <iostream>
using namespace std;

int main() {
    short x, y;
    short r;

        cout << "Input x, y.n";
    cin >> x >> y;

        if (x>4) x=9-x; if (y>4) y=9-y;
    r=(x>=3 && y>=3 ? 8
            : x+y==5 ? x*y
            : x + y);

                cout << "The knight attacks " << r << " fields.n";  

        return 0;
}

Только про дурака я не подумала... Если что, потом доделаю :smile .

PM MAIL   Вверх
okaton
Дата 11.10.2008, 10:28 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет

Цитата
Имхо, здесь никакой закономерности нет. Таблица просто показывает количество допустимых ходов  коня из каждой клетки шахматной доски, подразумевая, что эта доска имеет размеры 8 х 8 и, учитывая тот факт, что конь не может сделать ход за “пределы доски”. Отсюда следует, что, начиная с клетки(3; 3), конь может сделать 8 ходов, т.е. попасть на 8 разных клеток. А чем ближе к “краю доски”, тем меньше допустимых ходов имеет конь. Например, находясь в клетке(1; 1) конь имеет всего 2 допустимых хода. Всё это можно вычислить, прибавляя смещение к “координатам” коня и отбрасывая отрицательный результат, говорящий о том, что конь вышел за “пределы доски”. 
Ну, а так, в данной конкретной задаче, можно “вычислить результат”, используя навыки программирования

 

smile 

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума “Центр помощи”

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!

  • Название темы должно отражать её суть! (Не следует добавлять туда слова “помогите”, “срочно” и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например “школьная задача”, “задача из учебника” и т.п.), не нужно указывать ее сложность (“простая задача”, “легкий вопрос” и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку “Код”). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик – один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой “Пометить как решённый”, которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »

Добавить комментарий