powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как решить задачу по комбинаторике?
450 сообщений из 450, показаны все 18 страниц
Как решить задачу по комбинаторике?
    #39763897
Недавно наткнулся на очень на мой взгляд задачку по комбинаторике. Так как в школе комбинаторику плохо преподавали в своё время, никак решить не могу. Второй день мучаюсь. Есть варианты. Буду безумно благодарен, если поможете. Задачу прикрепляю. Изначально решил сделать обычный подбор состоящий из 9 циклов, но кажется есть путь попроще. И с другой стороны как сделать так, чтобы числа не повторялись, то есть уникальный подбор
1 2 3 4 5 6 7 8 9 ...
а не 11111233...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39763938
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий СмерксИзначально решил сделать обычный подбор состоящий из 9 циклов, но кажется есть путь попроще.
Это называется размещения без повторений, гугл в помощь .
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764017
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
не так и много вариантов

17! / (4! 5! 6!) = 171 531 360
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764032
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с акцентом Шварца: какие ваши доказательства?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764070
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО Не обязательно перебор всех вариантов устраивать, можно сначала упростить задачу, например перебрать всевозможные две диагонали - это ((17! / (13! * 4!)) * (13! / (9! * 4!))) всего 1701700 комбинаций. А дальше проверять только те решения, у которых сумма по диагоналям совпала.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764074
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

а если твою формулу с другого круга начать? тоже самое выйдет ;-)?
освежить бы надо комбинаторику
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764075
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - задача на бэктректинг. Думю что решение о том что нельзя поставить данную
расстановку надо принять гораздо раньше. До того как будут перебраны все варианты.
На ходу.

Грубо говоря здесь не совсем чисты факториал - а амортизированный.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764077
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, кроме того

((17! / (13! * 4!)) * (13! / (9! * 4!)))

наверное С(4, 17) * С(5, 13) хотел написать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764099
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут пересекающиеся множества тождественные между собой. (система линейных уравнений)

Есть несколько точек не принадлежащих множеству и центральный круг у которого нет собственных свободных точек.
у всех остальных тождественные множеств есть пара точек лежащих вне пересечения.
Суть задачи просто правильно сформулировать систему уравнений упростить ее и решить.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самые селективные предикаты поднять наверх. Тоесть не решать систему до конца а максимально
быстро принять решение что дальше решать не стоит.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764114
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

и я ошибся всё таки, не увидел что одно число не расставляется, это уменьшает вдвое количество вариантов для полного перебора

17! / (2! 4! 5! 6! ) = 85 765 680


Малыхин Сергей, одно выпадающее число сразу удвацетирит количество систем, его наверное можно с ручкой и бумажкой порешать, но мы же программисты, проще перебрать
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764119
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет, всё верно

17! / (1! 4! 5! 6!) = 171 531 360 вариантов
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764134
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T, кроме того

((17! / (13! * 4!)) * (13! / (9! * 4!)))

наверное С(4, 17) * С(5, 13) хотел написать?
Нет, но немного ошибся, на 4 надо было умножить:
1. Берем все сочетания 17 по 4 (17! / (13! * 4!) = 2380) и подставляем их в горизонтальный диаметр 4-мя способами (каждый элемент в центр) - это 9520 комбинаций.
2. Из оставшихся все сочетания 13 по 4 в один диагональный диаметр - 715 комбинации. Если сумма не совпала, то п.1

9520*715 = 6806800
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764168
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

если твоим путём идти тебе нужно просуммировать все 4! варианта

по трём основным кругам: в 1-м 5 элементов нужно расставить, во втором - 4, в третьем - 6, центральный -1

будет сумма переборов

C(5, 17) * C(4, 12) * C(6, 8) * С(1, 2) +
C(4, 17) * C(5, 13) * C(6, 8) * С(1, 2) +
+...


т.е. 24 варианта замены порядка
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запилите уже поиск в глубину.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764185
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
блин, вру, не надо их суммировать, везде одинаковое число будет

C(5, 17) * C(4, 12) * C(6, 8) * С(1, 2) = 17!/ 5! / 4! / 6!

C(4, 17) * C(5, 13) * C(6, 8) * С(1, 2) = 17! / 4!/ 5!/ 6!
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764197
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

если твоим путём идти тебе нужно просуммировать все 4! варианта

по трём основным кругам: в 1-м 5 элементов нужно расставить, во втором - 4, в третьем - 6, центральный -1

будет сумма переборов

C(5, 17) * C(4, 12) * C(6, 8) * С(1, 2) +
C(4, 17) * C(5, 13) * C(6, 8) * С(1, 2) +
+...


т.е. 24 варианта замены порядка
Нет. Сначала решаем упрощенную задачу: сумма двух диаметров совпала, поэтому без разницы в каком порядке на горизонтальном диаметре кроме центрального элемента, т.е. каждой комбинации из 17 по 4 есть всего 4 варианта записи (не 4!).
Например для набора 1,2,3,4 будет
Код: plaintext
1.
2.
3.
12,2,1,3,4
12,1,2,3,4
12,1,3,2,4
12,1,4,2,3
На этом этапе остальные комбинации это повтор этих, например 12,4,2,3,1 тоже самое что и 12,1,2,3,4

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

На следующих шагах решения придется перебрать пропущенные комбинации, но это далеко не все возможные комбинации.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КМК задача связана с Магическими квадратами.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764234
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

зря мы тут по комбинаторике голову ломаем, все элементы связаны, т.е. позиция важна, придётся 17! вариантов перебирать

но
сумма трёх диагоналей 3S = сумме внутреннего и внешнего круга 2S + 3C


S = 3C, т.е. в центре число равное трети от суммы

пусть X выкинутое число
X + C + 3S= 21*20/2 =210

3X + 10 S = 630

Х = 10 | 20
соответственно
S = 60 | 57
С = 30 | 29 ??????????????????? что нереально

или где-то в условие неверно?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764293
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле, всё ещё проще.

Общая сумма от 1 до 20 = 210.

Имеем 3 основных круга по 6 кружков. Всего 19 кружков.
Отнимаем от 210 значения 2-х произвольных кружков и делим оставшееся на 3.

Имеем 3 диаметра + средний круг (итого 4 элемента). Всего 19 кружков.
Отнимаем от 210 значения 1-ого произвольного кружка и добавляем 2 раза значение другого произвольного кружка. Всего 21 кружок. Всю сумму делим на 4.

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

А именно:
1)выкидываем 10, в центре 20, сумма круга (диаметра) 60
2)выкидываем 20, в центре 19, сумма круга (диаметра) 57.

Наверное, дальше, будет проще...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764300
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

выкинуть можно только кратное 3-м
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764304
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

выкинуть можно только кратное 3-мА где это написано в условии?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764323
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно по формулам.

а - выкидываем,
в - в центре

(210 - а - в) / 3 = ( 210 - а + 2 х в) / 4

или

210 = а + 10 х в
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764352
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посчитал все варианты для трех диаметров
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
#include <iostream>
#include <cstdio>
#include <string.h>
#include <set>

int total = 0, count = 0, min_sum = 99, max_sum = 0;

std::set<int> sums;

// Перебор 9 по 4
void combination9by4(int* numbers13, size_t j0, size_t j1, size_t j2, size_t j3, int center, int sum) {
	int n0 = numbers13[j0], n1 = numbers13[j1], n2 = numbers13[j2], n3 = numbers13[j3];
	// Оставшиеся 9
	int numbers9[9];
	for (size_t i = 0, j = 0; i < 13; i++) {
		int n = numbers13[i];
		if (n != n0 && n != n1 && n != n2 && n != n3) {
			numbers9[j] = n;
			j++;
		}
	}
	// Сочетания 9 по 4
	for (size_t k0 = 0; k0 < 9; k0++) {
		for (size_t k1 = k0 + 1; k1 < 9; k1++) {
			for (size_t k2 = k1 + 1; k2 < 9; k2++) {
				for (size_t k3 = k2 + 1; k3 < 9; k3++) {
					if (sum == numbers9[k0] + numbers9[k1] + center + numbers9[k2] + numbers9[k3]) {
						if (sums.find(sum) == sums.end()) {
							sums.insert(sum);
							printf("sum = %d\n", sum);
							if (sum < min_sum) min_sum = sum;
							if (sum > max_sum) max_sum = sum;
						}
						count++;
					}
				}
			}
		}
	}

}


// Перебор 13 по 4
void combination13by4(int* numbers17, size_t i0, size_t i1, size_t i2, size_t i3) {
	int n0 = numbers17[i0], n1 = numbers17[i1], n2 = numbers17[i2], n3 = numbers17[i3];
	// Сумма горизонтального диаметра
	int sum = 12 + n0 + n1 + n2 + n3;
	// Оставшиеся 13
	int numbers13[13]; 
	for (size_t i = 0, j = 0; i < 17; i++) {
		int n = numbers17[i];
		if (n != n0 && n != n1 && n != n2 && n != n3) {
			numbers13[j] = n;
			j++;
		}
	}
	// Сочетания 13 по 4
	for (size_t j0 = 0; j0 < 13; j0++) {
		for (size_t j1 = j0 + 1; j1 < 13; j1++) {
			for (size_t j2 = j1 + 1; j2 < 13; j2++) {
				for (size_t j3 = j2 + 1; j3 < 13; j3++) {
					total++;
					if (sum == numbers13[j0] + numbers13[j1] + n1 + numbers13[j2] + numbers13[j3]) {
						combination9by4(numbers13, j0, j1, j2, j3, n1, sum);
					}
				}
			}
		}
	}

}

// Сочетания 17 по 4 (горизонталь)
void combination17by4() {
	// Возможные значения
	int numbers17[17] = { 1, 2, 3, 4 , 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };

	for (size_t i0 = 0; i0 < 17; i0++) {
		for (size_t i1 = i0+1; i1 < 17; i1++) {
			for (size_t i2 = i1 + 1; i2 < 17; i2++) {
				for (size_t i3 = i2 + 1; i3 < 17; i3++) {
					combination13by4(numbers17, i1, i0, i2, i3);
					combination13by4(numbers17, i0, i1, i2, i3);
					combination13by4(numbers17, i0, i2, i1, i3);
					combination13by4(numbers17, i0, i3, i1, i2);
				}
			}
		}
	}
}

int main(int argc, char** argv[])
{
	combination17by4();
	printf("total %d  count %d  min_sum %d  max_sum %d\n", total, count, min_sum, max_sum);
	system("pause");
	return 0;
}



Результат 533520 комбинаций диаметров.
Дальше заполняем средний круг (6, 18, ... ) 4-мя из оставшихся 5-ти, т.е. комбинаций станет 533520 * 5.

Дальше остается перебрать комбинации в каждом диаметре (3!, 4!, 4!) и среднем круге (4!). Итого 82944.

Всего максимум 533520 * 5 * 82944 = 221`261`414`400. Многовато, но думаю комбинаций после заполнения среднего круга будет поменьше чем 5*533520.


Разбег сумм получился от 34 до 69.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764366
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил заполнение среднего круга, вариантов осталось 41796, для каждого надо допроверить 82944 подварианта.

Итого 41796*82944 = 3`466`727`424. Это реально обсчитать перебором.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764377
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то не въехал - а где здесь девять "указанных" окружностей? Три диаметра вроде понятны, поскольку есть три шестиугольника, которые можно интерпретировать как точки на трёх окружностях, но и с ними не всё до конца ясно - под ограничение попадают все диаметры трёх "окружностей" (шестиугольников) или именно три каких-то конкретных?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764380
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумма в диапазоне 48...62, а пропущенное одно из 2,4,8,10,14,16,20
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764382
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя если поменять местами диаметры с окружностями - вроде получится что-то осмысленное.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764386
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и в итоге выйдет система из 12 диофантовых уравнений. В общем-то перебор не нужен. Вставляем систему в решатель уравнений и всё, финита.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764421
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДобавил заполнение среднего круга, вариантов осталось 41796, для каждого надо допроверить 82944 подварианта.

Итого 41796*82944 = 3`466`727`424. Это реально обсчитать перебором.
Итого не окончательное, будет намного меньше, т.к. при переборе изменив комбинацию на диагоналях можно посчитать сумму внешнего и внутреннего кругов, если они не верны, то не надо делать перестановки на среднем кругу, что уменьшит до 24-х раз общее количество комбинаций.
Возможный минимум 144`446`976 комбинаций, что близко к расчетному значению kealon(Ruslan) 21793102
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764457
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, вот это сильно может сократить перебор
сумма на диагонали D не равна сумме на периметре S, как выше показал (это видимо условие задачи всё же)


3D = 2S + 3C
3S + C + X = 210

где X- выпавший, C- центровой

2S + 3C = 3D
3S + C + X = 210

6S + 9C = 9D
6S + 2C + 2X = 420

7C - 2X = 9D - 60 * 7

9D + 2X = 7(60 + C)

9(D - 46) + 2(X-3) = 7C

может ещё какое уравнение можно найти
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764464
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле всё ещё проще. Зачем столько переборов.
Имеем два варианта:Gennadiy UsovА именно:
1)выкидываем 10, в центре 20, сумма круга (диаметра) 60
2)выкидываем 20, в центре 19, сумма круга (диаметра) 57.Здесь сумма круга равна S.

Для каждого из них устанавливаем следующую последовательность действий (метод поиска с возвратом):
1) Известны положения 5 кружков из 20. (один из них вне игры).
2) Ищем для средней окружности 4 кружка из 15 таким образом, чтобы сумма с двумя 18 и 6 была равна S. Сочетание 4 из 15.
3) Ищем для внешней окружности 5 кружков из 11 таким образом, чтобы сумма вместе с 12 равна S. Сочетания 5 из 11.
Оставшиеся 6 кружков на внутренней окружности имеют сумму S.

4) Ищем 1-ый диаметр таким образом, чтобы сумма была S. Для этого из внешней и внутренней окружностей выбираем по 2 кружка. Два сочетания по 2 из 6. И добавляем значение центра.
5) Ищем 2-ой диаметр так же. Два сочетания по 2 из 4. Если не получается, то возврат на пункт 4).
6) Проверяем третий диаметр.

7) Если имеется таблица по 6-ти оставшимся окружностям, то можно проверить их на предмет суммы S.

Если где-то не получилось, то возврат на предыдущую позицию.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764470
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Я что-то не въехал - а где здесь девять "указанных" окружностей? Три диаметра вроде понятны, поскольку есть три шестиугольника, которые можно интерпретировать как точки на трёх окружностях, но и с ними не всё до конца ясно - под ограничение попадают все диаметры трёх "окружностей" (шестиугольников) или именно три каких-то конкретных?Между кружками наружной окружности есть внешние дуги, которые являются частью 6-ти окружностей.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764487
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T, вот это сильно может сократить перебор
сумма на диагонали D не равна сумме на периметре S, как выше показал (это видимо условие задачи всё же)
Нет, тут я должен все варианты в диаметре перебрать


kealon(Ruslan)3D = 2S + 3C
3S + C + X = 210

где X- выпавший, C- центровой

2S + 3C = 3D
3S + C + X = 210

6S + 9C = 9D
6S + 2C + 2X = 420

7C - 2X = 9D - 60 * 7

9D + 2X = 7(60 + C)

9(D - 46) + 2(X-3) = 7C

может ещё какое уравнение можно найти
S это периметр, а D - диаметр (диагональ) ? Если так, то они равны по условию.
Тогда отсюда 6S + 9C = 9D получаем
9C = 3D или D = 3C

9(3C - 46) + 2(X-3) = 7C
27C - 414 + 2X - 6 = 7C
2X = 420 - 20C
X = 210 - 10C

Если так, то С это 19 или 20, т.к. только при них X в нужном диапазоне (10 или 20).
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764494
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TX = 210 - 10CВ принципе совпало:Gennadiy UsovМожно по формулам.
а - выкидываем,
в - в центре

(210 - а - в) / 3 = ( 210 - а + 2 х в) / 4

или

210 = а + 10 х в
Dima TЕсли так, то С это 19 или 20, т.к. только при них X в нужном диапазоне (10 или 20).И здесь совпало:Gennadiy UsovА именно:
1)выкидываем 10, в центре 20, сумма круга (диаметра) 60
2)выкидываем 20, в центре 19, сумма круга (диаметра) 57.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764495
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для быстрого старта я - пас.

Концептуально - это должна быть структура данных типа графа. На основании
которой мы можем сгенерировать код решающий систему уравнений.

Ну... как-то так.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764501
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил фильтр
Код: sql
1.
2.
	if (n1 != 19 && n1 != 20) return; // В центре 19 или 20
	if (sum != 57 && sum != 60) return; // Сумма 57 или 60


Осталось 3806 комбинаций вместо 41796 21793500

Общее количество для окончательного перебора от 13`153`536 до 315`684`864 комбинаций.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764505
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДля быстрого старта я - пас.

Концептуально - это должна быть структура данных типа графа. На основании
которой мы можем сгенерировать код решающий систему уравнений.

Ну... как-то так.Скорее тут будет метод поиска с возвратом:
ищем, суммируем, подходит или не подходит, если нет, то возвращаемся...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764529
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TS это периметр, а D - диаметр (диагональ) ? Если так, то они равны по условию.
Тогда отсюда 6S + 9C = 9D получаем
9C = 3D или D = 3C

9(3C - 46) + 2(X-3) = 7C
27C - 414 + 2X - 6 = 7C
2X = 420 - 20C
X = 210 - 10C

Если так, то С это 19 или 20, т.к. только при них X в нужном диапазоне (10 или 20).тогда я не могу найти где ошибка в логике 21793256
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764541
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Х = 10 | 20
соответственно
S = 60 | 57
С = 30 | 29 ??????????????????? что нереально
блин

С = 20|19
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764570
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonДля быстрого старта я - пас.

Концептуально - это должна быть структура данных типа графа. На основании
которой мы можем сгенерировать код решающий систему уравнений.

Ну... как-то так.Скорее тут будет метод поиска с возвратом:
ищем, суммируем, подходит или не подходит, если нет, то возвращаемся...
Я не про это. Я знаю как решать эту задачу.
Я не знаю как описать входные данные красиво.

Представте что завтра граф будет другой. С большим числом вершин и другими условиями.
Сколько кода вам надо будет сломать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764576
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

по идее оно произведением матрицы на столбец описывается

вот только уравнений 12, а неизвестных 17
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764578
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

а неизвестных 18
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764589
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)mayton,

а неизвестных 18
Нет, 17.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764591
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наш красавчик уже отметился и здесь https://toster.ru/q/597751

Странно что на сайберфорум перестали копи-пастить.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764593
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНаш красавчик уже отметился и здесь https://toster.ru/q/597751
Ему там 17! предложили перебрать
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764595
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это прозвучало как - "Пилите Шура, пилите...."

Нет ничего дурнее чем генерация перестановок.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764596
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто мне может пояснить - где авторы задания предполагают наличие 9 окружностей?
Я вижу только три (ну и еще одно без кружков)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисКто мне может пояснить - где авторы задания предполагают наличие 9 окружностей?
Я вижу только три (ну и еще одно без кружков)
Помнишь задачу где из спичек выложена фигура. И предлагается посчитать сколько в ней треугольников.

Вот это оно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764598
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисКто мне может пояснить - где авторы задания предполагают наличие 9 окружностей?
Я вижу только три (ну и еще одно без кружков)
Смотри внимательнее и учти что фото немного под наклоном, поэтому круги немного овальные. Направляющие линии видно, 6 кругов по 6, не считая 3-х вокруг центра.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764600
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо жирым маркером навести круги. Мне тоже сначала неочевидно было.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764602
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСмотри внимательнее и учти что фото немного под наклоном, поэтому круги немного овальные. Направляющие линии видно, 6 кругов по 6, не считая 3-х вокруг центра. Да уж как только не смотрел.
Вокруг центра - ясно. Если пронумеровать точки слева направо, сверху вниз - какие номера образуют 6 оставшихся кругов (хотя бы один из них чтобы логику понять)?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764617
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, узрел.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764635
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TСоколинский БорисКто мне может пояснить - где авторы задания предполагают наличие 9 окружностей?
Я вижу только три (ну и еще одно без кружков)
Смотри внимательнее и учти что фото немного под наклоном, поэтому круги немного овальные. Направляющие линии видно, 6 кругов по 6, не считая 3-х вокруг центра.А в этих 6 кругах есть центральный кружочек?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764636
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумма = 69, в центре - 13, нет 3.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764637
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕму там 17! предложили перебрать Используйте способ, к-рый я предлагал, когда перестановки с ограничениями.
Чтобы не корячить бэктрекинг с нуля, используем стандартный
next_permutation(), а его оборачиваем в ступенчатую послед-сть предварительных циклов FOR(). Назовём это Каскадированным полубэктрекингом.

Направление с наружи - во внутрь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
2-ной цикл for() {
  CheckPermutation();
  4-ной for() {
    CheckPermutation();
    8-ной for()
       CheckPermutation();
       сколько осталось for() {
           СклеитьВсеЧасти();
           next_permutation();
           CheckPermutation();
           fprintf();
       }
    }
  }
}
end.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764638
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисСумма = 69, в центре - 13, нет 3.
Почему? Выше двумя разными путями пришли к тому что Сумма 57 или 60. В центре 19 или 20. Нет 10 или 20.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764642
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСоколинский БорисСумма = 69, в центре - 13, нет 3.
Почему? Выше двумя разными путями пришли к тому что Сумма 57 или 60. В центре 19 или 20. Нет 10 или 20. Я ошибся, пардон.
Лень латех вставлять, надеюсь и так будет понятно.

1. Суммируем числа по диагоналям и вычитаем внешнюю и внутреннюю окружность.
Получаем 3С=S, где С - число в центре. Замечаем, что сумма должна быть кратна 3.

2. Суммируем все эксцентричные окружности (6S). Добавляем удвоенное центральное и удвоенное отсутствующее - получаем удвоенную сумму всех чисел от 1 до 20
6S+2C+2X=420 или
3S+C+X=210.
Подставляя С=S/3 (1) получаем

X=210-10/3*S=10*(21-S/3).
Т.е отсутствует либо 10, либо 20.
Если отсутствует 10, то S=63 и первое условие не выполняется.
Значит нет 20, в центре 19, сумма=57.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисЕсли отсутствует 10, то S=63 и первое условие не выполняется.
Откуда 63? S=3С=60. Условие выполняется.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764645
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tkealon(Ruslan)mayton,
а неизвестных 18Нет, 17.Странно...

У нас известны 5 чисел (2 варианта) и неизвестны 15 чисел.
Следовательно, должно быть 15 неизвестных.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764646
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСоколинский БорисЕсли отсутствует 10, то S=63 и первое условие не выполняется.
Откуда 63? S=3С=60. Условие выполняется. Блин, точно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764648
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovСкорее тут будет метод поиска с возвратом:
ищем, суммируем, подходит или не подходит, если нет, то возвращаемся...Я не про это. Я знаю как решать эту задачу.
Я не знаю как описать входные данные красиво.

Представте что завтра граф будет другой. С большим числом вершин и другими условиями.
Сколько кода вам надо будет сломать?Красиво - это когда на все случаи (либо на несколько случаев).

А у нас могут быть разные круги, разные диагонали (многие красиво разрисовывают новые задачки),
в разных точках известные числа...

А здесь задачу надо решать (если решать) как она есть, в лоб.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764649
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovDima Tпропущено...
Нет, 17.Странно...

У нас известны 5 чисел (2 варианта) и неизвестны 15 чисел.
Следовательно, должно быть 15 неизвестных.
Известно 3 из 20. Из оставшихся 17 надо 16 вписать и одно лишнее.
То что 2 из неизвестных ограничены 2-мя вариантами не делает их известными.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764651
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)mayton,

а неизвестных 18
Нет, 17.
13 уравнений: 9 кругов, 3 диагонали, 1 уравнение баланса
18 неизвестных: x1..x17 и S

то что мы нашли "частными измышлениями" это тоже неизвестные
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764652
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с какой вершины начать backtracking?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764653
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

да по сути без разницы, но можно начать с той у которой уже есть варианты
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764654
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритм решения найден, дальше неинтересно. Пусть ТС дорешает.

Я про другое подумал: про тот мозг, который эту задачу придумал. Надо взять 20! комбинаций и найти среди них позиции 3-х чисел чтобы в итоге было однозначное решение.

PS Кто не в теме 20! это 20 лет перебора при проверке одного набора за один такт проца 4 ГГц.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764656
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

тут что-то хитрее, не думаю что перебором придумали
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764657
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)mayton,

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

там где "Двадцатое лишнее" надо добавить "х17"
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764659
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

пардонс
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764660
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764661
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TАлгоритм решения найден, дальше неинтересно. Пусть ТС дорешает.

Я про другое подумал: про тот мозг, который эту задачу придумал. Надо взять 20! комбинаций и найти среди них позиции 3-х чисел чтобы в итоге было однозначное решение.

PS Кто не в теме 20! это 20 лет перебора при проверке одного набора за один такт проца 4 ГГц.В соообщении 21793555 указывается последовательность действий при решении в лоб.

Не думаю, что здесь будет 20! Будет значительно меньше.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764665
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлгоритм решения найден, дальше неинтересно. Пусть ТС дорешает.

Я про другое подумал: про тот мозг, который эту задачу придумал. Надо взять 20! комбинаций и найти среди них позиции 3-х чисел чтобы в итоге было однозначное решение.

PS Кто не в теме 20! это 20 лет перебора при проверке одного набора за один такт проца 4 ГГц.
Этот мозг знал что перебором эту задачу никто не решит. Но если мы вспомним что бектрекинг
не даёт нам дойти до заведомо фейловой ветки дерева то эта оценка очень резко уменьшается.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764668
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Консультанты toster.ru так ничего нового и не выдали.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764678
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovНе думаю, что здесь будет 20! Будет значительно меньше.Ну вот расскажите как здесь использовать, что "есть предел насыщения", кроме как помнить об этом? Начальную расстановку из 3-х штук уже имеем.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы ввел понятие веса окружностей и диагоналей.

Вес - как инвариант этой задачи.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764707
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://jsbin.com/wojuvex/edit?js,output
так ковырять нагляднее.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764708
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом окажется, что это задачка для 3го класса...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764728
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TАлгоритм решения найден, дальше неинтересно. Пусть ТС дорешает.

Я про другое подумал: про тот мозг, который эту задачу придумал. Надо взять 20! комбинаций и найти среди них позиции 3-х чисел чтобы в итоге было однозначное решение.

PS Кто не в теме 20! это 20 лет перебора при проверке одного набора за один такт проца 4 ГГц.

значит, этот мозг перебирал среди решений, которых гораздо меньше )
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764756
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),

Спасибо за картинку!

Сразу что-то стало получаться.

А теперь поработаем с уравнениями

Пусть сумма будет К.

Тогда из средней окружности:
х8+х10+х9+х11=К-24
из внутренних окружностей:
х8+х10=К-х13-х4-х7-12
х9-х11=К-х12-х6-х3-12

если подставить в первое уравнение, то получаем:

2хК-х13-х6-х3-х12-х4-х7-24=К-24
Или
К=х12+х6+х3+х12+х4+х7

Из диагоналей – первые три из одной и вторые три из другой. Подставляем:
К=К-х16-х1+К-х14-х1
Или х14+х16=К-2*х1 (умножить)

Если 60 и 20, то х14+х16= 20
Если 57 и 19, то х14+х16= 19

Далее, в таком же виде: окружность, диагональ , окружность, или наоборот...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764802
Форум программистов разбирает легенькую задачку для олимпиады средних класоов )))

Комбинаторику сюда прикрутили
Зачем вообще считать кол-во итеракций при решении перебором
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764805
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Митя_НиточкинКомбинаторику сюда прикрутили
Зачем вообще считать кол-во итеракций при решении переборомколичество вариантов нужно для оценки возможности расчёта такой задачи, одно дело 1000 вариантов перебрать, 20! - совсем другое
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764809
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13 уравнений с 18 неизвестными сводится к диафантовому уравнению с 6 неизвестными

а это 17!/(17-6)! вариантов
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764812
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Далее:
Смотрим на внутренние окружности через х15 и х16, а также через х15 и х14.
Складываем, получаем (с учетом х14+х16=20):
2*15+20=2*К-24-х11-х10-х7-х3-х4-х6

Последние 4 слагаемых за счёт внутренней окружности и горизонтального диаметра переводим в:
х11+х10=2*К-36-х1-3*х15-20

Теперь смотрим на внутренние окружности, проходящие через х13 и х14 и через х12 х х16 и складываем:
К-х15-12=2*К-24-х8-х9-х2-х5

Последние 2 слагаемые – К-х1-12-х15

Получаем
Х8+х9=2*х15-12+х1-12

Теперь складываем х8,х9,х10,х11, и с учетом средной окружности получаем:

Х15=К-56

Если 60 и 20, то х15= 4
Если 57 и 19, то х15= 1
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764814
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Митя_Ниточкин, ты ее уже решил?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764846
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Далее можно определить суммы пар:
х2 и х5, х13 и х14, х9 и х6, х10 и х11.

То есть определены одно число и 5 пар чисел.
Осталась четверка чисел.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764847
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка:
х9 и х8
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764848
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тороплюсь:
х12 и13
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764849
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот интересный вопрос возникает

Если у нас есть несколько множеств чисел, например x1 =[1..3], x2 =[2...7, 19], x3 =[1..10], x4 =[12..15], ...

Есть ли алгоритм позволяющий эффективно получить всё множество сумм который могут получиться при комбинации (X1 + X2 + X3 + X4 + ...) элементов из этих множеств? При ограничении что число может входить в сумму только 1 раз

эффективно значит "не за NP время" как при наивной реализации
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764858
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот думаю о том что если хранить сумму оставшихся чисел из пул доступных.
То можно эффективно прерывать backtracking если мы точно знаем что у данной
окружности или диаметра уже недостаточно массы.

Тоже самое. Докидывать нужные гирьки в те окружности и диаметры где веса не хватает.
По сути балансировать центр масс всей этой конструкции.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764899
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ вот думаю о том что если хранить сумму оставшихся чисел из пул доступных.
То можно эффективно прерывать backtracking если мы точно знаем что у данной
окружности или диаметра уже недостаточно массы.

Тоже самое. Докидывать нужные гирьки в те окружности и диаметры где веса не хватает.
По сути балансировать центр масс всей этой конструкции.
Не, это лишнее. Я новый способ заполнения придумал.

Нам известно:
ПараметрЗначениеЗначениеЦентр1920Сумма5760Пропущено2010

Центр, сумму и пропущенное берем из таблицы. Начинаем заполнять круги от центра, проверяя сумму каждого круга по заполнению. В этом случае к заполнению второго круга не перейдем, если по первому сумма не верна. Третий можно даже не проверять, т.к. если сумма первого и второго верны, то он тоже верен.
В итоге находим потенциальные решения.
Дальше доперебор каждого потенциального решения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764928
сумма не может быть нечетна
к 4 странице пора бы это понять
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764932
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНам известно:
ПараметрЗначениеЗначениеЦентр1920Сумма5760Пропущено2010

Мне кажется, на эту дилемму должен найтись однозначный ответ путем исследования четности/нечетности.
В любом случае исключаемое число - четное, т.е. остается всего 9, 3 из них уже выставлены.
Знак суммы такой же как знак центра, поэтому сумма диагональных элементов без середины всегда четная. Т.е. еще как минимум одно четное обязательно должно быть на средней линии (5 осталось). Если в центре четное (4), то сумма тоже четная, значит еще два четных должны быть на эксцентриках левой точки (2 осталось).
Одно четное еще нужно на внешней окружности, но оно может быть совмещено с крайней правой (диагональю).
Дальше пока неясно.



Дальше пока не наметил.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764942
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Митя_Ниточкинсумма не может быть нечетна
к 4 странице пора бы это понять
Почему? Если это доказано, то ответ - пропущено число 10. Или задача не имеет решения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764947
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читерные пятнашки переставляй любое число с любым. Стратегия берем число больше всего влияющие на увлечение средней суммы своих множеств и меняем его с ближайшим по значению если это не увеличит разницу средних значений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764953
Митя_Ниточкин, раз для вас это такая лёгкая задача, на которую не стоит использовать компьютер, попробуйте её решить, но боюсь, что будет слишком сложно. Тогда и можно и использовать ресурсы ЭВМ
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764959
Спасибо всем, очень облегчели работу. Но вот для себя, чтобы потом просто так не обращаться, как эту задачу можно без компьютера решить - без подбора. Ведь такая возможность безусловно есть, на мой взгляд
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764966
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий СмерксСпасибо всем, очень облегчели работу. Но вот для себя, чтобы потом просто так не обращаться, как эту задачу можно без компьютера решить - без подбора. Ведь такая возможность безусловно есть, на мой взглядскорее всего задача первоначально звуча в виде "какое число лишнее?"

для математики это было бы характерно, задача по информатике?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39764977
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейЧитерные пятнашки переставляй любое число с любым. Стратегия берем число больше всего влияющие на увлечение средней суммы своих множеств и меняем его с ближайшим по значению если это не увеличит разницу средних значений.
Эта стратегия начинает работать когда у вас уже есть первое приближение.

Допустим вы бросили 1..20 кроме случайного случайным образом на доску.

Какие два следующих вы поменяете?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765001
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В самом начале заполняются вакантные места от большего числа к меньшему. Т.е. самое большое число в найденную вакантную точку которая изменит как можно больше множеств с минимальной суммой в сторону увеличения и получаем неплохое начальное распределение. При заполнении всех вакантных точек пробуем переставлять. Алгоритм заведомо не оптимален но работает почти моментально.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765027
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чем больше смотрю на эту задачу тем больше убеждаюсь что у нее нет аналитического решения.
А все наши прогнозы - просто маленькие предсказания на тему как уйти от факториала.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765041
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЯ чем больше смотрю на эту задачу тем больше убеждаюсь что у нее нет аналитического решения.
А все наши прогнозы - просто маленькие предсказания на тему как уйти от факториала.Предпочитаете не замечать аналитику 21794052 и 21793947 ?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765050
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил. Исходник и ответВыкинуть надо число 10

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) {
																	count++;
																	// Тут можно вывести правильное решение
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}


Результат:
Код: plaintext
1.
count 0
count 16

Кому надо 16 правильных расстановок - я пометил место где их выводить.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765052
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Решил. Исходник и ответВыкинуть надо число 10

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) {
																	count++;
																	// Тут можно вывести правильное решение
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}


Результат:
Код: plaintext
1.
count 0
count 16

Кому надо 16 правильных расстановок - я пометил место где их выводить.
1) А ответов нет. Трудно их показать?

2) Почему только 10? Причина.

3) Полный перебор не интересно. Компьютер помогает.
Лучше пошагово, аналитически, так как сам мыслишь.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765059
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)13 уравнений с 18 неизвестными сводится к диафантовому уравнению с 6 неизвестными

а это 17!/(17-6)! вариантов
Вообще я в прошлый раз поторопился. Здесь система линейных неравенств. В смысле помимо уравнений присутствуют ограничения вида Хn>0 && Xn<21. Плюс "диофантовость", то есть ограничение на решение в целых числах. А количество неизвестных зависит ещё и от количества сумм, то есть если наконец определиться, что считать суммой - три круга и девять диаметров или девять кргуов и три диаметра - тогда (для первого случая) добавляются три неизвестных суммы для кругов и условие вхождения меньших диаметров в большие (то есть дополнительные уравнения).

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

Но я чувствую, народ мотивирован и найдёт эвристическое решение без перебора и уравнений, поэтому общий подход уже не столь интересен...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765062
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555,

21793795

kealon(Ruslan)13 уравнений: 9 кругов, 3 диагонали, 1 уравнение баланса
18 неизвестных: x1..x17 и S

единичность и принадлежность к диапазону я не знаю как подсчитать
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765064
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonЯ чем больше смотрю на эту задачу тем больше убеждаюсь что у нее нет аналитического решения.
А все наши прогнозы - просто маленькие предсказания на тему как уйти от факториала.Предпочитаете не замечать аналитику 21794052 и 21793947 ?
Аналитического решения не существует для комбинаторных задач в общем понимании
этого слова. Сюда же 1000 ферзей.

Но создатели упростили нам это введя пограничные условия. 3 константы. И 1 исключение из списка целых.

Что вы будете делать если пограничных условий не будет?

Я в скобках напомню что мы находимся в форуме посвященном программированию и 99% респондентов
заинтересованы программировать задачу а не решать ее в уме.

Таковы реалии.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765080
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovПредпочитаете не замечать аналитику 21794052 и 21793947 ?
Аналитического решения не существует для комбинаторных задач в общем понимании
этого слова. Сюда же 1000 ферзей.

Но создатели упростили нам это введя пограничные условия. 3 константы. И 1 исключение из списка целых.

Что вы будете делать если пограничных условий не будет?

Я в скобках напомню что мы находимся в форуме посвященном программированию и 99% респондентов
заинтересованы программировать задачу а не решать ее в уме.

Таковы реалии.Получается, что тупо поиск с возвратом, где перебираются все значения по всем окружностям и диагоналям.

А где ограничения, упрощения?
С целью уменьшения вариантов поиска?

Для показа этих упрощений не обязательна нужна программа.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765094
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovmaytonпропущено...

Аналитического решения не существует для комбинаторных задач в общем понимании
этого слова. Сюда же 1000 ферзей.

Но создатели упростили нам это введя пограничные условия. 3 константы. И 1 исключение из списка целых.

Что вы будете делать если пограничных условий не будет?

Я в скобках напомню что мы находимся в форуме посвященном программированию и 99% респондентов
заинтересованы программировать задачу а не решать ее в уме.

Таковы реалии.Получается, что тупо поиск с возвратом, где перебираются все значения по всем окружностям и диагоналям.

А где ограничения, упрощения?
С целью уменьшения вариантов поиска?

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

Доказательством корректнсти программы является ее работа и ее результат.

Не просмотр глазами. И не умозрительные заключения.

Если дима привел программу. И она у нас заработает. И выдаст корректный результат.

То для всех присутствующих будет очевидно что она верна. Тот кто считает что она
не верна должен будет доказать обратное.

Чтобы проверить правильность формул. Необходимо всех присутствующих провести
через ДОКАЗАТЕЛЬСТВО этих формул.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу упрощений. Просмотрите код Димы и внесите свои предложения по упрощениями.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765116
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради интереса забил задачу в Excel для проверки Solver-а. Он не оправдал оказанного ему высокого доверия, заклинило на нерешенном состоянии.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как современный Excel работает? Интерпретатор байткода?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765119
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Там три алгоритма зашито. В нашем случае номинально только эволюционный подходит.
Я его раньше тестировал на одной олимпиадной задаче, справился.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел. Называется Microsoft P-Code

https://en.wikipedia.org/wiki/Microsoft_P-Code
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765135
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я подумал некрасиво без заполнения клеток, могут не поверить, поэтому все 16 вариантов.
x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16x1720234171915811161145791310202315171948111611457913102021941731581116114579131020219151734811161145791310204321519178111611457913102043171519281116114579131020419215317811161145791310204191715328111611457913102015324191781116114579131020153174192811161145791310201519243178111611457913102015191743281116114579131020173421915811161145791310201731521948111611457913102017194231581116114579131020171915234811161145791310
Расположение переменных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765141
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима. А ты мог-бы выложить трассу для одного ответа где
видно как меняется масса окружностей и диаметров?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765184
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

занятно, вариативны только 6 переменных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765187
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Ценное замечание. Меняются только цифры внутреннего круга.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765195
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как оказалось, уравнения не проходят - одни тождества.

Следовательно - поиск с возвратом.

Исходные данные – два варианта для х17 и х1, известны 3 числа, сумма чисел для 9 последовательностей (окружности и диагонали)
То есть, известны 5 чисел из 20 чисел.
Осталось найти 15 чисел

Шаг 1. цикл по х2 и х5 (из 15 и 14 чисел - отобрано 7 чисел) – определяем х15 (не равно 7 числам)
всего 8 чисел (1-я диагональ)

Шаг 2. цикл по х12 и х16 (из 13 и 12 чисел - отобрано 10 чисел) - определяем х8 (не равно 10 числам)
всего 11 чисел(1-я внутренняя окружность)

Шаг 3. цикл по х13 (из 9 чисел - отобрано 12 чисел) – определяем х14 (не равно 12 числам)
всего 13 чисел (большая окружность)

Шаг 4. - определяем х9 (не равно 13 числам)
всего 14 чисел (2-я внутренняя окружность)

Шаг 5. цикл по х10 (из 6 чисел - отобрано 15 чисел) - определяем х11(не равно 15 числам)
всего 16 чисел.

Шаг 6. Далее проверки:
- сумма х3 и х6 сравниваем с (2-я диагональ) (2-я внутренняя окружность) (4-я внутренняя окружность)
- сумма х4 и х7 сравниваем с (3-я диагональ) (5-я внутренняя окружность) (6-я внутренняя окружность)
- суммы х3,х4,х6,х7 сравниваем с (внутренняя окружность)

Шаг 7. цикл по х7 (из 4 чисел - отобрано 17 чисел) – определяем х4 ( не равно 17 числам)
всего 18 чисел.

Шаг 8. цикл по х3 (из 2 чисел - отобрано 19 чисел) – определяем х5 ( равно последнему свободному числу)

Если при работе цикла не определяются свободные числа, то возврат на предыдущий шаг.

Можно усложнить алгоритм, когда ничего не известно
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765200
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл указать в исходных данных, что имеем 20 чисел от 1 до 20.

Тут следует вспомнить следующее сообщение:maytonGennadiy UsovСкорее тут будет метод поиска с возвратом:
ищем, суммируем, подходит или не подходит, если нет, то возвращаемся...Я не про это. Я знаю как решать эту задачу.
Я не знаю как описать входные данные красиво.

Представте что завтра граф будет другой. С большим числом вершин и другими условиями.
Сколько кода вам надо будет сломать?А если доработать схему по-шаговых действий 21794700 для случая, когда ничего не известно.

1) Вместо известных значений вводим переменные: х18(6), х19(12), х20(8).
И в тех объектах (окружность, диагональ), где эти переменные впервые появляются, добавляется цикл по этим переменным, аналогично остальным переменным.

2) Имеем массив произвольных 20 чисел. Определяем их сумму К.
Каждой переменной х... ставится в соответствие определенный элемент массива.

3) Строим внешний цикл по переменным х1 и х17, причем есть ограничение:
величина (К + х1 - х17) должна делиться на 3.
Тогда К1 = (К - х1 - х17)/3 будет являться суммой чисел в каждом объекте (окружность, диагональ).

А если совсем углубиться (ударение на втором у), то можно ещё ввести соотношения между объектами (окружность, диагональ).

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

Так что, вариантов обобщения и углубления много.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДима. А ты мог-бы выложить трассу для одного ответа где
видно как меняется масса окружностей и диаметров?
Это обычный перебор, пропускаются варианты с неправильной суммой. Т.е. Наполнили средний круг, сумма не совпала, следующий средний, совпала, наполнили внешний круг, сумма не совпала следующий внешний и т.д.

Вот тот же исходник с выводом значения узлов. Его результат скопипастил сюда 21794557
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) {
																	count++;
																	printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", *x1, *x2, *x3, *x4, *x5, *x6, *x7, *x8, *x9, *x10, *x11, *x12, *x13, *x14, *x15, *x16, lost);
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}

...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765234
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ещё упростить схему алгоритма, при этом убираем один цикл

Исходные данные – два варианта для х17 и х1, известны 3 числа, сумма чисел для 9 последовательностей (окружности и диагонали)
То есть, известны 5 чисел из 20 чисел.
Осталось найти 15 чисел

Для начала введем 3 переменные:
а1 = х2 + х5
а2 = х3 + х6
а3 = х4 + х7

Шаг 1. цикл по х15 (из 15 чисел - отобрано 6 чисел) – определяем а1
всего 6 чисел (1-я диагональ)

Шаг 2. цикл по х12 и х16 (из 14 и 13 чисел - отобрано 8 чисел) - определяем х8 (не равно 8 числам)
всего 9 чисел(1-я внутренняя окружность)

Далее из (большая окружность) и из (внутренняя окружность) – определяем х9 (не равно 9 числам).
Всего 10 чисел.

Шаг 3. цикл по х10 (из 10 чисел - отобрано 11 чисел) - определяем х11(не равно 11 числам)
всего 12 чисел. (средняя окружность).

Далее определяем: а2, а3, х13, х14,

Шаг 4. Цикл по х2 в а1- определяем х5
Шаг 5. Цикл по х3 в а2 – определяем х6
Шаг 6. Цикл по х4 в а3 – определяем х7

Если при работе цикла не определяются свободные числа, то возврат на предыдущий шаг.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765238
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм. Ценное замечание. Меняются только цифры внутреннего круга. По-моему, так быть не может, где-то ошибка при проверке условия - у двух триплетов сумма любой пары должна быть одинаковой. 6 условий и 6 переменных - единственное решение.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765269
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonДима. А ты мог-бы выложить трассу для одного ответа где
видно как меняется масса окружностей и диаметров?
Это обычный перебор, пропускаются варианты с неправильной суммой. Т.е. Наполнили средний круг, сумма не совпала, следующий средний, совпала, наполнили внешний круг, сумма не совпала следующий внешний и т.д.

Вот тот же исходник с выводом значения узлов. Его результат скопипастил сюда 21794557
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) {
																	count++;
																	printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", *x1, *x2, *x3, *x4, *x5, *x6, *x7, *x8, *x9, *x10, *x11, *x12, *x13, *x14, *x15, *x16, lost);
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}


Ты уже опубликовал это где-то в гитхабе? Я хотел сделать несколько changes.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765324
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДоказательством корректнсти программы является ее работа и ее результат.
Но программисты же получают не просто результат, а оптимальный результат. Так вот по оптимальности решения полным перебором возможны большие вопросы.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765331
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы уже опубликовал это где-то в гитхабе? Я хотел сделать несколько changes.
Залил. Экспериментируй
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765337
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovА если совсем углубиться (ударение на втором у), то можно ещё ввести соотношения между объектами (окружность, диагональ).

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

Так что, вариантов обобщения и углубления много.
Я именно про это и говорю. Есть граф. У него есть подграфы. Есть вершины с весами.
Часть вершин - предопределены. Часть - неизвестны. Подграфы связаны констрейнтами.
Например - где-то масса подграфа должна быть константой. (К началу задачи еще и эта
константа - неизвестна). Имеется также порождающий генератор (или набор генераторов)
которые выдают на выходе поток чисел которыми надо заполнять вершины.
Имеется цель - заполнить все вершины значениями из генератора при условии
выполнения всех кострейнтов.

И я имел в виду именно такую постановку.

Дано: G - множество графов. V - множество вершин. E - множество ребер.
Vс - подмножество вершин с весами. A - порождающий алгоритм(ы) заполнения
вершин. С - множество констрейнтов (ограничений) на множество графов.


И на меньшее я в топике не соглашусь.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765341
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ещё один цикл убирать. Получаем:

Шаг 1. цикл по х15 - определяем а1

Шаг 2. циклs по х12 и х16
Здесь определяем в следующей последовательности: х14 (х14 + х16 = 20 или 19)( 21793947 ),
х13, а2, а3, х8, х9, х10, х11.

Далее
- есть две внутренние окружности, где можно проверить соотношение: х12, х13, а2, а3, х8, х9, х10, х11.
- есть средняя окружность, где можно проверить соотношение х8, х9, х10, х11

Шаг 3. Цикл по х2 в а1 - определяем х5

Шаг 4. Цикл по х3 в а2 – определяем х6

Шаг 5. Цикл по х4 в а3 – определяем х7

Всего 6 циклов.
3 основных и 3 вспомогательных (попарные перестановки 6 чисел)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765342
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovА если совсем углубиться (ударение на втором у), то можно ещё ввести соотношения между объектами (окружность, диагональ).
А если и ...., то можно вообще рисовать произвольные картинки, только успевай выстраивать новые схемы, которые будут похожи на 21794700 Так что, вариантов обобщения и углубления много.
Я именно про это и говорю. Есть граф. У него есть подграфы. Есть вершины с весами.
Часть вершин - предопределены. Часть - неизвестны. Подграфы связаны констрейнтами.
Например - где-то масса подграфа должна быть константой. (К началу задачи еще и эта
константа - неизвестна). Имеется также порождающий генератор (или набор генераторов)
которые выдают на выходе поток чисел которыми надо заполнять вершины.
Имеется цель - заполнить все вершины значениями из генератора при условии
выполнения всех кострейнтов.

И я имел в виду именно такую постановку.

Дано: G - множество графов. V - множество вершин. E - множество ребер.
Vс - подмножество вершин с весами. A - порождающий алгоритм(ы) заполнения
вершин. С - множество констрейнтов (ограничений) на множество графов.


И на меньшее я в топике не соглашусь.И что этому мешает?

Надо с чего-то начать...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765346
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С языка описания. Описать граф. Потом по этому описанию сгенерировать алгоритм.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765347
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555maytonДоказательством корректнсти программы является ее работа и ее результат.
Но программисты же получают не просто результат, а оптимальный результат. Так вот по оптимальности решения полным перебором возможны большие вопросы.
А где вы увидели полный перебор?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765348
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonС языка описания. Описать граф. Потом по этому описанию сгенерировать алгоритм.Для этого нужен новый топик или достаточно существующего?
Будем использовать опыт этого топика?

Жду начала описания.

Далее - развитие этого описания.

Или сначала для тренировки обобщим имеющуюся задачку? 21794705
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765350
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам очень надо новый топик?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765351
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВам очень надо новый топик?Можно и в существующем.

Я имею в виду название топика, если оно соответствует новой проблеме.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765353
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет никакой проблемы. Есть "игры разума". И мы в них играем. Просто я говорю что в этих играх я бы не стал
кодить конкретно данную задачу. Она мне неинтересна. Но мне интересны различные обобщения.

Кроме того в каждом топике у меня есть скрытый интерес. Например здесь скрытый интерес - графы и Resouce Definition
Language.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765372
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сообщение 21794898 можно немножко поправить:

Шаг 1. цикл по х15 - определяем а1

Шаг 2. цикл по х16 - определяем х14 (х14 + х16 = 20 или 19)( 21793947),

Шаг 3. цикл по х12
Здесь определяем в следующей последовательности: х13, а2, а3, х8, х9, х10, х11.

Далее
- есть две внутренние окружности (которые ранее не "использовались"), где можно проверить соотношение: х12, х13, а2, а3, х8, х9, х10, х11.
- есть средняя окружность (ранее не "использовалась"), где можно проверить соотношение х8, х9, х10, х11

Шаг 4. Цикл по х2 - определяем х5 из а1

Шаг 5. Цикл по х3 – определяем х6 из а2

Шаг 6. Цикл по х4 – определяем х7 из а3

Всего 6 циклов.
3 основных и 3 вспомогательных (попарные перестановки 6 чисел)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765381
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь попробуем разобраться с а1, а2, и а3, для которых имеем 6 "свободных" чисел (если есть такое решение).

Допустим, для каждого а1,а2,а3 получаем только одну пару чисел - один вариант разбивки чисел для а1, а2, а3.

Тогда для а1 имеем 2 варианта решения,
для а1 и а2 имеем 4 варианта решения,
для а1, а2 и а3 имеем 8 вариантов решений.

Если взглянуть на решения 21794557 , то получается, что
- имеется одно решение для х1, х8, х9, ...., х17,
- имеется два варианта разбивки 6 чисел для а1, а2, а3.

То есть, всего 16 решений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765387
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonТы уже опубликовал это где-то в гитхабе? Я хотел сделать несколько changes.
Залил. Экспериментируй
Я пока в коде ничего не менял. Просто посмотрел под Valgrind/Callgrind.
Из за того что основное тело алгоритма представляет собой колбасу без вызвов подпрограмм
то callgrind не разбивает репорт в разрезе каждой функции.

Грубо говоря в отчоте callgrind видно 85 вызовов буст-овского nextpermutation. А это неинтересно
с точки зрения анализа реализации

Если ее зарефакторить так чтобы каждый цикл был функцией тогда калгринд дал-бы более материальный отчот.

Конечно это можно все эмулировать счетчиками и логгированием но как-то хотелось доверять технологии.

Trust to technology bro... :)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765388
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
85 миллионов вызовов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765390
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картинка с профилированием.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765391
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупый codeblocks. Где в нём рефакторинг? Где extract procedure...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765392
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gennadiy UsovЕсли взглянуть на решения 21794557 , то получается, что
- имеется одно решение для х1, х8, х9, ...., х17,
- имеется два варианта разбивки 6 чисел для а1, а2, а3.

То есть, всего 16 решений.Только сейчас до меня дошло, что только одно основное решение!

Раньше у нас было 12 уравнений и 15 неизвестных.

Если вводятся а1, а2 и а3 вместо х2, х3, х4, х5, х6, х7, то имеем:

12 уравнений и 12 неизвестных

1 решение!!!


Завтра попробую расписать формулы.

А кто-то поторопился написать программу.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае отчот Димы содержит некорректные расстановки.
Можете их указать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765403
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарефакторил один внутренний цикл. Пока не сильно помогает понять картину вызвов. К компилляции
добавил опцию -pg. Теперь можно смотреть gprof. Пока такая картинка.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ns/call  ns/call  name    
 78.30      1.04     1.04 183968784     5.66     5.66  frame_dummy
 21.08      1.32     0.28                             start(int, int, int)
  0.75      1.33     0.01   416256    24.05   159.90  loop1(int, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int, int*)
  0.00      1.33     0.00    50778     0.00     0.00  next_combination(unsigned long*, unsigned long, unsigned long)
  0.00      1.33     0.00     2103     0.00     0.00  copy_arr(int const*, unsigned long, int*, int, int, int, int, int, int)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765428
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gennadiy UsovРаньше у нас было 12 уравнений и 15 неизвестных.
Если вводятся а1, а2 и а3 вместо х2, х3, х4, х5, х6, х7, то имеем:
12 уравнений и 12 неизвестных
1 решение!!!
Завтра попробую расписать формулы.
А кто-то поторопился написать программу. Не получилось!
Уравнения превращаются в тождества


Остаётся только все переменные выразить через х12,х15,х16

х1= К / 3
х14 = 20 – х16
Из большой окружности
х13 = К – 32 – х15 – х12
Из диагоналей:
а1 = К – х15 – 12 – х1
а2 = 32 + х15 + х12 – х16 – х1
а3 = К – х1 – 20 + х16 – х12

Далее проверка – малая окружность.

Аналогично находим х8,х9,х19,х11 из внутренних окружностей, где они встречаются по одному.
далее проверка, где они по два,
далее проверка на средней окружности.maytonВ таком случае отчот Димы содержит некорректные расстановки.
Можете их указать?Указать не могу. Остаётся перебор.

Просто приведенные расчеты позволяют несколько сократить количество циклов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765429
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В предыдущем сообщении получено уравнение из суммы все диагоналей:Gennadiy Usovх1= К / 3Получается, что из двух вариантов для х1 и х17
Gennadiy UsovА именно:
1)выкидываем 10, в центре 20, сумма круга (диаметра) 60
2)выкидываем 20, в центре 19, сумма круга (диаметра) 57.остаётся первый: 20 и 10.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765430
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

Залил. Экспериментируй
Я пока в коде ничего не менял. Просто посмотрел под Valgrind/Callgrind.
Из за того что основное тело алгоритма представляет собой колбасу без вызвов подпрограмм
то callgrind не разбивает репорт в разрезе каждой функции.

Грубо говоря в отчоте callgrind видно 85 вызовов буст-овского nextpermutation. А это неинтересно
с точки зрения анализа реализации

Если ее зарефакторить так чтобы каждый цикл был функцией тогда калгринд дал-бы более материальный отчот.

Конечно это можно все эмулировать счетчиками и логгированием но как-то хотелось доверять технологии.

Trust to technology bro... :)
next_combination() это сочетания, по-другому это
Код: plaintext
1.
2.
3.
4.
	size_t ic[4] = { 0, 1, 2, 3 }; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
...
	} while (next_combination(ic, 4, 15));


можно написать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
size_t ic[4];
for(ic[0] = 0; ic[0] < 15; ic[0]++) {
	for(ic[1] = ic[0] + 1; ic[1] < 15; ic[1]++) {
		for(ic[2] = ic[1] + 1; ic[2] < 15; ic[2]++) {
			for(ic[3] = ic[2] + 1; ic[3] < 15; ic[3]++) {
...
			}
		}
	}
}



std::next_permutation() это размещения. Можно так через циклы написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
size_t ic[4];
for(ic[0] = 0; ic[0] < 15; ic[0]++) {
	for(ic[1] = 0; ic[1] < 15; ic[1]++) {
		if(ic[1] == ic[0]) break;
		for(ic[2] = 0; ic[2] < 15; ic[2]++) {
			if(ic[2] == ic[0] || ic[2] == ic[1]) break;
			for(ic[3] = 0; ic[3] < 15; ic[3]++) {
				if(ic[3] == ic[0] || ic[3] == ic[1] || ic[3] == ic[0]) break;
...
			}
		}
	}
}



Если в код заглянешь - все циклы вложенные, заменив next_combination() получим 9 циклов вместо 2, заменив std::next_permutation() - 11 циклов вместо двух. Итого +16 вложенных циклов. ИМХО это будет не код, а фарш какой-то.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765438
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тебя смущает? Следуй советам Фаулера.
Делай функции как можно меньшего размера.

Его рекомендации относились ко всем языкам включая C++.

О преждевременной оптимизации не парься. О ней надо думать тогда, когда точно известен bottleneck.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765440
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gennadiy UsovОстаётся только все переменные выразить через х12,х15,х16

Из большой окружности
х13 = К – 32 – х15 – х12 Здесь можно организовать выборку сочетаний по 3 из 15 для определения х12,х15,х16.
При этом будут отсеиваться те сочетания, для которых не подходит х13.
Получаем 245 вариантов без учета отсеянных.

Если сочетания для варианта найдены, то имеем перестановки из 3-х элементов - всего 6 подвариантов для варианта.
И для каждого подварианта определяются формулы из 21795083 с проверками.
Всего 6 подвариантов для одного варианта.

И не нужны циклы по каждому неизвестному. Есть один цикл для варианта и один цикл для подварианта.

Для определения составляющих х2,х3,х4.х5,х6,х7 из оставшихся 6 чисел:

Имеем сочетания 3 из 6 для каждой пары. Всего 20 сочетаний.

И перестановки для этих пар из оставшихся 3-х чисел. Всего 6 перестановок.
Итого 120 вариантов.

Всё перемножать не следует, так как при работе с подвариантами будет очень большой отсев.
В частности, в нашей задачке останется только один вариант, один подвариант, 2 сочетания и 8 перестановок для каждого сочетания. maytonВ таком случае отчот Димы содержит некорректные расстановки.
Можете их указать?Продолжаются упрощения процесса вычислений:

1) Остаётся только 4 цикла: для варианта, для подварианта, для сочетания, для расстановки.
2) Идет работа не с объектами графа (окружности, диагонали), а с конкретными формулами вычисления неизвестных.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765442
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, все формулы по определению неизвестных можно будет "загнать" в одну процедуру, из которой может быть несколько "аварийных выходов" в случае нарушения правила "свободного" числа или в случае выхода за границу массива чисел.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765445
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто тебя смущает? Следуй советам Фаулера.
Делай функции как можно меньшего размера.
Собственно так я и сделал.

Заменил код на фарш , можешь профилировать.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это не то что я хотел
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765452
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЗаменил код на фарш , можешь профилировать. Изначальный вариант тут .Вопросы по программе:

1)Зачем сортировать массив?
Массив от 1 до 20 – либо 0 (число ещё не выбрано), либо 1 (число выбрано).
Проще сравнивать по номеру на «свободное место», и заносить новое число.

2)Тогда для 6,10,12,18,20 занести в массив 1.

3)Неудобно с переменными от 1 да 17? Так можно ввести переменные от 1 до 20 с пропусками по индексу.

Это для начала…
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765459
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Далее..

4)Есть такое:
// Заполнение среднего круга по 4 из 15

Но в среднем круге 4 неизвестных и 3 известных. Причем 4-е неизвестное можно вычислить по 3-м другим неизвестным.

Поэтому достаточно по 3 из 15. И вычисляется 4-е неизвестное (либо пропуск, если попадает на уже известное число).

5)// Заполнение внешнего круга по 5 из 11
Но теперь все неизвестные на внешнем круге вычислятся...
Зачем выборка?

6) start(19, 57, 20);
Это можно убрать, так как доказано, что х1 = sum / 3;
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765470
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА где вы увидели полный перебор?
Честно говоря, я не изучал код Димы, но вижу дискуссию, где Дима больше о переборе (ну или о практическом решении конкретной задачи), а остальные о его сокращении. Дима первым дал результат, но видимо с минимальным сокращением количества перебираемых вариантов. Это работает, но только на конкретной задаче, а стоит задачу чуть-чуть расширить - упрёмся во время вычисления. Поэтому и остаётся актуальной мысль о максимальном сокращении числа перебираемых вариантов с соответствующим предложением - не останавливаться на димином варианте.

Хотя с точки зрения практики - конкретная задача решена и можно расходиться по домам. Но сама задача же явно не практическая. А если рассматривать её как познавательно-теоретическую, то опять становится важным обобщение и нахождение способа сокращения количества вариантов перебора.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765476
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На моем слабом ноутбуке данное приложение работает несколько секунд - решение достаточное
для того чтобы вообще не заниматься оптимизиацией. А профилирование которое я хотел
посмотреть это просто шаг в сторону обобщения. Чтобы понять как просядет подобная
задача когда узлов графа станет на порядки больше.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу это не то что я хотел
Без стека вызовов не видно профилирования.

Код: sql
1.
2.
3.
4.
5.
6.
7.
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
100.10      4.10     4.10                             start(int, int, int)
  0.00      4.10     0.00     2103     0.00     0.00  copy_arr(int const*, unsigned long, int*, int, int, int, int, int, int)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765493
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа моем слабом ноутбуке данное приложение работает несколько секунд - решение достаточное
для того чтобы вообще не заниматься оптимизиацией. А профилирование которое я хотел
посмотреть это просто шаг в сторону обобщения. Чтобы понять как просядет подобная
задача когда узлов графа станет на порядки больше.
Ты неправильно смотрел, тут нечего обобщать. Алгоритм изначально оптимизирован под данную задачу, лишние переборы отсекаются своевременными проверками суммы if(sum == ...)

В общем случае тут 17! комбинаций. Предварительно математически 17! свели к 2*15! (возможны две пары {x1, x17}) Но 2*15! твой ноут будет перебирать часы, а то и сутки. Можешь запустить не оптимизированный )))
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765494
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonmaytonНу это не то что я хотел
Без стека вызовов не видно профилирования.
До строки кода нет детализации?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765496
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovDima TЗаменил код на фарш , можешь профилировать. Изначальный вариант тут .Вопросы по программе:

1)Зачем сортировать массив?
Массив от 1 до 20 – либо 0 (число ещё не выбрано), либо 1 (число выбрано).
Проще сравнивать по номеру на «свободное место», и заносить новое число.

2)Тогда для 6,10,12,18,20 занести в массив 1.

3)Неудобно с переменными от 1 да 17? Так можно ввести переменные от 1 до 20 с пропусками по индексу.

Это для начала…
Сортировки там нет, в процессе решения массивы изначально сортированные получаются. Работа с сортированными массивами гораздо быстрее.
Gennadiy UsovДалее..

4)Есть такое:
// Заполнение среднего круга по 4 из 15

Но в среднем круге 4 неизвестных и 3 известных. Причем 4-е неизвестное можно вычислить по 3-м другим неизвестным.
Можно, только алгоритм слишком сложный получится.

Gennadiy Usov5)// Заполнение внешнего круга по 5 из 11
Но теперь все неизвестные на внешнем круге вычислятся...
Зачем выборка?
Расчет на этом не заканчивается, далее надо все размещения перебрать, а это требует собрать данные в массив

Gennadiy Usov6) start(19, 57, 20);
Это можно убрать, так как доказано, что х1 = sum / 3;
19 = 57 / 3
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765497
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmaytonпропущено...

Без стека вызовов не видно профилирования.
До строки кода нет детализации?
Хороший вопрос. Ищу это.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765498
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Далее…

7)В программе сначала определяются числа для всех переменных, сначала 4 из 15, затем 5 из 11, далее оставшиеся 6 чисел, а потом уже эти числа проверяются на 12 уравнениях.

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

Если применять формулы, то происходит постепенное определение значений переменных по наличию «свободных зон» в массиве чисел. И для этого достаточно меньше выборок чисел.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765499
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

До строки кода нет детализации?
Хороший вопрос. Ищу это.
Есть ссылка на GCOV (типа code coverage).

https://stackoverflow.com/questions/3263573/is-there-a-profiler-for-c-gcc-to-profile-code-lines-separately

Кстати мне понравилось основание по которому этот-же топик был закрыт. Вверху
"Questions asking us to recommend or find a book, tool, software library, tutorial
or other off-site resource are off-topic for Stack Overflow as they tend to attract
opinionated answers and spam. Instead, describe the problem and what has been
done so far to solve it."
Это хорошая мысль и я постараюсь взять ее на вооружение для модерации С++. Надеюсь коллеги
поддержат.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765502
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TGennadiy Usov6) start(19, 57, 20);
Это можно убрать, так как доказано, что х1 = sum / 3;
19 = 57 / 3Да, здесь я ошибся.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765503
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovДалее…

7)В программе сначала определяются числа для всех переменных, сначала 4 из 15, затем 5 из 11, далее оставшиеся 6 чисел, а потом уже эти числа проверяются на 12 уравнениях.

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

Если применять формулы, то происходит постепенное определение значений переменных по наличию «свободных зон» в массиве чисел. И для этого достаточно меньше выборок чисел.
Это называется over-optimization, т.е. чрезмерная оптимизация. Задача решается за секунду, можно дальше тюнингом кода заниматься излишне его усложняя, но это даст выигрыш в доли секунды. Оно того не стоит в данном случае.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765504
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovDima Tпропущено...

19 = 57 / 3Да, здесь я ошибся.
Геннадий. Вы можете запустить программу Дмитрия на этом сайте https://ideone.com/

Предварительно скопировав ее исходный код и указав язык С++ в меню выбора языков.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765505
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

До строки кода нет детализации?
Хороший вопрос. Ищу это.
Можешь попробовать сделать функции-обертки
Код: plaintext
1.
2.
3.
bool np1(int* p1, int* p2) {
  return std::next_permutation(p1, p2);
}


в коде вызывать их
Код: plaintext
1.
2.
3.
...
 } while (np1(num_e, num_e + 5));
...


А проще счетчиков навтыкать во все циклы и в конце их вывести.


ИМХО это не классическая задача для профилирования, поэтому профилировать неудобно.

PS Вернул обратно исходник. фарш тут
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765506
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TGennadiy Usov4)Есть такое:
// Заполнение среднего круга по 4 из 15

Но в среднем круге 4 неизвестных и 3 известных. Причем 4-е неизвестное можно вычислить по 3-м другим неизвестным.
Можно, только алгоритм слишком сложный получится. Самый простой алгоритм - это простой перебор всех и вся.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765507
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TА проще счетчиков навтыкать во все циклы и в конце их вывести.

ИМХО это не классическая задача для профилирования, поэтому профилировать неудобно.
Я-бы хотел избегать "дурных" путей. Типа логгирования или счетчиков.
Это не от хорошей жизни. Если Callgrind нам позволяет видеть не только
учот количества вызовов прикладной функции но еще и строит граф
вызовов (я видел картинку со стрелками) то это технологично. И этим
надо воспользоваться.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765508
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonГеннадий. Вы можете запустить программу Дмитрия на этом сайте https://ideone.com/

Предварительно скопировав ее исходный код и указав язык С++ в меню выбора языков.Пока не вижу в этом смысла.

Меня, также как и Вас, интересуют отдельные моменты программирования, а именно, определение схем построения алгоритмов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В актуальной ревизии

https://github.com/Dmitriy-GH/remove20th/blob/master/remove20th.cpp

Я-бы ввел некую сущность под названием Graph
Код: plaintext
1.
struct Graph {...}


и передавал бы ее в функции-предикаты.
Например. Вместо.

Код: plaintext
1.
if (sum == 12 + *x2 + *x1 + *x5 + *x15 // Горизонтальный


Ввел-бы
Код: plaintext
1.
2.
3.
if (isHorizontalGraphBalanced(graph)) {
...
}


Предикаты соотв. проверяют подграфы на сбалансированность по весу.

Но я не настаиваю. А то со стороны выглядит будто я заставляю тебя подгонять код под Callgrind.

Я в принципе всегда стараюсь писать код максимально разбитым на элементарные фунции.
Единственный кейс когда я этого не делал - в карточном трассировщике - просто для сохранения
оригинального подобия к исходнику Гекберта.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765510
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonГеннадий. Вы можете запустить программу Дмитрия на этом сайте https://ideone.com/

Предварительно скопировав ее исходный код и указав язык С++ в меню выбора языков.Пока не вижу в этом смысла.

Меня, также как и Вас, интересуют отдельные моменты программирования, а именно, определение схем построения алгоритмов.
Как будет угодно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765511
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovDima Tпропущено...

Можно, только алгоритм слишком сложный получится. Самый простой алгоритм - это простой перебор всех и вся.
Верно, но это долго, часы. Если в лоб 17!, то недели. Поэтому нужна оптимизация.
Любая оптимизация это усложнение алгоритма, т.е. повышение вероятности допустить ошибку. Поэтому чем меньше оптимизации - тем лучше.
Поэтому всегда ищется компромисс, в данном случае критерий компромисса это время. Одной секунды вполне достаточно чтобы прекратить оптимизацию.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765512
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TGennadiy Usov7)В программе сначала определяются числа для всех переменных, сначала 4 из 15, затем 5 из 11, далее оставшиеся 6 чисел, а потом уже эти числа проверяются на 12 уравнениях.

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

Если применять формулы, то происходит постепенное определение значений переменных по наличию «свободных зон» в массиве чисел. И для этого достаточно меньше выборок чисел.
Это называется over-optimization, т.е. чрезмерная оптимизация. Задача решается за секунду, можно дальше тюнингом кода заниматься излишне его усложняя, но это даст выигрыш в доли секунды. Оно того не стоит в данном случае.А как же красота алгоритма?

Ведь кто-то сказал, что эта задачка для олимпиады.

Кроме того, будет опыт для более сложных графов (если конечно будут такие задачки)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765513
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я слишком стар для олимпиады. Я просто не уложусь в назначенное время.
Мой перфекционизм просто не даст возможности мне дойти до definition of done.

Да и вообще олимпиады по информатике - это ужасные зубо-дробительный
код который пишется 1 раз. И смотреть на него страшно. Это обычно одна
простыня main() безо всякого рефакторинга. Всё захардкожено под ответ. Шаг-влево-вправо
и этот код валится как карточный домик. Собственно суть олимпиады - показать
прототип идеи и показать что он работает для данного случая.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765514
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ актуальной ревизии

https://github.com/Dmitriy-GH/remove20th/blob/master/remove20th.cpp

Я-бы ввел некую сущность под названием Graph
Код: plaintext
1.
struct Graph {...}


и передавал бы ее в функции-предикаты.
Например. Вместо.

Код: plaintext
1.
if (sum == 12 + *x2 + *x1 + *x5 + *x15 // Горизонтальный


Ввел-бы
Код: plaintext
1.
2.
3.
if (isHorizontalGraphBalanced(graph)) {
...
}


Предикаты соотв. проверяют подграфы на сбалансированность по весу.

Но я не настаиваю. А то со стороны выглядит будто я заставляю тебя подгонять код под Callgrind.

Я в принципе всегда стараюсь писать код максимально разбитым на элементарные фунции.
Единственный кейс когда я этого не делал - в карточном трассировщике - просто для сохранения
оригинального подобия к исходнику Гекберта.
на обощенный Graph это не тянет, т.к. речь о вполне конкретной фигуре и даже твой isHorizontalGraphBalanced() это тоже о конкретной фигуре.

Твоя идея посчитать количество вызов каждого sum == ... в корне неверная. Вызов std::next_permutation() или next_combination() намного тяжелее чем это.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765515
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНапример. Вместо.

Код: plaintext
1.
if (sum == 12 + *x2 + *x1 + *x5 + *x15 // Горизонтальный


....
А почему сразу не посчитать
Код: plaintext
1.
*x15 = sum12 - 12 -*x2 - *x1 - *x5 

и сравнить с массивом?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765517
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не поймете. Выж математик.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765518
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovА как же красота алгоритма?
Самый красивый алгоритм - не оптимизированный
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void start() {
	int x[18] = { 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	do {
		int sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
		if (sum == 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
			&& sum == x[2] + x[3] + x[4] + x[5] + x[6] + x[7] // Внутренний круг
			&& sum == 12 + x[2] + x[1] + x[5] + x[15] // Диаметр горизонтальный
			&& sum == x[14] + x[4] + x[1] + x[7] + x[12] // Диаметр cлева направо
			&& sum == x[13] + x[3] + x[1] + x[6] + x[16] // Диаметр cправа налево
			// Шесть кругов
			&& sum == 12 + x[9] + x[3] + x[6] + x[11] + x[12]
			&& sum == 12 + x[13] + x[10] + x[4] + x[7] + x[8]
			&& sum == x[13] + x[14] + 18 + x[5] + x[2] + x[9]
			&& sum == x[14] + x[15] + 6 + x[6] + x[3] + x[10]
			&& sum == x[15] + x[16] + x[11] + x[7] + x[4] + 18
			&& sum == x[16] + x[12] + x[8] + x[2] + x[5] + 6
			) {
			count++;
			printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17]);
		}
	} while (std::next_permutation(x+1, x + 18));
}



Под спойлером рабочий код, все предельно понятно, но считать будет несколько недель.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765520
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТвоя идея посчитать количество вызов каждого sum == ... в корне неверная. Вызов std::next_permutation() или next_combination() намного тяжелее чем это.
Давай избавимся от permutation.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765521
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И у нас в воздухе провис вопрос о количестве решений. Или их 16. Или их больше.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765523
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TТвоя идея посчитать количество вызов каждого sum == ... в корне неверная. Вызов std::next_permutation() или next_combination() намного тяжелее чем это.
Давай избавимся от permutation.
Как? Это оптимальная реализация, моя переделка в циклы заметно тормознее получилась.

Загугли " размещения алгоритм ", везде аналогичный подход.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765524
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ у нас в воздухе провис вопрос о количестве решений. Или их 16. Или их больше.
Ровно 16, иначе можно утверждать что задача не решена, т.к. исключить можно только одно число.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765527
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonИ у нас в воздухе провис вопрос о количестве решений. Или их 16. Или их больше.В сообщении 21795098 показано, что количество решений задачки кратно 8.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765529
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonИ у нас в воздухе провис вопрос о количестве решений. Или их 16. Или их больше.В сообщении 21795098 показано, что количество решений задачки кратно 8.
Может быть 24 ?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765531
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovВ сообщении 21795098 показано, что количество решений задачки кратно 8.
Может быть 24 ?Всё возможно.

Хотя Dima T уже всё посчитал.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверим.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГлупый codeblocks. Где в нём рефакторинг? Где extract procedure...
Установил Clion. Рефакторит получше. Хотя я сделал авто-форматирование последней версии сорца.
Получилась такая некислая лесенка....
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765592
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима а прокомментируй плиз зачем тут так много сорцов. Какой из них - актуален?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
$ ls -lF
total 92
-rwxr-xr-x 1 mayton mayton    67  27 19:26 make.sh*
-rw-r--r-- 1 mayton mayton  5442  27 20:03 remove20th.cpp
-rw-r--r-- 1 mayton mayton  2701  27 20:03 remove20th_nooptimize.cpp
-rw-r--r-- 1 mayton mayton  1433  27 19:26 remove20th.sln
-rw-r--r-- 1 mayton mayton  6599  27 20:03 remove20th_trash.cpp
-rw-r--r-- 1 mayton mayton  7863  27 19:26 remove20th.vcxproj
-rw-r--r-- 1 mayton mayton 55370  27 19:26 задание.jpg
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765641
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь говорили, но не стали реализовывать 2-й вариант, через систему ур-й. Кратко озвучиваю это. Ибо вопрос темы звучит "как решить задачу".
Я поздно присоединился, но в итоге результат не получился, хотя и перепроверял несколько раз. По этому случаю только краткую схему на тему насколько легко это можно сделать в экселе (систему саму получить, а потом по свободным переменным получать решения).

В общем, нарисовал на листке неоднородную систему наших 12 линейных ур-ний с 15-ю переменными. Поскольку из предварительного анализа X1= одно из 2-х значений, то их вынес в параметры алгоритма, ну т.е. приравнял тоже к константе. Если надо, запускаем два раза и все дела. Эти шаги нетрудно запрограммировать.

Значит, таблицу к-тов заносим в матрицу 12х15,
приводим к "диагональному" виду.
Получилось как на вложенном рисунке (справа там ещё есть преобразованный константный вектор (S-Y-X1-18-12-6)).
Почему-то свободных переменных осталось 5.
Далее 2 варианта действий.
1) полный перебор A(5,15)=360360, вопрос фигнядля программы.
2) воспользоваться эвристиками и сузить перебор. Я воспользовался, остались 54 варианта, но увы ...

Прогу диагонализации писать неохота, ибо в прошлом такое на бумаге делал мильоны раз. Но сделать это легче всего в VBA. Просто привожу свой полуручной неправильный, видимо, вариант.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765642
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточню. Исходный константный вектор без Y-лишнее: (S-X1-18-12-6), X1 - центр, S - сумма каждого пути. Вектор тоже преобразуется по мере диагонализации. Просто для радиальныхх ур-й X1 изначально присутствует, а для остальных вместо него 0. Аналогично и с остальными константами.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765644
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я рисовал граф. Но граф не особо нужен так как топология слабо учитывается.
Тут скорее важно учесть реляционное отображение вершин на подграфы и контролировать
частичные суммы. Тоесть помаркировал вершину (Vertex) числом - и синхронно добавил
это число к суммам всех связных подграфов.


Видя что граф - игрушка а не необходимость я - охладел. Чуть позже возможно я выкачу
своё решение. Но я не люблю репризы. И никогда не копирую чужие сорцы просто так.
Нужна оригинальная идея. Иначе выходить на сцену бесполезно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765656
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДима а прокомментируй плиз зачем тут так много сорцов. Какой из них - актуален?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
$ ls -lF
total 92
-rwxr-xr-x 1 mayton mayton    67  27 19:26 make.sh*
-rw-r--r-- 1 mayton mayton  5442  27 20:03 remove20th.cpp
-rw-r--r-- 1 mayton mayton  2701  27 20:03 remove20th_nooptimize.cpp
-rw-r--r-- 1 mayton mayton  1433  27 19:26 remove20th.sln
-rw-r--r-- 1 mayton mayton  6599  27 20:03 remove20th_trash.cpp
-rw-r--r-- 1 mayton mayton  7863  27 19:26 remove20th.vcxproj
-rw-r--r-- 1 mayton mayton 55370  27 19:26 задание.jpg


remove20th.cpp основной
remove20th_nooptimize.cpp перебор 2*15! комбинаций
remove20th_trash.cpp без вызовов std::next_permutation() и next_combination() тебе для профилирования
удалил последние два
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765658
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому система уравнений нужна, то вот она
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = x[2] + x[3] + x[4] + x[5] + x[6] + x[7] // Внутренний круг
sum = 12 + x[2] + x[1] + x[5] + x[15] // Диаметр горизонтальный
sum = x[14] + x[4] + x[1] + x[7] + x[12] // Диаметр cлева направо
sum = x[13] + x[3] + x[1] + x[6] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + x[3] + x[6] + x[11] + x[12]
sum = 12 + x[13] + x[10] + x[4] + x[7] + x[8]
sum = x[13] + x[14] + 18 + x[5] + x[2] + x[9]
sum = x[14] + x[15] + 6 + x[6] + x[3] + x[10]
sum = x[15] + x[16] + x[11] + x[7] + x[4] + 18
sum = x[16] + x[12] + x[8] + x[2] + x[5] + 6


Также доказано что
Код: plaintext
1.
2.
3.
sum = x[1] * 3
x[1] = 19 или 20
x[17] = 20 или 10
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765659
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если поможет:

Код: plaintext
1.
x[16] =  20 - x[14]
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765670
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

можно упростить систему уравнений. если ввести переменные а1,а2,а3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = а[1] + а[2] + а[3]  // Внутренний круг
sum = 12 + x[2] + x[1] + x[5] + x[15] // Диаметр горизонтальный
sum = x[14] + x[4] + x[1] + x[7] + x[12] // Диаметр cлева направо
sum = x[13] + x[3] + x[1] + x[6] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + а[2] + x[11] + x[12]
sum = 12 + x[13] + x[10] + а[3] + x[8]
sum = x[13] + x[14] + 18 + а[1] + x[9]
sum = x[14] + x[15] + 6 + а[2]  + x[10]
sum = x[15] + x[16] + x[11] + а[3]  + 18
sum = x[16] + x[12] + x[8] + а[1]  + 6


То есть, получается 12 уравнений и 12 неизвестных
[/quot]
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765671
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
вот теперь верно:

можно упростить систему уравнений. если ввести переменные а1,а2,а3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = а[1] + а[2] + а[3]  // Внутренний круг
sum = 12 +  x[1] + а[1] + x[15] // Диаметр горизонтальный
sum = x[14] + x[1] + а[3] + x[12] // Диаметр cлева направо
sum = x[13] + x[1] + а[2] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + а[2] + x[11] + x[12]
sum = 12 + x[13] + x[10] + а[3] + x[8]
sum = x[13] + x[14] + 18 + а[1] + x[9]
sum = x[14] + x[15] + 6 + а[2]  + x[10]
sum = x[15] + x[16] + x[11] + а[3]  + 18
sum = x[16] + x[12] + x[8] + а[1]  + 6


То есть, получается 12 уравнений и 12 неизвестных
[/quot]
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765676
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще не помешает указать что
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]


Еще вместо sum написать 3*x[1] и можно решать.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765740
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле, 12 уравнений и 12 неизвестных – это не совсем точная информация.

Часть из этих уравнений использовалась для определения sum и x[1] 21793339 . Так что, если строго, была использована ещё одна выборка по sum и часть уравнений для определения x[1].

Следовательно, этих 12 уравнений не достаточно для определения 12 неизвестных.

Поэтому, необходимо эти 12 уравнений преобразовать в определения n неизвестных при наличии выборки m чисел.
n + m + 3 = 15.

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

Тогда можно будет точно сказать, сколько необходимо выборок.Dima TЕще не помешает указать что
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]


Еще вместо sum написать 3*x[1] и можно решать.Данные уравнения можно дописать к 12 уравнениям. но они пока не нужны.

Их можно будет использовать после определения а1, а2, а3.

Про sum я уже сказал в начале сообщения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765781
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

уравнение баланса забыл
x1 + x2 + ...x7 = ...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765791
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,
уравнение баланса забыл
x1 + x2 + ...x7 = ...Не понял, откуда это следует?

Переменные от х1 до х7 ни на одном объекте (окружность, диагональ) одновременно не появляются.

Если это про внутреннюю окружность, то там нет х1. А уравнение этой окружности - это "внутренний круг" в общем перечне уравнений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765792
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovkealon(Ruslan)Gennadiy Usov,
уравнение баланса забыл
x1 + x2 + ...x17 = ...Не понял, откуда это следует?
из условия
распределяеют 17 чисел, значит их сумма известна, это и есть "уравнение баланса"
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765819
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usovпропущено...
Не понял, откуда это следует?
из условия
распределяеют 17 чисел, значит их сумма известна, это и есть "уравнение баланса"
Согласен, есть уравнение баланса:

x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] = 210 - x[17] - 6 - 12 -18

то есть у нас уже 13 уравнений и 17 неизвестных.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765833
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поскольку уравнения добавляются, то можно добавить ещё следующие уравнения (может быть они уже были на топике?):

210 = x[17] + 10 * x[1]
sum = (210 - x[1] - x[17]) / 3

Отсюда видно, что x[17] должен делиться на 10.

Получаем выборку из 2 чисел:
x[17] = 10; x[1] = 20; sum = 60;
x[17] = 20; x[1] = 19; sum = 57;
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765836
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovто есть у нас уже 13 уравнений и 17 неизвестных.
Это сюда тоже надо добавить
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]



Переменных должно стать на одну больше, т.к. все используются в других уравнениях, добавилась только x[17]

Еще выше ошибка была, там 12 уравнений и 13 неизвестных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765837
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovПолучаем выборку из 2 чисел:
x[17] = 10; x[1] = 20; sum = 60;
x[17] = 20; x[1] = 19; sum = 57;
Как вариант - подставить эти значения и решить дважды. Тогда будет 12 уравнений с 12-ю переменными.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765854
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется формула баланса;
Код: plaintext
1.
x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] = 210 - x[17] - 6 - 12 -18 

Пока не ясно, как её увязать со всем остальным. Скорее всего она нужна для определения числа 210 (вдруг, когда-то она будет переменная)

Далее попробую представить выборки и формулы для определения неизвестных:

Выборка по x[17]
(2 выборки 10 и 20)
Код: plaintext
1.
2.
x[1] = (210 - x[17]) / 10 
sum = (210 - x[1] - x[17]) / 3 

( это строже, чем sum = x[1] * 3)

Выборка по x[15], x[16], x[12]
Код: plaintext
1.
2.
3.
4.
5.
x[14] = 20 – x[16]
a[1] = sum – 12 – x[1] – x[15]
a[3] = sum – x[1] – x[12] – x[14] 
a[2] = sum – a[1] – a[3]
x[13] = sum – x[1] – a[2] – x[16] 

проверка
Код: plaintext
1.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16] 

далее
Код: plaintext
1.
2.
x[8] = sum – 6 – a[1] – x[12] – x[16]
x[10] = sum – 6 – a[2] – x[14] – x[15] 

проверка
Код: plaintext
1.
sum = 12 + x[13] + x[10] + а[3] + x[8] 

далее
Код: plaintext
1.
2.
x[9] = sum – 18 – a[1] – x[13] – x[14]
x[11] = sum – 18 – a[3] – x[15] – x[16] 

проверки
Код: plaintext
1.
2.
sum = 12 + x[9] + а[2] + x[11] + x[12]
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] 

Вот такая последовательность формул и выборок для определения 11 неизвестных (из них 4 - по выборке) и а1, а2, а3.

А теперь подумаю насчет а1, а2, а3
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765860
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765868
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЕсть стандартная методика решения n линейных уравнений с n переменными А почему не подходит предложенная схема выборок и формул?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765871
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Крамер рекомендует алгебру матриц.

Но чортов старик вводит туда рациональные дроби.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765877
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovDima TЕсть стандартная методика решения n линейных уравнений с n переменными А почему не подходит предложенная схема выборок и формул?
Мне кажется это замкнутый круг, но если так можно решить, то я не против.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765886
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется известные 3 величины а[1], а[2], а[3].
Каждая из этих величин является суммой двух неизвестных.
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]

Всего неизвестных 6.
Имеется 6 чисел из массива чисел.
Требуется распределить эти 6 чисел между 6-ю неизвестными, чтобы при этом не менялись величины а[1], а[2], а[3].

Выборка x[2], x[3], x[4] из 6 чисел.
Проверяем:
Код: plaintext
1.
2.
3.
x[5] = a[1] – x[2]
x[6] = a[2] – x[3]
x[7] = a[3] – x[4] 

Если выборка x[2], x[3], x[4] идет по возрастающей, то полученный вариант можно видоизменить с помощью перестановок: 8 подвариантов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765901
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати мне понравилось основание по которому этот-же топик был закрыт. Вверху
"Questions asking us to recommend or find a book, tool, software library, tutorial
or other off-site resource are off-topic for Stack Overflow as they tend to attract
opinionated answers and spam. Instead, describe the problem and what has been
done so far to solve it."
Это хорошая мысль и я постараюсь взять ее на вооружение для модерации С++. Надеюсь коллеги поддержат.
Тогда вместо рекомендаций и их обоснования придётся рассказывать "как я провёл лето". То есть длинно, нудно, во многом бесполезно.

Скорее стоит ввести правило - рекомендация должна содержать обоснование. Например задавать критерии полезности и в соответствии с ними вычислять полезность предлагаемого варианта в сравнении с альтернативами. Обычно спамеры обоснования не сочиняют или сочиняют что-то ужасное, поэтому их такой подход отсеет. А если обоснование приличное, значит за ним действительно стоит какая-то мысль, пусть даже спамерская, но полезная, интересная.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765904
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98По этому случаю только краткую схему на тему насколько легко это можно сделать в экселе
На счёт "легко" - я даже не встречал, где там вообще про решение систем уравнений. А здесь ведь ещё и множественные решения (переменных больше, чем уравнений) с проверкой. То есть уже не просто решение систем, а переборный алгоритм с некой частью, решающей систему. Где такое в экселе? Просветите, плиз. Какие меню, какие расширения скачивать, какая версия ёкселя, ну и вообще - где искать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765905
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174

sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = x[2] + x[3] + x[4] + x[5] + x[6] + x[7] // Внутренний круг
sum = 12 + x[2] + x[1] + x[5] + x[15] // Диаметр горизонтальный
sum = x[14] + x[4] + x[1] + x[7] + x[12] // Диаметр cлева направо
sum = x[13] + x[3] + x[1] + x[6] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + x[3] + x[6] + x[11] + x[12]
sum = 12 + x[13] + x[10] + x[4] + x[7] + x[8]
sum = x[13] + x[14] + 18 + x[5] + x[2] + x[9]
sum = x[14] + x[15] + 6 + x[6] + x[3] + x[10]
sum = x[15] + x[16] + x[11] + x[7] + x[4] + 18
sum = x[16] + x[12] + x[8] + x[2] + x[5] + 6



подменяем
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]


поулчается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
sum = x[16] + x[12] + x[8] + a[1]  + 6



итого 13 уравнений, 15 неизвестных будет удобно если ещё какие-то подмены углядеть
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Скорее стоит ввести правило - рекомендация должна содержать обоснование. Например задавать критерии полезности и в соответствии с ними вычислять полезность предлагаемого варианта в сравнении с альтернативами. Обычно спамеры обоснования не сочиняют или сочиняют что-то ужасное, поэтому их такой подход отсеет. А если обоснование приличное, значит за ним действительно стоит какая-то мысль, пусть даже спамерская, но полезная, интересная.
Типичный случай. Новичек заходит в форум программирования и спрашивает - как быстро-быстро
отсортировать массив целых чисел. Типа int. Или long. В оперативной памяти. При этом ему надо
чтоб было ооочень быстро.

У профессионалов разработки при этом вспыхивает острая мигрень затылочной части мозга.
Если не модерировать такой топик - то он очень быстро скатывается в переход на личности.
Вопрос это испаханный вдоль и поперек. И в википедии есть сорцы и книжки на тему.

За кадром остаются вопросы практического применения. И мои вопросы из серии - а каким образом
эти данные вообще попали в память? Телепортировались? Сколько времени заняло в секундах их
телепортация и тому подобное.

Складывается впечатление что ТС-у вообще был не особо нужен результат. Ему интересен
был сам процесс обсуждения.

Вот именно поэтому из таких топиков и возникает идея модерирования основанная на доказательстве
уже проделанной работы. Типа что было уже сделано. Мотивация. Цель. Бизнес-цель в конце концов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765920
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)итого 13 уравнений, 15 неизвестных будет удобно если ещё какие-то подмены углядеть
Я выше предлагал 21795736

Сначала подставляем
Код: sql
1.
x[17] = 10; x[1] = 20; sum = 60;


будет 13 уравнений, 12 неизвестных
решаем, затем подставляем
Код: sql
1.
x[17] = 20; x[1] = 19; sum = 57;


снова решаем.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765921
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

эти значения из этих уравнений получились
матрица выйдет нулевая
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765927
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТипичный случай. Новичек заходит в форум программирования и спрашивает - как быстро-быстро отсортировать массив целых чисел.
Здесь, мне кажется, нет проблемы. В смысле ситуация кажется проблемной, но проблемой на самом деле не является.

Новичок просто много чего не знает, это очевидно. Вот ему и нужно об этом сказать. Но сказать, по хорошему, нужно так, что бы он понял, куда ему дальше копать. Большинству просто лень что-то долго объяснять, вот они и тыкаю новичка мордой об стол. А надо на самом деле решить две задачи - сбить спесь с молодого товарища, который нередко уверен, что он всегда прав, и во вторых показать путь, пройдя который он что-то научится делать. Спесь сбивать все горазды, в этом плане у меня никаких подозрений в неспособности это сделать нет. А вот путь показать - нужно терпение, желание и т.д. Поэтому в идеале обсуждение нужно организовать так, что бы показывался именно путь, а не получался переход от поучений к самовозвеличиванию поучающих. И здесь, на мой взгляд, переходящие в срач темы нужно просто переносить куда-то подальше, типа "просто трёп" или что-то подобное - пусть там срутся, ведь никому же не мешают. А что бы тема не переносилась - устанавливать критерий - нужны вменяемые пояснения по дальнейшему пути данного новичка. Но поскольку большинству лень вменяемо (то есть объёмно, затратно по времени) объяснять, то и ответов будет мало, но зато у новичка появится стимул быть вежливым, ибо он просит, что бы его заметили и что-то полезное ответили. Если не будет вежливым - его проигнорируют или засунут тему подальше, где опять будут игнорировать. И в итоге всё должно само наладиться, но при условии качественной сортировки срача от тем с показанным путём развития.

Ну и описание этих требований, конечно, должно быть на видном месте.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765930
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показать что? Ссылку на википедию? Яж говорю тема - миллиард раз изжевана. Она - боян.

Она была-бы не-бояном применительно к бизнес-задаче.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

эти значения из этих уравнений получились
матрица выйдет нулевая
Один из двух наборов правильный, если заменим переменную на ее правильное значение, то должно быть все нормально.
Мы же не подменяем одной переменной другую, а подставляем конкретные значения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765960
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим, что на условие задачки 21792769 имеется схема определения неизвестных: 21795764 и 21795824 .

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

1. Допустим, нет в кружочках чисел 6, 12, 18.

Вводим переменные х[18], x[19], x[20] и ставим их на те кружочки, где ранее располагались число 6, 12, 18.

Далее выборка по x[15], x[16], x[12], х[18], x[19], x[20] (6 чисел из 18 чисел).

Меняем в формулах числа 6, 12, 18 на х[18], x[19], x[20],

и схема работает.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765968
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовать вам конечно никто не запретит, но такая схема работать не будет, вам придётся 2 уравнения исключить
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765972
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)попробовать вам конечно никто не запретит, но такая схема работать не будет, вам придётся 2 уравнения исключитьКакие?

Обычно, когда указывают на ошибки, эти ошибки приводятся как доказательство своей версии.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765982
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
(1)sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
(1)sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
(1)sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
(2)sum = 12 + x[9] + a[2]+ x[11] + x[12]
(2)sum = 12 + x[13] + x[10] + a[3] + x[8]
(2)sum = x[13] + x[14] + 18 + a[1] + x[9]
(2)sum = x[14] + x[15] + 6 +a[2] + x[10]
(2)sum = x[15] + x[16] + x[11] + a[3] + 18
(2)sum = x[16] + x[12] + x[8] + a[1]  + 6



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
3 sum = 12 + 3x[1] + a[1] + a[2] + a[3] + x[12] + x[13] + x[14] + x[15]  + x[16] 
// Шесть кругов
6 sum = 72  + 2 a[1] + 2 a[3] + 2 a[2] + 2 x[8] + 2x[9]+ 2 x[10] + 2x[11] + 2x[12]
 + 2x[13] +2x[14] +2x[15]+ 2x[16] 


упростим

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
3 sum = 12 + 3x[1] + a[1] + a[2] + a[3] + x[12] + x[13] + x[14] + x[15]  + x[16] 
// Шесть кругов
3 sum = 36  + a[1] + a[2] + a[3] + x[8] + x[9]+ x[10] + x[11] + x[12] + x[13] +x[14] +x[15]+ x[16] 



подменяем a[1] + a[2] + a[3] = sum

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + sum +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг

2 sum = 12 + 3x[1] + x[12] + x[13] + x[14] + x[15]  + x[16] 
// Шесть кругов
2 sum = 36  + x[8] + x[9]+ x[10] + x[11] + x[12] + x[13] +x[14] +x[15]+ x[16] 



подменяем
x[8] + x[9] + x[10] + x[11] = b1
x[12] + x[13] +x[14] +x[15]+ x[16] = b2

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + sum +  b1 + b2 +  x[17]= 174
sum = 12 + b2; // Внешний круг
sum = 24 + b1 // Средний круг

2 sum = 12 + 3x[1] + b2
// Шесть кругов
2 sum = 36  + b1 + b2


чуток упрощаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + sum +  b1 + b2 +  x[17]= 174
sum = 12 + b2; // Внешний круг
sum = 24 + b1 // Средний круг

sum = 3x[1]
// Шесть кругов
2 sum = 36  + b1 + b2


5 уравнений, 5 неизвестных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765984
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

блин, одно из уравнений исходных лишнее, последнее уравнение выходит из суммы 2-го и 3-го
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765990
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)x[8] + x[9] + x[10] + x[11] = b1
x[12] + x[13] +x[14] +x[15]+ x[16] = b2

чуток упрощаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + sum +  b1 + b2 +  x[17]= 174
sum = 12 + b2; // Внешний круг
sum = 24 + b1 // Средний круг

sum = 3x[1]
// Шесть кругов
2 sum = 36  + b1 + b2

5 уравнений, 5 неизвестныхЯ ранее предупреждал, что любое решение уравнений (без выборок) приходит к тождествам.

b1 и b2 равны sum с точностью до чисел.
Подставляйте значения b1 и b2 в Ваши уравнения и получайте тождества!!!
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765993
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

вы непоняли, одно из исходных уравнений композиция остальных, т.е. любое из уравнений кроме баланса можно выкинуть
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39765998
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совсем забыл про проверки после каждой формулы.

Кроме массива х имеем массив хр, той же размерности, что и х.
В массиве хр хранятся значения либо 0 (перед началом работы программы), либо 1.
Если хр[i] = 1, то это означает, что выбрано или вычислено число i.

Все формулы находятся в некоторой процедуре.
b = x[i]
Если b > 20 или b<1, то эти аварийный выход.
Если xp[b] == 1 то аварийный выход
Иначе xp[b] = 1.

Данная процедура позволяет на ранней стадии вычислений по формулам отвергать заведомо неверные варианты.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766000
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

вы непоняли, одно из исходных уравнений композиция остальных, т.е. любое из уравнений кроме баланса можно выкинутьА что, это военная тайна, и Вы второй раз не указываете уравнения?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766006
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174


любое из уравнений ниже можно исключить, оно будет вполняться если будут выполняться остальные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
sum = x[16] + x[12] + x[8] + a[1]  + 6



итого выйдет 12 уравнений, 15 неизвестных


это следует из того, что получилось зависимое уравнение при преобразовании системы
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766007
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, из вот этих (баланс не трогаем)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
sum = x[16] + x[12] + x[8] + a[1]  + 6
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766009
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)чуток упрощаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
x[1] + sum +  b1 + b2 +  x[17]= 174
sum = 12 + b2; // Внешний круг
sum = 24 + b1 // Средний круг

sum = 3x[1]
// Шесть кругов
2 sum = 36  + b1 + b2


5 уравнений, 5 неизвестных
Продолжаем упрощать
sum/3 + sum + sum - 24 + sum - 12 + x[17]= 174
=>
10/3 sum + x[17] = 210
=>
x[17] = 210 - 10/3 sum
=>
x[17] = 210 - 10 x[1]

Тоже самое что и X = 210 - 10C 21793586

2 sum = 36 + b1 + b2 вырождается в 0=0
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766020
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)пардон, из вот этих (баланс не трогаем)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
sum = x[16] + x[12] + x[8] + a[1]  + 6

Не надо всё крушить.

Уравнения, которые по Вашему лишние, нужны для дополнительной проверки получаемых значений для неизвестных.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766048
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

давай проверим
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																//if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) 
                                                                                                                               {
																	count++;
																	// Тут можно вывести правильное решение
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}



Код: plaintext
1.
2.
count 0
count 16

можешь любое из остальных попробовать закомментировать (текущий комментарий только раскрой)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766049
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТипичный случай. Новичек заходит в форум программирования и спрашивает - как быстро-быстро отсортировать массив целых чисел. Типа int. Или long. В оперативной памяти. При этом ему надо чтоб было ооочень быстро.Ему надо - пусть он и делает. И не надо подтирать носы по каждому чиху.

P.S.
Первая пара вопрос-ответ из древнего ЧАВО XFree86/2:
В. - Вы должны ...
О. - Я никому ничего не должен.

Более чем актуально.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766068
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Табличку нарисовал для решения матрицами
constx1a1a2a3x8x9x10x11x12x13x14x15x16уравнение1211111sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16] // Внешний круг241111sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг111sum = a[1] + a[2] + a[3] // Внутренний круг12111sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный1111sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо1111sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево121111sum = 12 + x[9] + a[2]+ x[11] + x[12]121111sum = 12 + x[13] + x[10] + a[3] + x[8]181111sum = x[13] + x[14] + 18 + a[1] + x[9]61111sum = x[14] + x[15] + 6 +a[2] + x[10]181111sum = x[15] + x[16] + x[11] + a[3] + 1861111sum = x[16] + x[12] + x[8] + a[1] + 6
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766081
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

sum, это ещё один столбец с -1
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766091
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

давай проверим
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
#include <cstdio>
#include <algorithm>

// Копирование сортированного массива с пропуском заданных значений skipX (в порядке возрастания)
void copy_arr(const int* source, size_t size, int* dest, int skip0, int skip1 = 99, int skip2 = 99, int skip3 = 99, int skip4 = 99, int skip5 = 99) {
	const int *end = source + size;
	while (source < end && *source < skip0) *dest++ = *source++;
	source++;
	while (source < end && *source < skip1) *dest++ = *source++;
	source++;
	while (source < end && *source < skip2) *dest++ = *source++;
	source++;
	while (source < end && *source < skip3) *dest++ = *source++;
	source++;
	while (source < end && *source < skip4) *dest++ = *source++;
	source++;
	while (source < end && *source < skip5) *dest++ = *source++;
}

// Следующая комбинация элементов массива. false - больше нет
bool next_combination(size_t *idx, size_t size, size_t max) {
	for (size_t i = 0; i != size; i++) {
		idx[i]++;
		if (i + 1 == size) { // Последний
			if (idx[i] == max) {
				idx[i - 1] = i - 1;
				idx[i] = i;
				return false;
			}
		} else { // Не последний
			if (idx[i] == idx[i + 1]) {
				idx[i] = i;
			} else {
				break;
			}
		}
	}
	return true;
}

// Проверка что массив отсортирован
bool is_sort(int* arr, size_t size) {
	for (size_t i = 1; i != size; i++) {
		if (arr[i] <= arr[i - 1]) return false;
	}
	return true;
}

int count = 0;

void start(int center, int sum, int lost) {
	int num17[17] = { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20 };
	int num15[15]; // Массив без center и lost
	if (center < lost) {
		copy_arr(num17, 17, num15, center, lost);
	} else {
		copy_arr(num17, 17, num15, lost, center);
	}
	// Заполнение среднего круга по 4 из 15
	size_t ic[4] = {0, 1, 2, 3}; // Индексы выбранных элементов
	do { // Перебор по 4 из 15
		if (sum == 18 + 6 + num15[ic[0]] + num15[ic[1]] + num15[ic[2]] + num15[ic[3]]) {
			int num11[11];
			copy_arr(num15, 15, num11, num15[ic[0]], num15[ic[1]], num15[ic[2]], num15[ic[3]]);
			// Заполнение внешнего круга по 5 из 11
			size_t ie[5] = { 0, 1, 2, 3, 4}; // Индексы выбранных элементов
			do {
				if (sum == 12 + num11[ie[0]] + num11[ie[1]] + num11[ie[2]] + num11[ie[3]] + num11[ie[4]]) {
					int num_i[6]; // Внутреннее кольцо
					copy_arr(num11, 11, num_i, num11[ie[0]], num11[ie[1]], num11[ie[2]], num11[ie[3]], num11[ie[4]]);
					// Проверка суммы внутреннего кольца
					if (sum != num_i[0] + num_i[1] + num_i[2] + num_i[3] + num_i[4] + num_i[5]) {
						printf("!!! ERROR sum !!!\n");
						return;
					}
					if (!is_sort(num_i, 6)) {
						printf("!!! ERROR sort num_i !!!\n");
						return;
					}
					// Проверка диаметров
					// Нумерация х в соответствии с https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308126&msg=21793805
					int *x2 = &num_i[0], *x3 = &num_i[1], *x4 = &num_i[2], *x5 = &num_i[3], *x6 = &num_i[4], *x7 = &num_i[5];
					int num_e[5]; // Внешнее кольцо
					int *x12 = &num_e[0], *x13 = &num_e[1], *x14 = &num_e[2], *x15 = &num_e[3], *x16 = &num_e[4];
					for (size_t i = 0; i != 5; i++) num_e[i] = num11[ie[i]];
					if (!is_sort(num_e, 5)) {
						printf("!!! ERROR sort num_e !!!\n");
						return;
					}
					int num_c[4]; // Среднее кольцо
					int *x8 = &num_c[0], *x9 = &num_c[1], *x10 = &num_c[2], *x11 = &num_c[3];
					for (size_t i = 0; i != 4; i++) num_c[i] = num15[ic[i]];
					if (!is_sort(num_c, 4)) {
						printf("!!! ERROR sort num_c !!!\n");
						return;
					}

					int *x1 = &center;
					do { // Вращение внутреннего кольца
						do { // Вращение внешнего кольца
							// Горизонтальный
							if (sum == 12 + *x2 + *x1 + *x5 + *x15) {
								// Справа налево
								if (sum == *x14 + *x4 + *x1 + *x7 + *x12) {
									// Слева направо
									if (sum == *x13 + *x3 + *x1 + *x6 + *x16) {
										do { // Вращение среднего кольца
											// Шесть кругов
											if (sum == 12 + *x9 + *x3 + *x6 + *x11 + *x12) {
												if (sum == 12 + *x13 + *x10 + *x4 + *x7 + *x8) {
													if (sum == *x13 + *x14 + 18 + *x5 + *x2 + *x9) {
														if (sum == *x14 + *x15 + 6 + *x6 + *x3 + *x10) {
															if (sum == *x15 + *x16 + *x11 + *x7 + *x4 + 18) {
																//if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) 
                                                                                                                               {
																	count++;
																	// Тут можно вывести правильное решение
																}
															}
														}
													}
												}
											}
										} while (std::next_permutation(num_c, num_c + 4));
									}
								}
							}
						} while (std::next_permutation(num_e, num_e + 5));
					} while (std::next_permutation(num_i, num_i + 6));
					
				}
			} while (next_combination(ie, 5, 11));
		}
	} while (next_combination(ic, 4, 15));
}

int main(int argc, char** argv[])
{
	start(19, 57, 20);
	printf("count %d\n", count);
	start(20, 60, 10);
	printf("count %d\n", count);
	return 0;
}

можешь любое из остальных попробовать закомментировать (текущий комментарий только раскрой)Я уже комментировал этот код 21795114 21795146 21795207
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766104
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,
в плане любую одну из 12-ти проверок закомментировать, как это сделал я
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766108
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,
в плане любую одну из 12-ти проверок закомментировать, как это сделал яЯ не знаю как.

Нужен пример "одну из 12-ти проверок закомментировать".
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766113
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovkealon(Ruslan)Gennadiy Usov,
в плане любую одну из 12-ти проверок закомментировать, как это сделал яЯ не знаю как.

Нужен пример "одну из 12-ти проверок закомментировать".
найди вот эту строчку
Код: plaintext
1.
//if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) 


перед ней знак комментария, в проверках она не участвует, а результат тот же

выше неё ещё 11 проверок, каждую из них них так же можно закоментировать и результат не поменяется ( с моей правки только снять коментарий)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766117
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy UsovНужен пример "одну из 12-ти проверок закомментировать".
найди вот эту строчку
Код: plaintext
1.
//if (sum == *x16 + *x12 + *x8 + *x2 + *x5 + 6) 


перед ней знак комментария, в проверках она не участвует, а результат тот же

выше неё ещё 11 проверок, каждую из них них так же можно закоментировать и результат не поменяется ( с моей правки только снять коментарий)Здесь всё очень просто.

Я уже сообщал о характере решений 21795098 :
"В частности, в нашей задачке останется только один вариант, один подвариант, 2 сочетания и 8 перестановок для каждого сочетания."
Всего 16 решений.

То есть, в коде несколько проверок для отсева, и поскольку у нас только один вариант (для 11 неизвестных) (это видно из таблицы решений), то другие варианты просто не доходят до этого уравнения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766148
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем так долго спорить. Есть факты.
12 ур-ний связи на пути. Путей всего 12. Это необходимый минимум.

Начала линейной и высшей алгебры гласят, что любые другие додумки будут их линейной комбинацией.

Также можно заменить любое кол-во ур-ний на другие, независимые от оставшихся и эквивалентные условиям.
Результат не изменится. Ранг системы всегда=10. Я приводил рисунок.
Можно переменные заменять на комбинацию первоначальных.
Результат не изменится. Получим 5 свободных переменных.

Вот мой вариант системы в текстовом виде, если нужно.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	уравнен	a	2	3	4	5	6	A	b	c	B	E	F	d	e	f	1	C	D	X	S	Y
1	6	3	0	0	0	0	0	0	0	0	0	-1	1	3	0	0	0	0	6	-40	30	0
2	7	0	3	0	0	0	0	0	0	0	0	-1	0	0	0	0	36	-18	-12	-20	0	0
3	8	0	0	3	0	0	0	0	0	0	0	-1	-1	0	0	0	-36	18	6	60	60	0
4	9	0	0	0	3	0	0	0	0	0	0	1	-1	0	0	0	36	0	-6	-80	-30	0
5	2	0	0	0	0	3	0	0	0	0	0	1	1	0	0	0	-36	36	12	60	120	0
6	12	0	0	0	0	0	3	0	0	0	0	0	1	0	0	0	36	-36	0	-20	30	0
7	5	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	18	0	0	30	0
8	10	0	0	0	0	0	0	0	3	0	0	0	-1	0	3	0	0	-18	0	20	60	0
9	3	0	0	0	0	0	0	0	0	3	0	1	0	0	0	3	0	18	-6	20	90	0
10	11	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	6	0	30	0

Я устранил ошибку в эвристиках, оставив только 120 вариантов для перебора, т.ч. матрица та же самая. Все константы справа. S - подразумевается в правой части ур-ния.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766150
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По обозначениям.
abcdef - малый круг
ABCDEF - средний
123456 - радиусы
В таблице переставлены столбы - я так захотел. Результат не изменится.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766156
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555На счёт "легко" - я даже не встречал, где там вообще про решение систем уравнений. А здесь ведь ещё и множественные решения (переменных больше, чем уравнений) с проверкой. То есть уже не просто решение систем, а переборный алгоритм с некой частью, решающей систему. Где такое в экселе? Просветите, плиз. Какие меню, какие расширения скачивать, какая версия ёкселя, ну и вообще - где искать? Искать где?
F1, раздел форума Микрософи офисс, пробовали? а также основы линейной алгебры?

Конкретнее. Есть т.н. "формулы", а есть макросы.
Формулы для того, чтобы одним кликом заполнить весь ряд или столб.
Приведение матрицы к диагональному виду - процесс итерационный. Развернуть итерации в послед-сть действий ручками.

Перебор независимых переменных - в зависимости от размеров можно ручками, копи-вставкой из сторонней утилиты, макросом VBA прямо в клетки листа.

Разумеется при вменяемых размерах. я на бумажке отсеял лишние значения. Осталось 120 комбинаций. Обошёлся без макросов и сторонних процедур.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766183
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя... Крамер - рекурсивен. Потонуть можно. Меня получается 19 переменных в общем случае.

Может Гаусс-Зейдель. Тот вроде как более стабилен по времени. Треугольная матрица привлекательнее
чем ветвление дерева из (19-3) уровней.... Блииииин.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константы тоже обозначил как вершины графа.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766260
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Пусть будет матрица.

И что с ней делать? Спрятаться за лозунгом "Начала линейной и высшей алгебры"? И что там сказано за нашу матрицу?

Составители матриц ошибаются:
имеется 13 уравнений (ещё - баланс) и 17 неизвестных (ещё х1 и х17)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766266
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonКонстанты тоже обозначил как вершины графа.Надо добавить ещё С10 - окружность баланса, или весы баланса, на которых расположен (или опирается) граф, а рядом противовес - V20 (по нашему - х17)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766296
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovХорошо. Пусть будет матрица.

И что с ней делать? Спрятаться за лозунгом "Начала линейной и высшей алгебры"? И что там сказано за нашу матрицу?

Составители матриц ошибаются:
имеется 13 уравнений (ещё - баланс) и 17 неизвестных (ещё х1 и х17)

надо взять учебник по линейной алгебре для 1 курса мехмата, и все вопросы отпадут
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766299
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

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

самый умный?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766301
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Aleksandr Sharahov,

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

самый умный?

Не написано. Не путай со школьным учебником для 8 класса. Школота?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766302
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ранг нашей матрицы 12


Код: plaintext
1.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174


любое из нижележащих уравнений можно исключить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
sum = x[16] + x[12] + x[8] + a[1]  + 6


где
Код: plaintext
1.
2.
3.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]



например, можно заменить (x[8] + x[10]) и убрать последнее уравнение

останется 14 переменных

куда ещё 2 девать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766306
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

я может конечно за 18 лет подзабыл курс линейной алгебры, но не на столько
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766308
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Aleksandr Sharahov,

я может конечно за 18 лет подзабыл курс линейной алгебры, но не на столько

Именно настолько и подзабыл. От слова совсем.

Подсказка: свободные переменные.
Ну или гугли, если не вспомнишь.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766309
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

ну что я тебе сказжу, окинь взглядом магистр, снизойди до нас, найди их
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766310
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Aleksandr Sharahov,

ну что я тебе сказжу, окинь взглядом магистр, снизойди до нас, найди их

Сам найди, мне некогда.

Подсказка: линейные преобразования матриц.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766313
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут с примером 3 уравнения с 4 переменными https://math1.ru/education/sys_lin_eq/basis1.html
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766324
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

переменные связаны дискретными условиями, которые эта система не учитывает, вот и появляется перебор

из найденного ответа можно предположить что часть переменных связана, вопрос какая
если удастся заменой исключить ещё 2 переменные, то мы найдём базис, а остальные будут вычисляться перебором на основе дискретных условий
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766345
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

переменные связаны дискретными условиями, которые эта система не учитывает, вот и появляется перебор

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

Перебрать все возможные значения двух целочисленных переменных в интервале 1..20 - как 2 байта переслать.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766346
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

переменные связаны дискретными условиями, которые эта система не учитывает, вот и появляется перебор

из найденного ответа можно предположить что часть переменных связана, вопрос какая
если удастся заменой исключить ещё 2 переменные, то мы найдём базис, а остальные будут вычисляться перебором на основе дискретных условий
Ты усложняешь преждевременно, тут решение невозможно, это просто трансформация наших уравнений к виду
Код: plaintext
1.
2.
3.
x[1] = f1(s1,s2)
x[2] = f2(s1,s2)
...


т.е. просто назначить какие-то две переменные свободными (s1,s2) и выразить через них все остальные.
А дальше перебор, но перебор двух переменных, т.е. 16*17 комбинаций, это в экселе можно прикинуть.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766355
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonКонстанты тоже обозначил как вершины графа.Надо добавить ещё С10 - окружность баланса, или весы баланса, на которых расположен (или опирается) граф, а рядом противовес - V20 (по нашему - х17)
Какая окружность баланса. У меня на рисунке вроде все отражено.
9 окружностей и 3 диаметра.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766363
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

переменные связаны дискретными условиями, которые эта система не учитывает, вот и появляется перебор

из найденного ответа можно предположить что часть переменных связана, вопрос какая
если удастся заменой исключить ещё 2 переменные, то мы найдём базис, а остальные будут вычисляться перебором на основе дискретных условий
По этой системе получается что мы ищем точку в 19 мерном пространстве где пересекаются 12 гиперплоскостей.
При этом большая часть гиперплоскостей имеют жестко фиксированные угловые коэффициенты. Рискну предположить
что в вещестенных числах мы-бы это не решили и поэтому нам остается опираясь на целочисленность
просто тупо перебать 20 штук точек и подставив их в это пространство найти которая их них ляжет в систему.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766366
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

перебрать то мы их перебрали, было бы интересно найти базис инвариантов, если он есть, ну или доказать что его нет
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766424
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovНадо добавить ещё С10 - окружность баланса, или весы баланса, на которых расположен (или опирается) граф, а рядом противовес - V20 (по нашему - х17)Какая окружность баланса. У меня на рисунке вроде все отражено.
9 окружностей и 3 диаметра.А куда определить уравнение баланса и переменную х17? Ведь они участвуют в задачке?

Ответ лучше формулировать в терминах программирования.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766447
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovmaytonпропущено...
Какая окружность баланса. У меня на рисунке вроде все отражено.
9 окружностей и 3 диаметра.А куда определить уравнение баланса и переменную х17? Ведь они участвуют в задачке?

Ответ лучше формулировать в терминах программирования.
Я не понял ваш вопрос.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766455
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovСоставители матриц ошибаются:
имеется 13 уравнений (ещё - баланс) и 17 неизвестных (ещё х1 и х17) а составители-то и не знали ...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766462
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В сообщении 21795934 рассматривался вариант, когда вместо 6, 12, и 18 будут неизвестные величины.

2)Теперь можно ещё усложнить задачку:
все 19 чисел в кружках – произвольные.

В качестве примера такого варианта задачки рассмотрим числа от 1 до 19.
В данном примере получаем х1 = 19.
Но этот пример у нас уже был: тогда х17=20.
И по нему решений не оказалось (расчеты Dima T).

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

В частности, есть комбинация 19-ти чисел, а именно, числа от 1 до 9, от 11 до 19, и 20 в центре задачки (расчеты Dima T).

Можно найти ещё комбинации 19 чисел:
Например, ко всем 19 числам из нашей задачки (нет числа 10, в центре 20) добавляется число Р.

Получаются новые 19 чисел (за исключением в10):
в1=1+Р, в2=2+Р,…,в19=19+Р, и в20=20+2*Р.

Для таких комбинаций чисел тоже есть решения нашей задачки.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766463
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Gennadiy UsovСоставители матриц ошибаются:
имеется 13 уравнений (ещё - баланс) и 17 неизвестных (ещё х1 и х17) а составители-то и не знали ...Они это знали, поскольку это не произвольные 20 чисел (или 19, если в этом случае не рассматривать х17).

Далее, только благодаря уравнению баланса определяются х1 и х17.

Попробуйте не использовать это уравнение и найти х1 и х17.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766468
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТы усложняешь преждевременно, тут решение невозможно, это просто трансформация наших уравнений к виду
x[1] = f1(s1,s2)
x[2] = f2(s1,s2)
...
Совершенно верно, и всё уже сделано, я забросил вчера эту матрицу для 15 неизвестных,оставшихся после предварительного несложного анализа.

Кто забыл вкратце:
Диагонализация является формализацией решения системы уравнений. Достаточно модернизированного метода Гаусса (а здесь простого Гаусса).
Выбираем строчку, в к-рой "1" первая
Назначаем её первой строкой
В 1-м столбе вычитаем эту строку из остальных строк, чотбы обнулить столб.
И т.д. для каждого след-го столба.
Если требуется, передвигаем столб на новое место, чтобы получить диагональ.
Всё.
Для сравнения с Димой - результат (я не сравнивал).
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766473
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

центральное и выкинутое мы нашли вообще без указанных значений
скорее всего заданные значения служат лишь для уменьшения количества вариантов
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766474
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovПопробуйте не использовать это уравнение и найти х1 и х17. Побробуйте опровергнуть моё решениеи мои высказывания (особенно в части слов "предварительный анализ").
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766476
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovА куда определить уравнение баланса и переменную х17? Ведь они участвуют в задачке?

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

И все это Вы называете вершинами графа (так написано перед рисунком).

Но все обозначенные вершины графа связаны одним уравнением баланса. Как это описывает теория графов?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766480
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov, центральное и выкинутое мы нашли вообще без указанных значений
скорее всего заданные значения служат лишь для уменьшения количества вариантовКогда формулируете ответ на сообщение желательно это сообщение показать или сослаться. Это не трудно.

Попробую сам догадаться (или ошибся).

Как эти переменные были найдены без числа 210 (уравнение баланса).

Прошу представить расчеты.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766481
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка у меня
X - центр
Y - лишняя
exp98abcdef - малый круг
ABCDEF - средний
123456 - внешний круг
В таблице переставлены столбы - я так захотел. Результат не изменится.

Ваша раскладка
x2,x3,x4,x5,x6,x7
x9, x10,18,6,x11,x8
12,x13,x14,x15,x16,x12

x1=X
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766493
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

уравнение баланса конечно учли, я имею ввиду без 3-х чисел которые заданы
21793256 (последняя строчка там с ошибкой, 21793650 )
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766503
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

уравнение баланса конечно учли, я имею ввиду без 3-х чисел которые заданы
21793256 (последняя строчка там с ошибкой, 21793650 )Но эти числа тоже входят в уравнение баланса ( пока не стоит суммировать или отнимать)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766511
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovmaytonпропущено...

Я не понял ваш вопрос.Вы рисуете графы, в которых через вершины проводите окружности или диагонали, которые подразумевают уравнения (идет какая-то сумма, вершины таким образом связаны в рамках окружности или диагонали).

И все это Вы называете вершинами графа (так написано перед рисунком).

Но все обозначенные вершины графа связаны одним уравнением баланса. Как это описывает теория графов?
Это не полная картинка. В ней не учтена арифметика балансов. Я это рисовал чтобы подчеркнуть
что я ввожу 3 переменные вместо констант.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766523
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Кто забыл вкратце:
Диагонализация является формализацией решения системы уравнений. Достаточно модернизированного метода Гаусса (а здесь простого Гаусса).
Выбираем строчку, в к-рой "1" первая
Назначаем её первой строкой
В 1-м столбе вычитаем эту строку из остальных строк, чотбы обнулить столб.
И т.д. для каждого след-го столба.
Если требуется, передвигаем столб на новое место, чтобы получить диагональ.
Всё.
Угу. Полчаса активного орудование мышем в экселе, с периодическими проверками, очередная проверка не прошла, и всё, Ctrl+z работает на десяток последних действий. Сделал почти половину
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766537
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Полчаса очень даже хорошо. Я потратил пол воскресенья)) последовательно на каждый столб копировал таблицу под предыдущей, делал ссылки на предыдущую таблицу. В ссылки уже записывал сложения-вычитания-умножения(вместо деления). Всё это проделал трижды из-за ошибок.
Чтобы обезапаситься от некоторых ошибок рекурсии, на каждый диагональный элемент нужна своя копия..
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766540
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел напомнить очевидное, если S вводить в качестве переменной. Лучше засунуть её в такой столб, чтобы она ни в коем случае не вылезла среди независимых переменных.
Иначе я умру раньше, чем закончится перебор.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766542
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Dima T,
Полчаса очень даже хорошо. Я потратил пол воскресенья)) последовательно на каждый столб копировал таблицу под предыдущей, делал ссылки на предыдущую таблицу. В ссылки уже записывал сложения-вычитания-умножения(вместо деления). Всё это проделал трижды из-за ошибок.
Чтобы обезапаситься от некоторых ошибок рекурсии, на каждый диагональный элемент нужна своя копия..
Проще можно: вставляешь пустую строку над изменяемой строкой, формулу в первую клетку пишешь, мышкой растянул, Ctrl+C, Специальная вставка - Значения, Исходную строку удалил. И т.д. до финиша.
Не сложно, но меня отвлекали в процессе и я похоже что-то напутал. Думал Ctrl+Z спасет, но нет. Сохранятся надо было.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766550
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСохранятся надо было. Вот это безусловно!
Ты в той же таблице,поэтому ошибку не найдёшь. А я вот так делал, красил ещё цветом изменяемые строки.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766554
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня давняя ещё привычка сохраняться с нумерацией по кругу типа: файл1 - файл 2 - файл3 - ... - снова файл 2. Посчитаешь в эксе несколько лет - ещё не такое придумаешь))
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UI-ные версии Tortoise-SVN умели и понимали подсвечивать разницу между двумя ревизиями Excel-файлов.

P.S. Васили Иваныч! Снимай свою гильзу... В магазин кондомы привезли... (с) Народный анекдот.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766577
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TТут с примером 3 уравнения с 4 переменными https://math1.ru/education/sys_lin_eq/basis1.html Как я понял из представленного материала: есть базисные переменные и свободные переменные.
Базисные переменные определяются через свободные переменные.

У меня именно так 21795764 ; свободные переменные: х17,х12,х15,х16, остальные - базисные переменные.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766633
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Победил Гаусса
a1a2a3x9x10x11x12x13x14x15sx1x8x16const1-2.1666666670.666666667161-0.666666667-0.333333333-61-0.166666667-0.333333333-111.5-1-361-1.5161-313121-0.8333333330.3333333331-1.3333333330.333333333161-1110.166666667-0.666666667-161-3
Сначала хотел вывести зависимость от x1,x8, но ближе к концу два уравнения преобразовались в одинаковые и пришлось брать третью переменную, взял x16 чтоб считать меньше. Может где-то накосячил, но не нашел где. Возможно неудачно выбрал x8.

Вывелось наше известное sum = 3*x1
В формулу подставлять с инверсией знака, т.е. например
Код: sql
1.
x9 = -1.5x1 + x8 +3x16 - 6



PS Уже в глазах рябит от цифр этих. Это нереально преобразовать руками не зная ответы, у меня был контроль по правильным ответам каждого шага, накосячил раз 5. Мат.либу надо какую-то, по-любому есть что-нибудь, действия не сложные.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766641
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

в экселе есть формула обратной матрицы
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766642
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T,

в экселе есть формула обратной матрицы
Еще бы я вспомнил что с ней делать :)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766643
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕще бы я вспомнил что с ней делать :)
если A * x = b
то
x = A -1 * b
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766674
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tkealon(Ruslan)Dima T,

в экселе есть формула обратной матрицы
Еще бы я вспомнил что с ней делать :)Посмотреть с другой стороны
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766736
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, я не нарочно, сам давно уж понял, что макросом было бы быстрее. Но каково?! реклама - двигатель (эксэла)

Теперь остался пустяк. Задать значения и в уравнениях сделать
=СУММПРОИЗВ(... ; ...)

kealon(Ruslan)в экселе есть формула обратной матрицы а ещё есть умножение матриц, ага
Обратную матрицу можно было получить попутно, (но только для квадратной м-цы) методом сбоку присоединённой единичной. Это тоже из начал лин. алг. Только куда потом её засунуть.
По крайней мере умножением сразу переводим в диагональную.
Ну а на что помножить, то конечно подбором, или преобразованием координат))
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766752
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну их нафиг эти матрицы, через немного лет ребенок проходить будет, тогда и буду вспоминать. Причем постепенно, а не залпом ))

Я кажется понял почему невозможно выразить через две переменные. Посмотрите на картинку или на таблицу мою исходную 21796078 , там нет ни одной переменной, которая бы участвовала в половине и более уравнений, т.е. две переменные никогда не покроют все уравнения и как следствие через две не выразить все остальные, хотя формально 14 переменных и 12 уравнений.

В общем нормально что через 3 выразилось, но комбинаций для перебора стало 17*16*15 = 4080. Многовато для экселя, но далеко не 17!
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766759
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЯ кажется понял почему невозможно выразить через две переменные. Посмотрите на картинку или на таблицу мою исходную 21796078 , там нет ни одной переменной, которая бы участвовала в половине и более уравнений, т.е. две переменные никогда не покроют все уравнения и как следствие через две не выразить все остальные, хотя формально 14 переменных и 12 уравнений.

В общем нормально что через 3 выразилось, но комбинаций для перебора стало 17*16*15 = 4080. Многовато для экселя, но далеко не 17!Если посмотреть на 21795764 , то есть ещё 15-я переменная - sum.
И уравнение баланса - 13-ое.

И все равно, 4 выборки, включая х17. То есть, для 13 уравнений определяется только 11 неизвестных.

Может это из-за того, что при подстановке величин уравнения превращаются в тождества?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766760
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНу их нафиг эти матрицы, через немного лет ребенок проходить будет, тогда и буду вспоминать. Причем постепенно, а не залпом ))

Я кажется понял почему невозможно выразить через две переменные. Посмотрите на картинку или на таблицу мою исходную 21796078 , там нет ни одной переменной, которая бы участвовала в половине и более уравнений, т.е. две переменные никогда не покроют все уравнения и как следствие через две не выразить все остальные, хотя формально 14 переменных и 12 уравнений.

В общем нормально что через 3 выразилось, но комбинаций для перебора стало 17*16*15 = 4080. Многовато для экселя, но далеко не 17!
Я как-нибудь форкну отдельно тему СЛАУ. В пятницу.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766764
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovЕсли посмотреть на 21795764 , то есть ещё 15-я переменная - sum.
У меня нет x17, т.к.
Код: plaintext
1.
x17 = 210 - x1 - x2 - ... - x16


незачем это в общую кучу включать
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766765
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС пропал, а мне до сих пор интересно задача по какому предмету была?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766767
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TGennadiy UsovЕсли посмотреть на 21795764 , то есть ещё 15-я переменная - sum.
У меня нет x17, т.к.
Код: plaintext
1.
x17 = 210 - x1 - x2 - ... - x16


незачем это в общую кучу включатьЗначит, выборка по х1 из 2-х чисел (если строго).
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766777
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Развернуть итерации в послед-сть действий ручками.
Спасибо, понятно. Я думал есть некое магическое статистическое расширение офиса, а оказывается нужно просто программу написать...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766778
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТС пропал, а мне до сих пор интересно задача по какому предмету была?
Это же фото с какого-то стенда - олимпиадная задача или что-то в таком духе. Вне любого предмета. Хотя вообще - явная математика.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766779
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)окинь взглядом магистр, снизойди до нас, найди их
Суть правильная - переменных должно быть столько же, сколько и уравнений, но так же есть дополнительные критерии типа при определителе равном чему-то там возможны только нулевые решения. Но здесь, я надеюсь, нулевых решений и прочих "эдаких" вывертов быть не должно, иначе сам составитель задачи просто идиот (хотя и не исключено, учитывая перепутанность кругов и диаметров).
Dima TМат.либу надо какую-то, по-любому есть что-нибудь, действия не сложные.
У меня установлена система писючной алгебры, какую систему решить? Но переменных нужно столько же, сколько уравнений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766784
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555 У меня установлена система писючной алгебры, какую систему решить? Но переменных нужно столько же, сколько уравнений.Добавьте ур-ния типа S=S, т.е. тождества, и будет она квадратная. А проглотит ли прога, уж не знаю ...

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

Кол-во свободных переменных даёт линейное пространство размерностью=рангу. Вот в этом пр-ве мы потом и делаем перебор, если его не сузить дополнительным анализом. У кого 4000, у кого 120 ...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766787
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T т.е. две переменные никогда не покроют все уравнения и как следствие через две не выразить все остальные, хотя формально 14 переменных и 12 уравнений.Смогут или нет, определяется линейной зависиомстью либо независ-стью (т.е. от вида ур-ний). Хоть 100500 уравнений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766793
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Добавьте ур-ния типа S=S, т.е. тождества, и будет она квадратная. А проглотит ли прога, уж не знаю ...
Прога проглотит, но не даст решений. Сокращение бесполезных тождеств она умеет делать, так что способ не для неё. И вообще, рассуждая о линейной алгебре вы предлагаете нечто ей противоречащее, так что не совсем понятно какой вывод о вас нужно сделать.

Хотя не знаю, сможет ли программа, например, предложить один из множества вариантов решений. Раньше встречал ситуацию, когда она вывела формулу для результата, вместо конкретных значений. Не знаю, что там внутри алгоритма, но его сочиняли десятки лет, в смысле система довольно древняя, а потому с ней многие работали и что-то иногда дополняли.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766794
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98определяется линейной зависиомстью либо независ-стью
Если в уравнениях используются разные переменные (что актуально для диаметров, например), то линейно выразить Х через операции с У вы вряд ли сможете.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766795
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Хоть 100500 уравнений.
Здесь вообще не место просто воспоминаниям из курса линейной алгебры, здесь надо задачу решить. А про критерии любой прочитает при желании, просто освежить память - не так долго. Важнее - как эти критерии применить к конкретной ситуации.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766802
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Dima T, я не нарочно, сам давно уж понял, что макросом было бы быстрее. Но каково?! реклама - двигатель (эксэла)

Теперь остался пустяк. Задать значения и в уравнениях сделать
=СУММПРОИЗВ(... ; ...)

kealon(Ruslan)в экселе есть формула обратной матрицы а ещё есть умножение матриц, ага
Обратную матрицу можно было получить попутно, (но только для квадратной м-цы) методом сбоку присоединённой единичной. Это тоже из начал лин. алг. Только куда потом её засунуть.
По крайней мере умножением сразу переводим в диагональную.
Ну а на что помножить, то конечно подбором, или преобразованием координат))
не нужно её никуда пихать, нужно просто найти наибольшую часть матрицы с ненулевым определителем (МОПРЕД функция в экселе)
переменные которые будут в неё входить можно принять за базис
остальные принять за независимые

находим обраную матрицу от этого куска, с помощью него считаются переменные из базиса, независимые рандомятся
это в принципе просто ускорение того, что вы делали методом гауса
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766804
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНу их нафиг эти матрицы, через немного лет ребенок проходить будет, тогда и буду вспоминать. Причем постепенно, а не залпом ))

Я кажется понял почему невозможно выразить через две переменные. Посмотрите на картинку или на таблицу мою исходную 21796078 , там нет ни одной переменной, которая бы участвовала в половине и более уравнений, т.е. две переменные никогда не покроют все уравнения и как следствие через две не выразить все остальные, хотя формально 14 переменных и 12 уравнений.

В общем нормально что через 3 выразилось, но комбинаций для перебора стало 17*16*15 = 4080. Многовато для экселя, но далеко не 17!
просто ранг матрицы 11, отсда и выходит 3 независимые переменные
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766807
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
(*) sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
(*) sum = x[16] + x[12] + x[8] + a[1]  + 6


сложим те что со звёздочкой и заменим x[8] + x[10] -> a[4]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
x[1] + a[1] + a[2] +a[3] +  a[4] + x[9] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 +  a[4] + x[9] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// ~Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + a[3] + a[4]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[15] + x[16] + x[11] + a[3] + 18
2sum = x[14] + x[15] + 6 +a[2] + a[4] + x[16] + x[12] + a[1]  + 6


где
Код: plaintext
1.
2.
3.
4.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]
a[4] = x[8] + x[10]
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766808
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
x[1] + a[1] + a[2] +a[3] +  x[8] + x[9] + x[10] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 + x[8] + x[9] + x[10] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + x[10] + a[3] + x[8]
sum = x[13] + x[14] + 18 + a[1] + x[9]
(*) sum = x[14] + x[15] + 6 +a[2] + x[10]
sum = x[15] + x[16] + x[11] + a[3] + 18
(*) sum = x[16] + x[12] + x[8] + a[1]  + 6


сложим те что со звёздочкой и заменим x[8] + x[10] -> a[4]

ну и собственно наша матрица
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766809
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот файлик
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766815
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть беслатный пакет математики. Octave. В нем можно попробовать решать такие уравнения.
Здесь А - это коэффициенты при иксах. B - правая часть системы соотв.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
octave:4> A = [ 2 3 ; 5 -2 ]
A =

   2   3
   5  -2

octave:5> B = [ 12 ; 11 ]
B =

   12
   11

octave:6> X = inv(A) * B
X =

   3
   2


Это чтоб сейчас не парится с расчетом обратной матрицы на обычных языках программирования.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766817
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если подключать к решению задачки метод Гаусса, то получается интересная вещь.

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

В нашем случае в уравнениях очень мало переменных, и получается что при определении переменных методом Гаусса в уравнениях этих переменных появляется много дополнительных переменных – увеличивается время вычислений, уравнения будут сложными при программировании.

В сообщении 21795764 предлагается определять переменные в лоб, сначала с уравнений, где мало неизвестных, и т.д. Получается:
12 уравнений
3 свободные переменные
9 базисных переменных
(определение х1, х17, sum рассматриваем отдельно).

Если в этом сообщении посмотреть на уравнения проверки, то их будет 3.
Следовательно, если применить метод Гаусса, то по этим 3-м уравнениям получаются тождества.

Таким образом, остаётся - 9 уравнений и 9 определяемых базисных переменных (неизвестных).
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766821
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)ну и собственно наша матрицаПосмотрел на эту матрицу и оказалось, что её можно значительно упростить.

Просто в уравнения вводятся новые неизвестные: х18=6, х19=12, х20=18, х21=sum.

Тогда в матрице будут элементы либо 0 либо 1.

И задача решения системы уравнений методом Гаусса значительно упрощается.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766857
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

это как то далеко от олимпиады для школьников
мы уже применяем методы, которые школьникам недоступны

вот все независимые уравнения (11 штук)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
x[1] + a[1] + a[2] +a[3] +  a[4] + x[9] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 +  a[4] + x[9] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// ~Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + a[3] + a[4]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[15] + x[16] + x[11] + a[3] + 18


пользуясь основами линейной алгебры (определитель матрицы) мы это определили, как это должен сделать школьник - непонятно

если бы у меня стояла такая практическая задача, я бы просто наверное в нелинейный солвер её загнал, помучавшись бы только с дискретными условиями, проходов за 20-30 он бы её раскрутил, а тут фиг знает что делать
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766872
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TЕще бы я вспомнил что с ней делать :)
если A * x = b
то
x = A -1 * b
Почитал немного. Обратная матрица существует только для квадратной. Неквадратную приводят к квадратной записью свободных членов одним выражением, например "3*x1 - x8 + x16". Как следствие определитель будет выражением с x1, x8, x16. Эксель такое считать не умеет, считать на бумаге придется.

Вот нашел онлайн калькулятор , быстрее всего в него забить исходные данные.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766890
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)вот все независимые уравнения (11 штук)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
x[1] + a[1] + a[2] +a[3] +  a[4] + x[9] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 +  a[4] + x[9] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// ~Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + a[3] + a[4]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[15] + x[16] + x[11] + a[3] + 18

А почему только 11? На основании матрицы?

И где уравнения для определения неизвестных из этих 11-ти? Сколько выборок (свободных переменных)?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766899
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)пропущено...

если A * x = b
то
x = A -1 * b
Почитал немного. Обратная матрица существует только для квадратной. Неквадратную приводят к квадратной записью свободных членов одним выражением, например "3*x1 - x8 + x16". Как следствие определитель будет выражением с x1, x8, x16. Эксель такое считать не умеет, считать на бумаге придется.

Вот нашел онлайн калькулятор , быстрее всего в него забить исходные данные.посмотри эксельку, там как раз такой расчёт в столбике b


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

будет у тебя 4 строчки с коэфициентами для x1, x8, x16 и 1
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766909
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766911
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovА почему только 11? На основании матрицы?
если найдёшь определитель квадратика 12*12 отличный от нуля для любой комбинации перестановок столбцов и строк матрицы, значит будет 12, я нашёл только для 11 (в эксельке второй блок это определители)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39766912
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

ну а вообще проверить можно программкой Димы, закоментировав 2 уравнения
если ответ будет другой, значит я плохо искал
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767026
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В центре круга стоит число от 12 до 20, контрольная сумма равняется утроенному значению этого числа.... а дальше я хз как решать :)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767057
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555 Прога проглотит, но не даст решений. Телепатов нет. Тем хуже для самой проги и в особенности для её юзера.
alex55555 так что не совсем понятно какой вывод о вас нужно сделать. К сож. помочь не могу. Могу порекомендовать: сделайте вывод о себе.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767063
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555exp98определяется линейной зависиомстью либо независ-стью
Если в уравнениях используются разные переменные (что актуально для диаметров, например), то линейно выразить Х через операции с У вы вряд ли сможете.Да я вроде и не собирался, против теорем лин.алгебры - как плевать против ветра.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767086
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovВ нашем случае в уравнениях очень мало переменных, и получается что при определении переменных методом Гаусса в уравнениях этих переменных появляется много дополнительных переменных А почему в НАШЕМ случае у меня НЕ получилось много, скорее наоборот? Те же 5, а потом 3.

kealon(Ruslan),
тоже метод, но для детерминанта перестановки мутить, матрица ведь не квадратная.
Мы сначала хотели уйти от перестановок.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767091
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

какая разница как вы будете делать перестановки в уме или двигая столбцы строки
так хоть ошибиться сложнее и сразу видно где "не получится"
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767113
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),
да я и не против, я свой способ дожал до самого ответа.

Народ,
непонятно другое, продолжается обсуждение решений ад хок или народ ориентируется на обобщённый случай, где 18 переменных вместе с суммой и 13 начальных уравнений?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767119
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,
а-а-а, кажется догадываюсь, Вы наверное имеете ввиду верхнетреугольную матрицу. А обратным ходом она приводится к строго диагональной. И уж тут переменных - сколько получится.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767181
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)это как то далеко от олимпиады для школьников мы уже применяем методы, которые школьникам недоступны
Вообще здесь пока не исследовались как следует эвристики. Понятно, что программисты хотят быстрее написать программу и не копать вглубь, поскольку это долго и не всегда полезно, но вот как раз школьнику из-за его незнания линейной алгебры пришлось бы упорно ковырять эти эвристики, ну и может быть он бы нашёл.

Хотя ещё момент - если всё же поменять местами диаметры с кругами, то может уже и школьник бы справился?

По решению уравнений:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
solve([
	        x1 + x2 + x5 + x3 + x6 +x4 + x7 +  x8 + x10 + x9 + x11 + x12 + x13 + x14 + x15 + x16 +  x17= 174,
	        sum = 12 + x12 + x13 + x14 + x15 + x16,
	        sum = 18 + 6 +  x8 + x10 + x9 + x11,
	        sum =x2 + x5  + x3 + x6+x4 + x7,
	        sum =12 + x2 + x5 + x1 + x15,
	        
	        sum = x14 +  x4 + x7+ x1 + x12,
	        sum = x13 + x3 + x6+ x1 + x16,
	        sum = 12 + x9 + x3 + x6+ x11 + x12,
	        sum = 12 + x13 +  x4 + x7 + x8 + x10,
	        sum = x13 + x14 + 18 +x2 + x5 + x9,
	        sum = x15 + x16 + x11 +  x4 + x7 + 18,
	        2*sum = x14 + x15 + 6 +x3 + x6+ x8 + x10 + x16 + x12 +x2 + x5  + 6
	
	      ],
	    [x1, x2, x5, x3, x6, x4, x7, x8, x10, x9, x11, x12, x13, x14, x15, x16, x17]);


dependent equations eliminated: (10)

x1=sum/3,
x2=%r5,
x3=%r6,
x4=%r2,
x5=(2*sum-3*%r5-3*%r3-36)/3,
x6=(sum-12*%r6+6*%r4+6*%r3+108)/12,
x7=(sum-2*%r4+2*%r3-4*%r2+12)/4,
x8=(sum-2*%r1-12)/2,
x9=(sum-18*%r4+18*%r3+36)/12,
x10=%r1,
x11=(5*sum+18*%r4-18*%r3-252)/12,
x12=(5*sum-6*%r4-6*%r3-36)/12,
x13=(sum+2*%r4-2*%r3-36)/4,
x14=%r4,
x15=%r3,
x16=(sum-3*%r4)/3,
x17=-(10*sum-630)/3

Если искать ещё и сумму, то получим:

dependent equations eliminated: (11)

x1=%r7/3,
x2=(2*%r7-3*%r12-3*%r10-36)/3,
x3=(-2*%r9+%r7-4*%r11+2*%r10+36)/4,
x4=%r8,
x5=%r12,
x6=%r11,
x7=(6*%r9-12*%r8+%r7+6*%r10+36)/12,
x8=(%r7-2*%r13-12)/2,
x9=-(-18*%r9+5*%r7-18*%r10-36)/12,
x10=%r13,
x11=(-18*%r9+11*%r7-18*%r10-252)/12,
x12=(2*%r9+%r7-2*%r10-12)/4,
x13=(-6*%r9+5*%r7-6*%r10-108)/12,
x14=(%r7-3*%r9)/3,
x15=%r10,x16=%r9,
x17=-(10*%r7-630)/3,
sum=%r7

Здесь %r есть любое реальное число, но в нашем случае интересны лишь целые, значит это любое целое.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я возьму на себя смелость и процитирую википедию.

Эвристика (от др.-греч. εὑρίσκω — «отыскиваю», «открываю») — отрасль знания, научная область, изучающая специфику творческой деятельности[1].

Под эвристикой понимают совокупность приёмов и методов, облегчающих и упрощающих решение познавательных, конструктивных, практических задач[2].

Эвристика связана с психологией, физиологией высшей нервной деятельности, кибернетикой.

Как наука эвристика развивается на стыке философии, психологии, теории искусственного интеллекта, структурной лингвистики, теории информации, математики и физики[3].
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767245
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ возьму на себя смелость и процитирую википедию.
В данном обсуждении под эвристикой понимается конкретная находка пути упрощения решения. Само слово эвристика происходит от известного случая с Архимедом, когда внезапно в голову пришла умная мысль. Вот так же точно и нашим участникам внезапно в голову может прийти некая полезная мысль, она и будет той эвристикой, которая упростит решение.

Вообще же в википедии определение не полное, оно не учитывает одну мысль, ту самую, которая к Архимеду пришла. Хотя может уже даже сочинили целую науку "эвристику", но я никогда не встречал использования этого слова в контексте указания на какую-либо науку, а вот в контексте указания на на отдельную полезную мысль - многократно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767275
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи ученые, доценты с кандидатами!

А решение на поверхности!
Просто лень расписывать большую кипу бумаги формулами.
kealon(Ruslan)Gennadiy Usov,
это как то далеко от олимпиады для школьников
мы уже применяем методы, которые школьникам недоступны
пользуясь основами линейной алгебры (определитель матрицы) мы это определили, как это должен сделать школьник - непонятно
Подумаем, что делает школьник- математик, увидев эту задачку.
Давайте засечем время. Сколько нужно этого времени на задачку?

Школьник делает следующие:
1)Построил 12 уравнений, например 21795456

2)Увидел, что есть общности и заменил часть неизвестных на а1,а2,а3 и добавил уравнение баланса. Например, 21796006

3)Из 4,5,6 уравнений определил а1,а2,а3, подставил в 3-е уравнение, получил
sum = 3*х1

4)Из 7 – 10 уравнений нашел х8,х9,х10,х11 и подставляет во 2-е уравнение. Получил:
х16=х1-х14

5)Подставил х8,х9,х10,х11 в 11-е уравнение. Получил:
х16+х13-х12=4

6)Те же переменные подставил в 12-е уравнение. Получил:
х14+х12-х13=(х1+12)/2

7)Подставил (х12-х13) из уравнения 5) в уравнение 6) получил:
х1=20.
Тогда sum=60

8)Из суммы уравнений 2 и 4-6 получил:
х17=10

Самое главное: нет второго варианта для х1 и х17

9)Из 1-го уравнения и из 5) и 6) получил:

х13=(sum-28-х15-х16)/2
Далее определил х12 из 5)

Получается, что количество свободных переменных сократилось до 2х – х15 и х16.
Ведь у нас 13 уравнений (с балансом) и 15 переменных (вместе с sum).

Остальные переменные из 12-ти уравнений определяются, если есть выборка по х15 и х16.

И, конечно, далее выборка для определения х2,х3,х4,х5,х6,х7, если известны а1,а2,а3

Сколько получилось времени?
Бумаги ушло с черновиками 10 листов А4.

Можно, наверное, ещё поработать, чтобы найти х15 и х16.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нифига. Взял Турбо-Паскаль и закодил.

Кстати надо спросить у Димы. Сколько времени заняла реализация. Без перекуров и фейсбука.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767282
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

задача то с подвохом, если впрямую закодить перебор то на расчёт скорее всего никакого времени не хватит

скорее всего требуется найти, то что мы нашли по суммам и дальше как сделал Дима
это как бы идеальный и выполнимый вариант для школьника

о расчёте вручную, даже с помощью экселя, речь конечно не идёт - у школьника просто нет матаппарата
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767283
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)mayton,
задача то с подвохом, если впрямую закодить перебор то на расчёт скорее всего никакого времени не хватит

скорее всего требуется найти, то что мы нашли по суммам и дальше как сделал Дима
это как бы идеальный и выполнимый вариант для школьника

о расчёте вручную, даже с помощью экселя, речь конечно не идёт - у школьника просто нет матаппарата
У школьника только бумага и шариковая ручка
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767284
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovУ школьника только бумага и шариковая ручкатогда бы задача звучала как "найти лишнее - x17" , и всё

а не все варианты
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767287
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy UsovУ школьника только бумага и шариковая ручкатогда бы задача звучала как "найти лишнее - x17" , и всё

а не все вариантыВ результате 21798189 Я не говорю, что расчеты закончены.

Но уже прогресс:
- нет второго варианта для х1
- количество свободных неизвестных для 12 уравнения сокращено до 2-х.

Я не уверен, что на олимпиаде прокатит появление свободных неизвестных. Скорее всего, надо найти всё.
Может быть есть ещё комбинации уравнений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767289
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

смотря какая олимпиада, если по математике то вполне достаточно того что я написал, с бумагой и ручкой больше очень сложно сделать (мы это сделали довольно легко, там только осталось найти способ отклонить неправильный вариант с суммой равной 57)

если по информатике то 21798205

ИМХО, большего за адекватное время требовать от школьника наверное бессмысленно
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767292
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

смотря какая олимпиада, если по математике то вполне достаточно того что я написал, с бумагой и ручкой больше очень сложно сделать (мы это сделали довольно легко, там только осталось найти способ отклонить неправильный вариант с суммой равной 57)

если по информатике то 21798205

ИМХО, большего за адекватное время требовать от школьника наверное бессмысленноТак в сообщении 21798189 неправильный вариант с суммой равной 57 отклонен: нет второго варианта для х1 и х17
Есть только вариант х1=20, х17=10, sum=60
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767293
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bingo Quest это вобщем - то приложение для Андроида. Наверное там - семейство таких
головоломок. Но я не ставил пока. В телефоне совсем памяти нехватает для важных
приложений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767294
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

ну тогда матвариант как бы всё
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767296
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

ну тогда матвариант как бы всёА кто-нибудь на топике говорил о кругах Эйлера?

Что-то похожее у нас...
Сейчас смотрю в интернете
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767298
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНифига. Взял Турбо-Паскаль и закодил.

Кстати надо спросить у Димы. Сколько времени заняла реализация. Без перекуров и фейсбука.
Во-первых надо уметь кодить.

Версия 1.0 пара часов, она тут не показана, но результаты ее работы упоминались.

Проработка алгоритма в уме несколько дней в свободное время.

Версия 2.0: час на отладку next_combination() и полчаса на все остальное.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767300
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... вот. Проработка в уме несколько дней. Не укладывается в разумное время для олимпиады.

Моя версия приложения с deep search - где-то так-же. И работает только в теории.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767301
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНу... вот. Проработка в уме несколько дней. Не укладывается в разумное время для олимпиады.

Моя версия приложения с deep search - где-то так-же. И работает только в теории.Кстати, круги Эйлера есть и для 5-го класса
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767312
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... вот. Проработка в уме несколько дней. Не укладывается в разумное время для олимпиады.

Моя версия приложения с deep search - где-то так-же. И работает только в теории.
Тут важно даже не сколько дней, т.к. это можно и за час переосмыслить.
Важно что параллельно подкинули альтернативные идеи 21793586 .
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767313
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что до той эврики,так я и начал глядеть на круги: из этих получаем то, из этих - следующее... Потом не хватило пальцев, что бы тыкать и ещё заподозрил неоднозначность, а это уже как-то не очень для школьников. Квадраты думал рисовать, вычеты, но не пошло))
Так что всё у нас пучком.
kealon(Ruslan)ну тогда матвариант как бы всё Не рассматривали собственные числа, но это экзотика.
А кто со знанием лин. алгебры, могут добавить, дойдя до независимых штучек, что теперь, мол, достаточно угадать или найти 1 решение, выписать общее решение однородной системы, и,перебирая его, складывать с первым решением. Вместо подстановки в уравнения.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767317
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята. Все эти детерминанты. Крамеры. Гауссы Жорданы и Зейдели. Это все не про олимпиаду.

Олимпиада по математике - это другое. Это должно быть как озарение. Как вспышка. Посидел
подумал. И решил.

По информатике - примерно то что написал Дима. Хардкодно. Одной простыней. Но решаемо.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767350
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Хардкодно если это сделано тупым перебором чисто за счёт техники это плохо (эта задача таких обломает и этим она хороша). Но последнии тенденции говорят, что классическая олимпиада уже мало где нужна
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767364
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сообщению 21798189 можно добавить следующие уравнения:

10) Из последних 6-ти уравнений выбрал те, в которых х9 и х11.
Подставил в 1-е уравнение, получил:
2*(х9+х11)=sum-36

11)Подставил во 2-е уравнение (или как в 10) для х8 и х10), получил:
2*(х8+х10)=sum-12
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767375
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРебята. Все эти детерминанты. Крамеры. Гауссы Жорданы и Зейдели. Это все не про олимпиаду.
Разговор был не про олимпиаду. Вопрос ставился: можно ли решить эту задачу чисто математически? Похоже что нет.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767376
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему мы решили, что это олимпиада для школьников?

Посмотрите на начальную картинку:

- bingo квест
- стенд с ячейками
- остаток от слова информация?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767452
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)mayton,

Хардкодно если это сделано тупым перебором чисто за счёт техники это плохо (эта задача таких обломает и этим она хороша). Но последнии тенденции говорят, что классическая олимпиада уже мало где нужна
Во мне борются две личности. Одна как-бе говорит что Олимпиада нужна. Нужны ясные и светлые головы
для новых прорывов в науке и технике. Церебральный сортинг. Как-бы сказал Савельев.

Коммунисты кстати на рубеже начала 20-го века очень сильно подняли науку просто активно
вводя детишек в ВУЗы. Уж не помню была-ли это политика партии. Надо почитать. Но совершенно
убежден что это было именно решение политическое. Страна готовилась к будущей войне и ей
были нужны свои строители танков и самолетов. Задача прим. Тык-скыть.

А другая личность во мне (которая близка к It) говорит что не надо нанимать на проект олимпиадника.
Ну... просто не надо. Такое вот у меня личное предпочтение.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767474
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА другая личность во мне (которая близка к It) говорит что не надо нанимать на проект олимпиадника.
Ну... просто не надо. Такое вот у меня личное предпочтение.Кажется на хабре был довольно дельный разбор кого и куда надо нанимать
Если у вас рутина и копать от сюда и до обеда, то смысла нет
Если это исследовательские задачи, то середнячки бессмысленная трата ресурсов
но в жизни всегда где-то между

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

Самое интересное, что многие олимпиадники по моему опыту могут забуксовать на квалификационных задачах, где надо просто тупо написать цикл. Привычка искать подвох играет злую шутку.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767535
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TmaytonРебята. Все эти детерминанты. Крамеры. Гауссы Жорданы и Зейдели. Это все не про олимпиаду.Разговор был не про олимпиаду. Вопрос ставился: можно ли решить эту задачу чисто математически? Похоже что нет.Ещё раньше было ясно, что нельзя.

Это связано с определением х2,х3,х4,х5,х6,х7, если известны а1,а2,а3.
Здесь только перебор, который можно упростить с помощью определенных алгоритмов.

А проводимые на топике действия направлены на поиск формул, упрощающих определение а1,а2,а3.
В частности, поиск формул, уменьшающих число свободных переменных.
Пока остаются 2 свободные переменные.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767611
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВопрос ставился: можно ли решить эту задачу чисто математически? Похоже что нет.
Что такое "чисто математически"?

Перебор есть законная часть математических решений, если что. Вопрос только в его количестве.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767617
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Программирование как искуство вообще противоестественная большинству отрасль, основная масса людей копипасты - особенность эволюции вида.
Программирование - не искусство. Теория программирования - это уже математика. А само программирование - обычные слесаря обычным напильником пилят.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767619
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Dima TВопрос ставился: можно ли решить эту задачу чисто математически? Похоже что нет.
Что такое "чисто математически"?

Перебор есть законная часть математических решений, если что. Вопрос только в его количестве.
Используя только ручку и бумагу, без программирования.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767640
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Talex55555Что такое "чисто математически"?
Перебор есть законная часть математических решений, если что. Вопрос только в его количестве.
Используя только ручку и бумагу, без программирования.Я тоже за "чисто математическое" решение:
сначала ручка и бумага, много бумаги, выработка схемы программирования, и уже затем программирование.

Допускаю, что при "чисто математическом" решении могут быть отдельные оценочные программы.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767643
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555kealon(Ruslan)Программирование как искуство вообще противоестественная большинству отрасль, основная масса людей копипасты - особенность эволюции вида.
Программирование - не искусство. Теория программирования - это уже математика. А само программирование - обычные слесаря обычным напильником пилят.Изучайте первоисточник, хотя бы вики:

"Теория языков программирования (англ. programming language theory, PLT) — раздел информатики, посвящённый вопросам проектирования, анализа, определения характеристик и классификации языков программирования и изучением их индивидуальных особенностей. Тесно связана с другими ветвями информатики, результаты теории используются в математике, ..."
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767646
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Самое интересное, что многие олимпиадники по моему опыту могут забуксовать на квалификационных задачах, где надо просто тупо написать цикл. Привычка искать подвох играет злую шутку.А зачем олимпиадникам тупо писать цикл.

Олимпиадники должны придумать оптимальную схему или логику решения, а тех, кто пишет правильные циклы, в наше время хватает.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767667
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovА зачем олимпиадникам тупо писать цикл.

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

если у тебя большой "багаж", то решить ты можешь больший круг задач, но подбор вариантов тоже время, и на узком круге задач ты проиграешь тому кто знает как решать именно только этот тип задач, у него просто не будет сомнений
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767676
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy UsovА зачем олимпиадникам тупо писать цикл.
Олимпиадники должны придумать оптимальную схему или логику решения, а тех, кто пишет правильные циклы, в наше время хватает.это утрировано естественно, т.е. типовая разжёванная задача
если у тебя большой "багаж", то решить ты можешь больший круг задач, но подбор вариантов тоже время, и на узком круге задач ты проиграешь тому кто знает как решать именно только этот тип задач, у него просто не будет сомненийЕсли ещё раз посмотреть в вики (там много всего, главное разобраться), то в начале следует "Математическое описание решения задачи. " http://www.turbopro.ru/index.php/osnovy-programmirovaniya/6836-algoritmy-razrabotka-algoritma-resheniya-zadachi

Вот олимпиадник и должен сделать это описание.

А без хорошего описания не будет хорошей программы.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вы о чем? Какое описание? Его некогда делать. Олимпиада - это решение за 2-3 часа.

Кому вы что будете описывать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767713
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа вы о чем? Какое описание? Его некогда делать. Олимпиада - это решение за 2-3 часа.

Кому вы что будете описывать?Я чувствую, что Вы забежали на время с другого топика и оказались не в теме.

Здесь шел разговор об участии олимпиадников в "решении задач народного хозяйства".

Если говорить конкретно об олимпиаде, то и там нужно сначала получить хорошее математическое описание, затем математическое решение или, если есть компьютеры, компьютерное решение.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767760
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonДа вы о чем? Какое описание? Его некогда делать. Олимпиада - это решение за 2-3 часа.

Кому вы что будете описывать?Я чувствую, что Вы забежали на время с другого топика и оказались не в теме.

Здесь шел разговор об участии олимпиадников в "решении задач народного хозяйства".

Если говорить конкретно об олимпиаде, то и там нужно сначала получить хорошее математическое описание, затем математическое решение или, если есть компьютеры, компьютерное решение.
Ты наверное вынырнул из НИИ СССР. Где Техническое задание было документом. Так вот. Я немало лет в It.
Нету такого документа. Не видел. И еще ни разу не видел полного (100% покрывающего предметную область описания). Не пишут такого.
И эффективность разработки сегодня например определяется не только скиллами разраба. Если-б было так (тут я горько вздыхаю).
Оно еще определяется способностью лидеров и бизнес-аналитиков коммуницировать с владельцем программного
продукта. Взаимодействовать долго. И выяснять что имелось в виду. И если задача чуть сложнее чем сайт-визитка - то
на нее практически невозможно написать описание с одного раза. Я гарантирую это.

Ты спросишь - почему я говорю о разработке? А очень просто. Мы - в форуме разработчиков.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767763
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

авторОтказ от языка блок-схем при разработке алгоритма и разработка алгоритма сразу на языке программирования приводит к значительным потерям времени, к выбору неоптимального алгоритма. Поэтому необходимо изначально разработать алгоритм решения задачи на языке блок-схем, после чего алгоритм перевести на язык программирования. спасибо, очень смешно

говорят люди "про себя"(не вслух) научились читать совсем недавно ...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767769
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лично для себя практически никогда не рисовал блок-схемы как таковые. Мне это было не нужно.

Описание на псевдо-языке было. На АЯ. Были скрипто-подобные прототипы. Были просто формулы и
загадочные рисунки со стрелками которые не были блок схемы. А так. Типа скетч. Как маркером
на магнитной доске.

Пару раз я рисовал блок-схемы их в презнетациях чтоб показать что-то для заинтересованных лиц
которые не были кодерами но в принципе понимали эти картинки.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767772
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,
авторОтказ от языка блок-схем при разработке алгоритма и разработка алгоритма сразу на языке программирования приводит к значительным потерям времени, к выбору неоптимального алгоритма. Поэтому необходимо изначально разработать алгоритм решения задачи на языке блок-схем, после чего алгоритм перевести на язык программирования. спасибо, очень смешно
говорят люди "про себя"(не вслух) научились читать совсем недавно ...Сначала не понял, кто этот автор. Поискал и понял, что это сказал не я.
Уже хорошо.

Автор имеет свою точку зрения на то, что надо мыслить блоками и рисовать блок-схемы.

Разумность в этом есть, однако все свои блок-схемы мы прорабатываем в голове.
Зачем переводить бумагу, если и так ясно, что это следует за этим, а потом это идёт туда и возвращается, т.д.

Кому как нравится.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767779
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovЯ чувствую, что Вы забежали на время с другого топика и оказались не в теме.
Здесь шел разговор об участии олимпиадников в "решении задач народного хозяйства".
Если говорить конкретно об олимпиаде, то и там нужно сначала получить хорошее математическое описание, затем математическое решение или, если есть компьютеры, компьютерное решение.
Ты наверное вынырнул из НИИ СССР. Где Техническое задание было документом. Так вот. Я немало лет в It.
Нету такого документа. Не видел. И еще ни разу не видел полного (100% покрывающего предметную область описания). Не пишут такого.
И эффективность разработки сегодня например определяется не только скиллами разраба. Если-б было так (тут я горько вздыхаю).
Оно еще определяется способностью лидеров и бизнес-аналитиков коммуницировать с владельцем программного
продукта. Взаимодействовать долго. И выяснять что имелось в виду. И если задача чуть сложнее чем сайт-визитка - то
на нее практически невозможно написать описание с одного раза. Я гарантирую это.

Ты спросишь - почему я говорю о разработке? А очень просто. Мы - в форуме разработчиков.Да, я был и в НИИ и в КБ, и там, при разработке программного продукта для изделия было Техническое задание, Технический проект. Так надо было.

Сейчас, наверное, в таких организациях есть что-то подобное, может быть по другому называется, но такие документы есть. Без этого нельзя. Иначе анархия. А за этим стоит создание изделия.

А насчет "способности лидеров и бизнес-аналитиков коммуницировать с владельцем программного продукта."?

Есть интересный пример - создание шифра. В этом процессе есть математика и есть программирование. Какое из этих направлений определяет процесс создании? Только не говорите, что эти направления работают локоть в локоть.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767781
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovСейчас, наверное, в таких организациях есть что-то подобное, может быть по другому называется, но такие документы есть. Без этого нельзя. Иначе анархия. А за этим стоит создание изделия.

Да. Обычно это набор документов. Типа Software Requirements (SR). Там на обычном языке
описано что хочется людям сделать. И этот документ обычно очень поверхностный.
По факту исходный код приложения несет 100% верную информацию. Вернее он обычно
актуален а SR - датируется датой создания и все.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767783
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЯ лично для себя практически никогда не рисовал блок-схемы как таковые. Мне это было не нужно.
Описание на псевдо-языке было. На АЯ. Были скрипто-подобные прототипы. Были просто формулы и
загадочные рисунки со стрелками которые не были блок схемы. А так. Типа скетч. Как маркером
на магнитной доске.
Пару раз я рисовал блок-схемы их в презнетациях чтоб показать что-то для заинтересованных лиц
которые не были кодерами но в принципе понимали эти картинки.Вы забыли важную вещь - Вы рисуете блок-схемы всегда, когда расписываете в программе построение внутренних процедур и операторов.

Рисуете не в классическом понимании - ватман, метр на метр (забыл, какой там формат), или бумага А4,
а "рисуете" сразу на компьютере (зачем тратить бумагу, а потом заводить в компьютер - трата времени, надо быстро, быстро) в виде последовательностей процедур и операторов с циклами и возвратом, и куда перейти.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767788
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovСейчас, наверное, в таких организациях есть что-то подобное, может быть по другому называется, но такие документы есть. Без этого нельзя. Иначе анархия. А за этим стоит создание изделия.
Да. Обычно это набор документов. Типа Software Requirements (SR). Там на обычном языке
описано что хочется людям сделать. И этот документ обычно очень поверхностный.
По факту исходный код приложения несет 100% верную информацию. Вернее он обычно
актуален а SR - датируется датой создания и все.Не что хочется, а что требуется.
Вряд ли документ ТПО поверхностный, там должны быть некоторые предварительные требования.

Да, в процессе работы ТПО дорабатывается, и его окончательный вариант совпадает с датой создания продукта. Как мне кажется.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767789
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovДа, в процессе работы ТПО дорабатывается, и его окончательный вариант совпадает с датой создания продукта. Как мне кажется.
Нет.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767790
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGennadiy UsovДа, в процессе работы ТПО дорабатывается, и его окончательный вариант совпадает с датой создания продукта. Как мне кажется.
Нет."Нет" к какому глаголу? Есть 3 варианта и 3 сочетания.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767791
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovmaytonпропущено...

Нет."Нет" к какому глаголу? Есть 3 варианта и 3 сочетания.
Релиз (версия) программного продукта содержит сам продукт. И короткий текстовый файлик
типа Release Notes в котором описаны основные изменения или фичи которые зашли
в этот релиз.

Архитектурные документы или требования или всякие прочие - никто обычно не меняет.
Это никому не нужно. Разработчикам хватает исходного кода.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767800
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonРелиз (версия) программного продукта содержит сам продукт. И короткий текстовый файлик
типа Release Notes в котором описаны основные изменения или фичи которые зашли
в этот релиз.
Архитектурные документы или требования или всякие прочие - никто обычно не меняет.
Это никому не нужно. Разработчикам хватает исходного кода....исходного кода и, если есть, исходного математического аппарата.

Но исходный код кто-то создал для разработчиков продукта?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767809
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

логично предположить что они сами и создали, потому им различные костыли и не нужны

в современных программах очень мало сложной логики, и она обычно уже вынесена в библиотеки, которые подавляющее большинство просто использует как может
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767812
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, не хочется выходить из темы? о чём спор? вот этому лет полста уже,и до сих пор актуально,для боле-мене сложных тем.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767849
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovТеория языков программирования (англ. programming language theory, PLT) — раздел информатики...
В вики довольно произвольно используют понятия. Да и не только в вики. Но смысл в чём - математики создали программирование. Без математиков не получается развивать всяческие передовые направления. Обычный программист никогда не напишет сложный алгоритм, он этого просто не умеет. Либо он должен стать математиком, ну хотя бы немного. Но таких в программировании мало, потому что большинство задач очень простые - взять данные из БД, чуть подправить и нарисовать их в виде веб-страницы - вот собственно и всё. Бывают вариации, но суть не меняется - всё довольно просто. И если программистам надо систему уравнений решить, то они ищут библиотеку, а не пишут сами, ибо готовое быстрее запустить в работу. В результате часто получается нагромождение всего и вся, но пока это нагромождение не падает при первом дуновении ветра - оно всех устраивает. Так что какая уж тут математика. Один большой напильник.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767884
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Gennadiy UsovТеория языков программирования (англ. programming language theory, PLT) — раздел информатики...В вики довольно произвольно используют понятия. Да и не только в вики. Но смысл в чём - математики создали программирование. Без математиков не получается развивать всяческие передовые направления. Обычный программист никогда не напишет сложный алгоритм, он этого просто не умеет. Либо он должен стать математиком, ну хотя бы немного. Но таких в программировании мало, потому что большинство задач очень простые - взять данные из БД, чуть подправить и нарисовать их в виде веб-страницы - вот собственно и всё. Бывают вариации, но суть не меняется - всё довольно просто. И если программистам надо систему уравнений решить, то они ищут библиотеку, а не пишут сами, ибо готовое быстрее запустить в работу. В результате часто получается нагромождение всего и вся, но пока это нагромождение не падает при первом дуновении ветра - оно всех устраивает. Так что какая уж тут математика. Один большой напильник.Согласен, что математики создали не только программирование, а много ещё чего.

Согласен, что программисты варятся в существующих методах программировании, реже создают свои программы.

А что далеко ходить: сравните на данном форуме количество внутренних задач программирования и внешних задач - реализация методов программирования.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767919
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovА что далеко ходить: сравните на данном форуме количество внутренних задач программирования и внешних задач - реализация методов программирования.механиков нужно меньше чем водителей
PS: на данный момент...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39767927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайдите в форум андроида. Плакать хочется. Нет алгоритмических задач. Один ui. Тоска и уныние.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768221
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗайдите в форум андроида. Плакать хочется. Нет алгоритмических задач. Один ui. Тоска и уныние.
Само ведро это всё стимулирует. Оно ужасно. Вместо некой общей модели ресурсов под управлением оси предоставляется набор убогих недо-моделек, которые не увязаны между собой, плохо документированы, постоянно глючат, решают очень узкие задачи. В результате народ соревнуется в запоминании хаков и трюков, которые ведро-писатели в каждой новой версии упорно выпиливают,заставляя народ снова и снова искать очередной убогий хак. Хотя иногда до недоумков из гугла всё же доходит людской стон и они расширяют свой API, но естественно - кусочно, убого, так же глючно, архитектурно безграмотно и т.д. и т.п. В итоге народ вынужден поддерживать десятки вариантов работы программы ради обеспечения её работоспособности на нескольких основных версиях ведра. А версии эти гугло-недоумки клепают раз в несколько месяцев, и вот каждую версию нужно всё проверять, что отвалилось, потом как это починить, потом как обновить безболезненно, что бы ещё и на старых устройствах работало. В общем - к огромному сожалению массовый продукт сделан откровенными идиотами, которые являют собой самый яркий пример "напильников" в программировании. Очень плохой пример. А как представишь, вот если бы ну пусть не математики, но хотя бы просто вменяемые архитекторы это всё проектировали...

Хотя с другой стороны ведро всё же предоставляет ряд интересных возможностей, надо отдать должное детишкам из гугла, они ради детского вау-фактора всё же запилили более расширенный API работы с датчиками и коммуникацией, по сравнению с другими. Но на этом все радости кончаются. Остальное - рвано-кусочный трэш, придуманный обкуренными травой "изобретателями" из силиконовой долины. И что интересно - этим "изобретателям" гуглы платят огромные деньги за их обкуренность.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768250
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не спец в мобильной разработке. Готов поверить на слово.

А как обстоят дела в iPhone? У них раньше был Objective C в вакансиях. Щас вроде что-то другое нашли.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768316
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЗайдите в форум андроида. Плакать хочется. Нет алгоритмических задач. Один ui. Тоска и уныние.
Следовательно, надо задачи создавать самим

Было ранее: "Нечего ждать милости...."
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768346
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что телефон сам по себе - устройство энерго-экономное. И какие либо суровые алгоритмы
типа расстановки ферзей на нем работать не будут. Тоесть они конечно будут работать. Но Cortex, это не Intel.
И производительность на порядок ниже для обычных вычислительных задач которые мы там гоняем.

Запустите задачу - телефон нагреется как утюг. И посадит батарейку за 1 час. Вам это надо?

Да там есть специальная аппаратура для ускорения 3д графики. Но вы еще попробуйте ее задействовать
для ферзей. Это задача не тривиальная. А хотя-бы и задействовали - тогда второй вопрос. Почему не в ПК.
Там это-же железо мощнее в 100 раз будет.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768422
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДело в том что телефон сам по себе - устройство энерго-экономное. И какие либо суровые алгоритмы
типа расстановки ферзей на нем работать не будут. Тоесть они конечно будут работать. Но Cortex, это не Intel.
И производительность на порядок ниже для обычных вычислительных задач которые мы там гоняем.

Запустите задачу - телефон нагреется как утюг. И посадит батарейку за 1 час. Вам это надо?

Да там есть специальная аппаратура для ускорения 3д графики. Но вы еще попробуйте ее задействовать
для ферзей. Это задача не тривиальная. А хотя-бы и задействовали - тогда второй вопрос. Почему не в ПК.
Там это-же железо мощнее в 100 раз будет.Вас опять зацикливает на ферзях. А там всё уже ясно 21705105 .

А что, кроме ферзей ничего нет перед глазами?

И почему телефон? Я и, думаю, многие работают на компьютере, в моём случае на настольном.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov, я кладу руку на лицо... Android - это операционная система для телефонов. Может быть
я иногда сильно краток? И некоторые мои слова .. не из вашего поколения. Так вы спрашивайте.

Я отвечу.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768450
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, наше поколение всё понимает.
И не надо закрывать лицо руками. Снова что-то не увидите.

Так что Вам там мешает? Спрашивайте, подскажем...
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768452
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Вы-же на бумаге работаете. И в Excel.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768461
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЗачем? Вы-же на бумаге работаете. И в Excel.Это сейчас.

А есть ещё многолетний опыт.

Как известно, отличный анекдот - это хорошо забытый старый анекдот.

Всё, что сейчас происходит, уже было, только с другими параметрами и на других установках.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768486
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovИ не надо закрывать лицо руками
https://ru.wikipedia.org/wiki/Facepalm
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768536
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonЗачем? Вы-же на бумаге работаете. И в Excel.Это сейчас.

А есть ещё многолетний опыт.

Как известно, отличный анекдот - это хорошо забытый старый анекдот.

Всё, что сейчас происходит, уже было, только с другими параметрами и на других установках.
Ну хорошо. Что твой многолетний опыт говорит о системах распознавания образов.
В частности меня интересует преобразование Хафа. И его применение для определения дефектов сканирования текстовых документов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768589
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я об этом 21791512
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768614
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНу хорошо. Что твой многолетний опыт говорит о системах распознавания образов.
В частности меня интересует преобразование Хафа. И его применение для определения дефектов сканирования текстовых документов.Мой многолетний опыт подсказывает, что определение дефектов сканирования - очень серьёзная проблема.

И тот же опыт советует мне задать один вопрос:

а почему Вы решили, что скан текста имеет дефекты?

А поскольку Вы скажете (я предугадываю), что у всякого скана есть дефекты, то сразу второй вопрос:

а чем отличается скан дефектный от недефектного (на примере хотя бы одного символа)?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топика мы обсуждали поворот листа бумаги на случайный угол.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768624
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВ топика мы обсуждали поворот листа бумаги на случайный угол.Всё равно, почему система не может считать символ, что ей мешает ( на примере одного символа)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768630
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВ топика мы обсуждали поворот листа бумаги на случайный угол.Хороша, повернули на 12 градусов - дефект. На 0 градусов - нормально.

Где грань, и почему эта грань существует, за счет чего появляется?

Что в программе (алгоритме) такое, что с какого-то градуса появляется дефект?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768632
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте так. Здесь мы обсуждаемых комбинаторику. А дефекты скан копий в другом топике.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768637
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Было одно:maytonНу хорошо. Что твой многолетний опыт говорит о системах распознавания образов.
В частности меня интересует преобразование Хафа. И его применение для определения дефектов сканирования текстовых документов.Далее совсем другое:maytonДавайте так. Здесь мы обсуждаемых комбинаторику. А дефекты скан копий в другом топике.Мы говорим о системах распознавания образов, а не о путях применения преобразования Хафа.
Если есть трудности у существующих систем, то либо преобразование Хафа, либо что-то другое - это зависит от точки зрения на проблему.

А говорить о том, что про это не надо говорить - это что-то непонятное в математическом анализе.

Мой многолетний опыт говорит о том, что надо сначала понять:
из-за чего существующие системы не работают при определённых условиях!
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768648
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, капитан. Твоя помощь неоценима.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768659
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
всегда рад помочь.

Обращайтесь ещё.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768699
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА как обстоят дела в iPhone?
Я сам не писал, но по отзывам впечатление двоякое. То есть с одной стороны детишки везде найдут повод для недовольства, а с другой стороны даже они реально впечатляются некоторыми "вкусностями", которые я перевожу на язык грамотного проектирования. Так например они рады ифонному эмулятору, который летает, не глючит, и вообще удобен, а вот гугловый эмулятор - в принципе можно научить летать, если не писать натив, или научиться постоянно перекомпилировать под интеловские процессора перед запуском на эмуляторе, а вот в плане глючности и удобства - гугловый эмулятор полный отстой. Так же по работе с анимацией в ифоне всё серьёзнее. На ведре всё тупо - обычная многопоточная система с одинаковыми приоритетами всех потоков, в том числе для обработки всего связанного с экраном, поэтому если не уделять внимания работе GC - анимация будет дёргаться, при чём независимо от потока, который рисует, потому что GC общий. А в ифоне такого нет, там сразу графике отвели высокий приоритет и поэтому сторонние потоки не влияют на плавность. Вот в таком духе по отдельным вопросам наблюдаю работу более или менее вменяемых архитекторов именно в ифоне, а в ведре - одни придурки проектировали. Ну а как их ещё назвать?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768701
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovГде грань, и почему эта грань существует, за счет чего появляется?
Грань в деталях алгоритма распознавания символов. Например - алгоритм ожидает вертикальное расположение символов, значит в пределах некой погрешности, допустимой именно для вертикального расположения, символы будут распознаваться, но когда либо за счёт поворота, либо за счёт чего угодно ещё (объектив не резкий, дрожь при съёмке, царапина на бумаге) погрешность превышается - распознавание не получается.

Для устранения влияния погрешностей нужно научиться их правильно фильтровать. Так для поворотов по сути есть лишь один метод - вращать изображение, пока оно не распознается. И вот так по всем видам погрешностей. То есть по сути очень просто - берёт и пишите все возможные алгоритмы обработки всех возможных погрешностей. Ведь просто? Сплошная комбинаторика.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768705
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и по задачке. Я попробовал покрутить уравнения "на бумаге" (в блокноте то есть, без ёкселя и программ) и у меня получился перебор вариантов на 20-30, но как-то мне быстро надоело после проверки первых 10 вариантов - они все не подошли. Не знаю, может упорный школьник на олимпиаде перебрал бы и 30 вариантов, но на это ведь надо время, да ещё и на бумаге. Не уложится даже знающий как всё решать в отводимое под олимпиаду время (часа 3). Сначала нужно уравнения вывести, потом посокращать, потом вывести ограничения, потом получить 20-30 вариантов, потом их перебрать, а всё это - время. Плюс ошибки и возврат в начало. В общем мне всё не даёт покоя мысль - диаметры с кругами перепутаны. Если их поменять, то наверняка хотя бы перебор сократится, что даст нашему школьнику решить задачку в отведённый срок (3 часа).
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768716
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Да, и по задачке. Я попробовал покрутить уравнения "на бумаге" (в блокноте то есть, без ёкселя и программ) и у меня получился перебор вариантов на 20-30, но как-то мне быстро надоело после проверки первых 10 вариантов - они все не подошли. Не знаю, может упорный школьник на олимпиаде перебрал бы и 30 вариантов, но на это ведь надо время, да ещё и на бумаге. Не уложится даже знающий как всё решать в отводимое под олимпиаду время (часа 3). Сначала нужно уравнения вывести, потом посокращать, потом вывести ограничения, потом получить 20-30 вариантов, потом их перебрать, а всё это - время. Плюс ошибки и возврат в начало. В общем мне всё не даёт покоя мысль - диаметры с кругами перепутаны. Если их поменять, то наверняка хотя бы перебор сократится, что даст нашему школьнику решить задачку в отведённый срок (3 часа).Очень тяжело перепрыгнуть: 13 уравнений и 15 неизвестных. Здесь - хоть разбейся, перебор для 2-х свободных переменных.
А дальше всё равно перебор 21798672 .

Всё что пока можно, то: 21798189 и 21798389 .
Может быть можно будет найти и другие, упрощенные уравнения для зависимости одних переменных от других переменных.

А насчет олимпиады? Сейчас полно в интернете математических задач, которые используются в разных проектах.
В частности, наша задачка: 21798405
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768732
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovВсё что пока можно, то: 21798189 и 21798389
Это не совсем "всё что можно".

Иксы 15 и 16 группируются в (х15+х16)/2=s и (х15-х16)/2=d. Из остальных уравнений, ограничения на набор чисел и условия целочисленности выводятся ограничения, которые позволяют сократить перебор до упомянутых 20-30 вариантов. Если повтыкать ещё в уравнения и ограничения, то можно ещё сократить перебор (не боле 10 вариантов, надеюсь). Но проблема в том, что я не представляю, как это всё сделать за 3 часа. Я с позиции сегодняшнего понимания проблемы, зная как и что перебирать, в каком порядке возиться с уравнениями и т.д. всё же не впечатляюсь мыслью о выполнении всей этой работы для "не перепутанного" варианта 6 диаметров 3 круга, то есть даже зная как всё найти и каков будет результат, я могу не уложиться в 3 часа, ну и сами 3 часа (или больше) тратить неохота на задачу, которая давно решена в общем случае. Вот такое у меня пока понимание. А значит и школьники столкнутся с трудностями. Хотя не исключаю варианта с обычным бюрократом, которому поручили нарыть задачки для олимпиады, ну и про проблемы индейцев (школьников) этот шериф, безусловно, ни разу даже не задумывался. Но если всё же эту задачку кто-то решал на олимпиаде и укладывался в отведённое время - то как? Непонятно.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768743
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Gennadiy UsovВсё что пока можно, то: 21798189 и 21798389
Это не совсем "всё что можно".

Иксы 15 и 16 группируются в (х15+х16)/2=s и (х15-х16)/2=d. Из остальных уравнений, ограничения на набор чисел и условия целочисленности выводятся ограничения, которые позволяют сократить перебор до упомянутых 20-30 вариантов. Если повтыкать ещё в уравнения и ограничения, то можно ещё сократить перебор (не боле 10 вариантов, надеюсь). Но проблема в том, что я не представляю, как это всё сделать за 3 часа. Я с позиции сегодняшнего понимания проблемы, зная как и что перебирать, в каком порядке возиться с уравнениями и т.д. всё же не впечатляюсь мыслью о выполнении всей этой работы для "не перепутанного" варианта 6 диаметров 3 круга, то есть даже зная как всё найти и каков будет результат, я могу не уложиться в 3 часа, ну и сами 3 часа (или больше) тратить неохота на задачу, которая давно решена в общем случае. Вот такое у меня пока понимание. А значит и школьники столкнутся с трудностями. Хотя не исключаю варианта с обычным бюрократом, которому поручили нарыть задачки для олимпиады, ну и про проблемы индейцев (школьников) этот шериф, безусловно, ни разу даже не задумывался. Но если всё же эту задачку кто-то решал на олимпиаде и укладывался в отведённое время - то как? Непонятно.Посмотрите на начальную картинку:
- bingo квест
- стенд с ячейками
- остаток от слова информация?

Какая это олимпиада?

Просто где-то повесили на стенд задачку в виде информации. И всё!

Там полно других листков на стенде.

И Вы всерьёз верите, что из 13 уравнений можно определить 15 неизвестных?

А насчет времени? Попробуйте определить время, которое необходимо для определения 13 неизвестных? 21798189
А дальше?

Может быть засчет перебора х15 и х16 определяются остальные, причем тут же часть вариантов можно отвергнуть - уже были такие числа.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768812
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovИ Вы всерьёз верите, что из 13 уравнений можно определить 15 неизвестных?
Конечно. Просто ограничений больше.
Gennadiy UsovПопробуйте определить время, которое необходимо для определения 13 неизвестных?
Пробовал, потому и говорю.

Но всё же задача кривая. Взял я уравнения kealon(Ruslan)-а отсюда - 21797368 , и проверил их на Диминых решениях отсюда - 21794557 . Решения не сходятся. Поэтому я получал в своих потугах отрицательный результат. Дима считал что-то не то, либо уравнения составлены не для тех параметров, что здесь нужны. Если напрячь фантазию, то круги эти увидеть можно, но они абсолютно контр-интуитивны. Круги сходятся с уравнениями kealon(Ruslan)-а, а вот Димины решения - нет. Не знаю, кто здесь не прав, вполне возможно это составители задачи.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768813
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, наврал, это я не так посчитал. Так что сходится результат Димы с уравнениями. Но у меня почему-то не вышло из уравнений его вывести, из-за этого подумал, что косяк, но вставил напрямую в суммы и всё сошлось.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768818
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка похожа на шахматный эндшпиль. Нету чистой формулы решения. Есть просто некие
коридоры возможностей типа рекуррентного применения расстановки чисел и несколько листовых
вершин этого дерева которые удовлетворяют решению.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768937
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача, видимо, про теорию групп.

Есть группа с операцией перестановки, которая должна удовлетворять критерию постоянства некой суммы. Решения задачи есть множество сочетаний элементов группы. Возможно, где-то в глубинах этой теории есть подходы к решению таких задач, я так далеко не нырял. Но даже без теории групп задачка имеет ещё потенциал, и очень даже приличный. Так например Kelaon зачем-то сложил два уравнения, мол что-то там избыточное или что, но я тупо повёлся и не стал проверять, а в результате это сложение даёт 16 ложных решений. И почему они ложные, а так же ещё целый ряд интересных моментов видно из простейшей схемы:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
01 -- sum - x1 + x2 + -- + -- + x5 + -- + -- + -- + -- + --- + --- + --- + --- + --- + x15 + --- + --- + 18 + -- + -- -- 5
02 -- sum - x1 + -- + x3 + -- + -- + x6 + -- + -- + -- + --- + --- + --- + x13 + --- + --- + x16 + --- + -- + -- + -- -- 5
03 -- sum - x1 + -- + -- + x4 + -- + -- + x7 + -- + -- + --- + --- + x12 + --- + x14 + --- + --- + --- + -- + -- + -- -- 5
04 -- sum - -- + x2 + x3 + x4 + x5 + x6 + x7 + -- + -- + --- + --- + --- + --- + --- + --- + --- + --- + -- + -- + -- -- 6
05 -- sum - -- + x2 + -- + -- + x5 + -- + -- + x8 + -- + --- + --- + x12 + --- + --- + --- + x16 + --- + -- + 19 + -- -- 6
06 -- sum - -- + x2 + -- + -- + x5 + -- + -- + -- + x9 + --- + --- + --- + x13 + x14 + --- + --- + --- + -- + -- + 20 -- 6
07 -- sum - -- + -- + x3 + -- + -- + x6 + -- + -- + x9 + --- + x11 + x12 + --- + --- + --- + --- + --- + 18 + -- + -- -- 6
08 -- sum - -- + -- + x3 + -- + -- + x6 + -- + -- + -- + x10 + --- + --- + --- + x14 + x15 + --- + --- + -- + 19 + -- -- 6
09 -- sum - -- + -- + -- + x4 + -- + -- + x7 + x8 + -- + x10 + --- + --- + x13 + --- + --- + --- + --- + 18 + -- + -- -- 6
10 -- sum - -- + -- + -- + x4 + -- + -- + x7 + -- + -- + --- + x11 + --- + --- + --- + x15 + x16 + --- + -- + -- + 20 -- 6
11 -- sum - -- + -- + -- + -- + -- + -- + -- + x8 + x9 + x10 + x11 + --- + --- + --- + --- + --- + --- + -- + 19 + 20 -- 6
12 -- sum - -- + -- + -- + -- + -- + -- + -- + -- + -- + --- + --- + x12 + x13 + x14 + x15 + x16 + --- + 18 + -- + -- -- 6

-- -- --- - 3- + 4- + 4- + 4- + 4- + 4- + 4- + 3- + 3- + 3-- + 3-- + 4-- + 4-- + 4-- + 4-- + 4-- + 0-- + 4- + 3- + 3- -- 6



Здесь первая колонка - номер суммы, последняя - количество слагаемых в сумме, нижняя строка - количество элементов в столбце. Константы, безусловно, являются такими же равноправными переменными, но составители задачи эти переменные проинициализировали, а я их заменил номерами в последних трёх столбцах (12 - №18, 6 - №19, 18 - №20). Из схемы очевидно, что иксы 2,5; 3,7; 4,8 взаимозаменяемы. А после сложения, предложенного Kelaon-ом имеем добавленную взаимозаменяемость иксов 8 и 10, что и даёт 16*2=32 решения, из которых 16 ложные.

В пределах указанных пар иксов возможны не только перестановки друг с другом, но и "перетекание" части одного значения в другое, поэтому имеем 16 комбинаций, остальные, видимо, ограничиваются фиксацией 14 оставшихся переменных. Здесь ещё есть куда копать в плане понимания, как и что ограничивается, а значит и нахождения способа быстрого решения задачи. Пока видно, что кроме указанных пар остальные переменные, видимо, обязаны иметь единственное значение, но как это доказать - пока не понял. Если доказать - станет очевидно, как быстро решать такие задачи.

Ниже аналогично расположенные значения переменных, найденные Димой.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
01 -- sum - 20 + 02 + 03 + 04 + 17 + 19 + 15 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 02 + 03 + 15 + 17 + 19 + 04 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 02 + 19 + 04 + 17 + 03 + 15 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 02 + 19 + 15 + 17 + 03 + 04 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 04 + 03 + 02 + 15 + 19 + 17 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 04 + 03 + 17 + 15 + 19 + 02 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 04 + 19 + 02 + 15 + 03 + 17 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 04 + 19 + 17 + 15 + 03 + 02 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 15 + 03 + 02 + 04 + 19 + 17 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 15 + 03 + 17 + 04 + 19 + 02 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 15 + 19 + 02 + 04 + 03 + 17 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 15 + 19 + 17 + 04 + 03 + 02 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 17 + 03 + 04 + 02 + 19 + 15 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 17 + 03 + 15 + 02 + 19 + 04 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 17 + 19 + 04 + 02 + 03 + 15 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18
01 -- sum - 20 + 17 + 19 + 15 + 02 + 03 + 04 + 08 + 11 + 016 + 001 + 014 + 005 + 007 + 009 + 013 + 010 + 12 + 06 + 18

-- -- --- - -- + 2- + 1- + 2- + 2- + 1- + 2- + -- + -- + --- + --- + --- + --- + --- + --- + --- + --- + -- + -- + --
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39768981
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо приплетать сюда никакой магии, никих волшебных фраз типа теории групп.
Нет здесь никаких групп, разве что вычеты по модулю 3, но именно ими никто не воспользовался, во всяк мимо меня прошло. По памяти: в среднем круге, у меня это были E и F.
Там (E+F)=0 по модулю 3.
Лень даже смотреть, (E-F), (F-E) одно из них =2 другое =1, поскольку Е=1, F=2.
Так же лень мне было смотреть взаимозаменяемые пары на внутреннем круге, иначе бы мои 120 переборов сократились бы в неск. раз.

А метод по сути 1 - решить систему реоднородных линейных ур-й и получить выражение независимых переменных от зависимых. Я выше напоминал про линейное пространство решений однородной системы , кто забыл.
Просто на этом пути можно, скажем, в случае a=b, можно одно в левой части оставить, а можно другое. Разница будет толко в подборе значений.

В зависимости от хотелки можно вначале провести большой анализ, а можно маленький. Можно, упростив систему, провести дополнительный анализ. Повлияет на объём перебора. Однако при свежих навыках, 3 часа для этого в самый раз.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769028
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Не надо приплетать сюда никакой магии, никих волшебных фраз типа теории групп.
А метод по сути 1 - решить систему реоднородных линейных ур-й и получить выражение независимых переменных от зависимых. Я выше напоминал про линейное пространство решений однородной системы , кто забыл.
Просто на этом пути можно, скажем, в случае a=b, можно одно в левой части оставить, а можно другое. Разница будет толко в подборе значений.
В зависимости от хотелки можно вначале провести большой анализ, а можно маленький. Можно, упростив систему, провести дополнительный анализ. Повлияет на объём перебора. Однако при свежих навыках, 3 часа для этого в самый раз.Так уже всё сделано, и не надо хотелок ни с большим анализом, ни с малым анализом. 21798189 .

Напоминаю, если есть хотелки:
13 уравнений и 15 неизвестных.
2 свободных параметра.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769029
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если идти дальше, то есть ещё неравенства, и работа в конечном множестве.

Например, х16 не может иметь значения 6,10,12,18,20.
А, из уравнения х16=20-х14, получается, что для х16 не могут быть значения 2, 8, 14 (из четных, остаются только 4 и 16). Такие же значения не может иметь х14.

Далее
х12+х13 >=9
а1>=9
х13<=14 – только 1,2,3,5,7,8,9,11,13,14 (нет 4, иначе х12=х16)
х15>=3

Если выбирать х16 и х13, то получается 10 х 12 = 120 вариантов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769031
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Задача, видимо, про теорию групп.

Есть группа с операцией перестановки, которая должна удовлетворять критерию постоянства некой суммы. Решения задачи есть множество сочетаний элементов группы. Возможно, где-то в глубинах этой теории есть подходы к решению таких задач, я так далеко не нырял. Но даже без теории групп задачка имеет ещё потенциал, и очень даже приличный. Так например Kelaon зачем-то сложил два уравнения, мол что-то там избыточное или что, но я тупо повёлся и не стал проверять, а в результате это сложение даёт 16 ложных решений. И почему они ложные, а так же ещё целый ряд интересных моментов видно из простейшей схемы:
я эти два уравнения вообще удалил (количество по детерминанту определил), не нужны они, там всего 11 независимых уравнений
удалил их потому, что тогда можно было X8 + X10 одной переменной заменить

вы же сами скидывали автоматическое решение - 21797996

кстати, у вас там прямо и написано что всего 11 независимых уравнений авторdependent equations eliminated: (11)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769042
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)я эти два уравнения вообще удалил (количество по детерминанту определил), не нужны они, там всего 11 независимых уравнений
удалил их потому, что тогда можно было X8 + X10 одной переменной заменить

вы же сами скидывали автоматическое решение - 21797996

кстати, у вас там прямо и написано что всего 11 независимых уравнений авторdependent equations eliminated: (11)Значит, будет не 15, а 14 неизвестных.

Куда делись ещё 3 неизвестных?

Желательно перечисление: какие известные, а какие неизвестные
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769044
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

рисунок из 21797369 смотрите

где
Код: plaintext
1.
2.
3.
4.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]
a[4] = x[8] + x[10]
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769045
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Иксы 15 и 16 группируются в (х15+х16)/2=s и (х15-х16)/2=d. Из остальных уравнений, ограничения на набор чисел и условия целочисленности выводятся ограничения, которые позволяют сократить перебор до упомянутых 20-30 вариантов. Можно перечислить эти варианты?

Примерно, как в 21800986
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769046
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

рисунок из 21797369 смотрите

где
Код: plaintext
1.
2.
3.
4.
a[1] = x[2] + x[5]
a[2] = x[3] + x[6]
a[3] = x[4] + x[7]
a[4] = x[8] + x[10]

Сложил уравнения со звездочками из 21797369 и получилось:

а[1]+a[2]+а[4] = sum-x[13]

и что?
Что нам это даёт?

Уменьшили на одно уравнение, но появилось новое неизвестное.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769057
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

внимательно читайте, табличку в эксельке посмотрите (участвует там то уравнение или нет)
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769063
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,
внимательно читайте, табличку в эксельке посмотрите (участвует там то уравнение или нет)Тогда просто укажите те уравнения, которые остались, если не трудно.

Без таблицы они будут смотреться интереснее.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769066
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gennadiy UsovЕсли идти дальше, то есть ещё неравенства, и работа в конечном множестве.
Например, х16 не может иметь значения 6,10,12,18,20.
А, из уравнения х16=20-х14, получается, что для х16 не могут быть значения 2, 8, 14 (из четных, остаются только 4 и 16). Такие же значения не может иметь х14.
Далее
х12+х13 >=9
а1>=9
х13<=14 – только 1,2,3,5,7,8,9,11,13,14 (нет 4, иначе х12=х16)
х15>=3
Если выбирать х16 и х13, то получается 10 х 12 = 120 вариантов.Далее:
из уравнения
х12=х16+х13-4
видно, что х16 и х13 либо оба четные, либо нечетные.

Следовательно: для четных х16 будет 16 (4 нельзя) и для х13 – 2 (8 и 14 нельзя).
То есть один вариант.

Для нечетных: 10 х 7 = 70 вариантов.
х16+х13<=23.
Тогда уже 54 варианта.
Убираем:
одинаковые варианты.
х12 не может быть 6,10,12,18, 20 и более
То есть, убираем 30 вариантов.

Остаётся 24 +1 = 25 вариантов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769096
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovkealon(Ruslan)Gennadiy Usov,
внимательно читайте, табличку в эксельке посмотрите (участвует там то уравнение или нет)Тогда просто укажите те уравнения, которые остались, если не трудно.

Без таблицы они будут смотреться интереснее. 21797455
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769126
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)G
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
x[1] + a[1] + a[2] +a[3] +  a[4] + x[9] + x[11] + x[12] + x[13] + x[14] + x[15] + x[16] +  x[17]= 174
sum = 12 + x[12] + x[13] + x[14] + x[15] + x[16]; // Внешний круг
sum = 18 + 6 +  a[4] + x[9] + x[11] // Средний круг
sum = a[1]  + a[2] + a[3] // Внутренний круг
sum = 12 + a[1] + x[1] + x[15] // Диаметр горизонтальный
sum = x[14] + a[3] + x[1] + x[12] // Диаметр cлева направо
sum = x[13] + a[2] + x[1] + x[16] // Диаметр cправа налево
// ~Шесть кругов
sum = 12 + x[9] + a[2]+ x[11] + x[12]
sum = 12 + x[13] + a[3] + a[4]
sum = x[13] + x[14] + 18 + a[1] + x[9]
sum = x[15] + x[16] + x[11] + a[3] + 18




начинаем перечислять неизвестные: a[4] x[9] x[11] x[12] x[13] x[14] x[15] x[16] a[1] a[2] a[3] x[1] x[17] sum

Получаем 11 уравнений и 15 неизвестных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769139
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov,

слушай, раз 5 пересчитал, 14 неизвестных
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769147
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)Gennadiy Usov,

слушай, раз 5 пересчитал, 14 неизвестныхЯ ошибся, 14 неизвестных.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769163
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gennadiy UsovGennadiy UsovЕсли идти дальше, то есть ещё неравенства, и работа в конечном множестве.
Например, х16 не может иметь значения 6,10,12,18,20.
А, из уравнения х16=20-х14, получается, что для х16 не могут быть значения 2, 8, 14 (из четных, остаются только 4 и 16). Такие же значения не может иметь х14.
Далее
х12+х13 >=9
а1>=9
х13<=14 – только 1,2,3,5,7,8,9,11,13,14 (нет 4, иначе х12=х16)
х15>=3
Если выбирать х16 и х13, то получается 10 х 12 = 120 вариантов.Далее:
из уравнения
х12=х16+х13-4
видно, что х16 и х13 либо оба четные, либо нечетные.
Следовательно: для четных х16 будет 16 (4 нельзя) и для х13 – 2 (8 и 14 нельзя).
То есть один вариант.
Для нечетных: 10 х 7 = 70 вариантов.
х16+х13<=23.
Тогда уже 54 варианта.
Убираем:
одинаковые варианты.
х12 не может быть 6,10,12,18, 20 и более
То есть, убираем 30 вариантов.
Остаётся 24 +1 = 25 вариантов.Подставил оставшиеся х16 и х13 в уравнения для х14 и х15, получилось, что осталось 13 вариантов.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769175
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Далее,

подставил в уравнение определения х9 - осталось 7 вариантов

подставил в уравнение определения х8 - осталось 2 варианта

подставил в уравнение х11 - остался один вариант.

Нашел а1, а2, а3 - 19, 22, 19
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769183
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл указать значения переменных, полученных ранее:
х16=13, х13=5, х12=14, х15=9, х14=7, х8=8, х9=11, х10=16, х11=1

Далее имеем:

Остались числа 2,3,4 и 15,17,19
и получены значания:
а1 (х2,х5) = 19
а2 (х3,х6) = 22
а3 (х4,х7) = 19

22 - это только 19 и 3
19 – это 15 и 4, или 17 и 2

Получаем два варианта
15, 19, 17, 4, 3, 2
и
17, 19, 15, 2, 3, 4
У каждого варианта есть 8 подвариантов (сочетаний), когда меняются значения х2 и х5, х3 и х6, х4 и х7.

В результате определены 16 вариантов решения задачки, опубликованной в начале топика.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769189
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замечена интересная вещь: 2 числа, расположенные на линии, проходящей через центр, и которые находятся на одном расстоянии от центра,
имеют примерно одну и ту же сумму.

Что-то напоминает центр тяжести системы чисел.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769196
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)я эти два уравнения вообще удалил (количество по детерминанту определил), не нужны они, там всего 11 независимых уравнений
удалил их потому, что тогда можно было X8 + X10 одной переменной заменить
Это неправильно, в результате ослабилось ограничение на решение и получились 16 лишних вариантов.
kealon(Ruslan)вы же сами скидывали автоматическое решение
Да, выкладывал, но это решение как раз на основе вашего предложения по сложению уравнений. То есть без сложения было бы другое решение. Я пробовал на этом решении выводить результат, но то ли я где-то ошибся, то ли ещё что, у меня не получилось найти решения таким способом. Потом я переключился на другие варианты, тогда и понял, что сложение уравнений создаёт лишнюю пару переменных, в которой возможны перестановки, что даёт лишние решения.
kealon(Ruslan)кстати, у вас там прямо и написано что всего 11 независимых уравнений авторdependent equations eliminated: (11)
Я не уверен в смысле этой фразы. Что там имели в виду разработчики системы я не знаю, но здесь (если читать буквально) говорится об устранении 11-ти уравнений.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769197
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov В результате определены 16 вариантов решения задачки, опубликованной в начале топика.
Ну вот, я же говорил, что можно всё свести к перебору перестановок в трёх парах, плюс одно "перетекание", в итоге - 8*2 вариантов, где 8 для перестановок (2^3) и ещё умножаем на 2 из-за "перетекания".

В итоге школьнику нужно просто заметить перестановочные пары и за счёт ограничений вывести 11 фиксированных значений, а далее взять любой из 16 вариантов перестановок.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769205
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Gennadiy Usov В результате определены 16 вариантов решения задачки, опубликованной в начале топика.
Ну вот, я же говорил, что можно всё свести к перебору перестановок в трёх парах, плюс одно "перетекание", в итоге - 8*2 вариантов, где 8 для перестановок (2^3) и ещё умножаем на 2 из-за "перетекания".

В итоге школьнику нужно просто заметить перестановочные пары и за счёт ограничений вывести 11 фиксированных значений, а далее взять любой из 16 вариантов перестановок.Но надо было сначала все ограничения расписать, а потом потратить примерно час, чтобы отбросить ненужные пары из х16 и х13
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769326
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovНо надо было сначала все ограничения расписать, а потом потратить примерно час, чтобы отбросить ненужные пары из х16 и х13
Да, суммарно на это нужно приличное время. Если задача не олимпиадная, то тогда наверное нашлись бы "успевшие вовремя" (ибо время не ограничено), а вот в 3 часа - не знаю, разве что если аналогичный подход был отработан на другой задаче. А с нуля всё расписать, да учитывая разные направления, перебирая которые уходит время, сильно не уверен в возможности в 3 часа уложиться.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769384
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Gennadiy UsovНо надо было сначала все ограничения расписать, а потом потратить примерно час, чтобы отбросить ненужные пары из х16 и х13Да, суммарно на это нужно приличное время. Если задача не олимпиадная, то тогда наверное нашлись бы "успевшие вовремя" (ибо время не ограничено), а вот в 3 часа - не знаю, разве что если аналогичный подход был отработан на другой задаче. А с нуля всё расписать, да учитывая разные направления, перебирая которые уходит время, сильно не уверен в возможности в 3 часа уложиться.На самом деле, уложиться можно.

В своё время я был на подготовительных курсах мехмата, где обсуждались типовые задачи (почти "натаскивание") и пути их решения. Это позволило мне решить все задачи на приёмных экзаменах за время, меньшее часа.

Мы же старались обсуждать задачку со стороны, без строгого подхода к её решению.

В нашем случае, получена задача, и необходима следующая последовательность типовых действий :
- выявить все неизвестные и написать все уравнения. При этом окажется, то неизвестных много больше, чем уравнений.
- найти пути упрощения уравнений (определить а1, а2, а3). При этом окажется, что неизвестных всё равно больше.
- попытаться работать с уравнениями, находить более простые уравнения. Можно попробовать метод Гаусса.(смотря кто в чем преуспел)
- определить свободные переменные, и за счет того, что множество чисел конечное, попытаться выработать неравенства.
- далее, продолжительное, отсекание лишних сочетаний свободных неизвестных (у меня на EXCELе ушло минут 20). Определение а1, а2, а3.
- а разложить а1, а2, а3 - это совсем просто.

Конечно, сейчас это просто говорить, после нескольких дней работы, но "натасканный" школьник будет работать примерно так.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769678
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovКонечно, сейчас это просто говорить, после нескольких дней работы, но "натасканный" школьник будет работать примерно так.
То есть он должен решить аналогичную задачу до встречи с данной задачей. По сути олимпиада отбирает тех, кто решал аналогичные олимпиадным задания раньше. Но это означает отсев безумных заучек. В смысле школьнику нет необходимости думать, ему нужно лишь усердно запоминать кучу различных способов решений стандартных задач. Потом он даже где-то может применить свои знания, но вот столкнувшись с проблемой, для которой в его голове нет типового решения, он побежит к мамочке другим математикам и станет выяснять, а нет ли у них в голове чего-то подходящего. А если и у них нет? Кто математику-то двигать будет? Готовые решения никому не интересны, а они все натасканы именно на такое. Поколение ЕГЭ отличается именно таким подходом, но поколение олимпиадников на них в чём-то похоже.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769691
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555,

ну приблизительно так, только объём гораздо больше, часов по 6 каждый день несколько месяцев мало кто осилит

всё как в спорте, разве что не с 3-х лет
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769764
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Gennadiy UsovКонечно, сейчас это просто говорить, после нескольких дней работы, но "натасканный" школьник будет работать примерно так.
То есть он должен решить аналогичную задачу до встречи с данной задачей. По сути олимпиада отбирает тех, кто решал аналогичные олимпиадным задания раньше. Но это означает отсев безумных заучек. В смысле школьнику нет необходимости думать, ему нужно лишь усердно запоминать кучу различных способов решений стандартных задач. Потом он даже где-то может применить свои знания, но вот столкнувшись с проблемой, для которой в его голове нет типового решения, он побежит к мамочке другим математикам и станет выяснять, а нет ли у них в голове чего-то подходящего. А если и у них нет? Кто математику-то двигать будет? Готовые решения никому не интересны, а они все натасканы именно на такое. Поколение ЕГЭ отличается именно таким подходом, но поколение олимпиадников на них в чём-то похоже.Если Вы заметили по репортажам, в которых рассказывали о победителях международных олимпиад, то в разговоре наши победители говорили о том, как они готовились. В том числе, был тренинг, который проводили преподаватели.

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

А насчет проблем? Все сталкиваются, и Вы тоже. Всё объять невозможно. И Вы просите помощь у сподвижников, когда непонятно, и что-то новое.

А имея некоторый математический аппарат и имея искусство логически мыслить можно прийти к решению неизвестной задачи.
Даже при этом двигая науку вперед.

А то, что мало, по Вашему мнению, у нас математиков, то это виновато программирование. Школьнику дали инструмент всё решать, не вдаваясь в формулы. Зачем ему упрощать систему уравнений? Пусть машина думает. А он пока покурит.

В насчет ЕГЭ? Наши победители международных олимпиад сдавали ЕГЭ.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769772
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)alex55555,
ну приблизительно так, только объём гораздо больше, часов по 6 каждый день несколько месяцев мало кто осилит
всё как в спорте, разве что не с 3-х летКто-то занимается борьбой, кто-то шахматами, кто-то фигуркой, кто-то гимнастикой (разной), ..., а кто-то математикой.

Либо сам выбирает, либо родители подсказывают.
И с раннего возраста. Иначе можно опоздать, или придут другие мысли.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39769795
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем нашёл стандартную задачу для ЕГЭ. Вот здесь . У нас типичное решение с помощью динамического программирования. Ну а сочинять такие задачи как раз удобно используя ссылки из википедии.

Интересно, 3 фиксированных авторами переменных принадлежат к множеству обязательно фиксированных или всё же могут иметь другие значения? Перестановки и перетекания для них исключены, но, возможно, отказ от фиксации этих переменных даст другие наборы для 11 фиксированных в нашем случае.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770252
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555В общем нашёл стандартную задачу для ЕГЭ. Вот здесь . У нас типичное решение с помощью динамического программирования. Ну а сочинять такие задачи как раз удобно используя ссылки из википедии.В статье "Задача о сумме подмножеств" рассматривается задача разделения некоторого множества чисел на несколько подмножеств, имеющих определенную сумму входящих в это подмножество чисел. В этом случае необходимо динамическое программирование.

У нас в задачке имеется множество из 20 чисел от 1 до 20 и 5 не пересекающихся подмножеств этого множества: 3 окружности по 6 чисел, центр и некоторый центр (число, "вычеркнутое" из множества). Для каждого подмножества неизвестна сумма чисел, однако у 3-х окружностей сумма одинаковая. В данной постановке задачка подпадает под динамическое программирование.

Но у задачки есть ещё дополнительные условия: дополнительно имеются 3 диагонали и 6 внутренних окружностей, то есть 9 подмножеств из того же множества, которые пересекаются с основными окружностями и между собой: 5 подмножества по 5 чисел и 6 подмножеств по 6 чисел. И у всех этих новых подмножеств сумма чисел совпадает с суммами чисел в основных окружностях.

Поскольку появляются дополнительные условия, то задача динамического программирования упрощается до перебора 2-х чисел, а если в уравнениях использовать замкнутость множества, то задачка решается без динамического программирования.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770255
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основная задача - решена?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770257
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555Интересно, 3 фиксированных авторами переменных принадлежат к множеству обязательно фиксированных или всё же могут иметь другие значения? Перестановки и перетекания для них исключены, но, возможно, отказ от фиксации этих переменных даст другие наборы для 11 фиксированных в нашем случае.Если бы авторы не поставили числа 6, 12, 18 в кружочки задачки, то расширенная задачка решалась бы с помощью динамического программирования, когда переменных - 5. Замкнутость множества тут бы не помогла для уменьшения переменных.

А получение х2,х3,х4,х5,х6,х7 из а1, а2, а3 останется таким же.

Поскольку в расширенной задачке увеличивается количество степеней свободы на 3, то, возможно, в данном варианте расширенной задачки может быть больше решений. чем в исходной задачке.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770293
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonОсновная задача - решена?Решена.

Решена двумя способами:
динамическим программированием полученных уравнений (назовем так с учетом новых сообщений) 21794557
и решением полученных уравнений с учетом уравнений неравенств и замкнутости множества чисел 21801191 , 21801209 и 21801227
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770297
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий СмерксСпасибо всем, очень облегчели работу. Но вот для себя, чтобы потом просто так не обращаться, как эту задачу можно без компьютера решить - без подбора. Ведь такая возможность безусловно есть, на мой взглядКак оказалась, такая возможность (без применения компьютера) есть.

А в чем заключалась Ваша работа?
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770301
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю тему закрыть. Дима задачу решил.

Исключительно из соображений модерации и чистоты контента.
...
Рейтинг: 0 / 0
Как решить задачу по комбинаторике?
    #39770316
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ предлагаю тему закрыть.
Поддерживаю
...
Рейтинг: 0 / 0
450 сообщений из 450, показаны все 18 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как решить задачу по комбинаторике?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]