LINUX.ORG.RU
ФорумTalks

Задача на, видимо, комбинаторику, хотя не уверен

 


1

2

Придумал тут сам себе задачу, и теперь не могу заснуть.

Имеется множество элементов размера n. Из элементов можно составлять пары, при этом каждый элемент может участвовать в произвольном количестве пар.

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

И обобщение задачи: заменяем пары на тройки, четверки, и тд: подмножества элементов размера k. n > m > k.

★★★★★
Ответ на: комментарий от Pythagoras

Только хотел спросить, почему k+1, как ты пофиксил :)

buddhist ★★★★★
()
Ответ на: комментарий от Pythagoras

Ну во первых n > m, но если допустить что ты просто перепутал m и n местами, то получается что k не может быть больше (n-m), что вообще говоря не верно. Допускается вариант что вообще n=m.

morse ★★★★★
() автор топика
Ответ на: комментарий от Pythagoras

n = 5, m = 3, k = 2

C из 2 по 2 = 1, +1 = 2. Пять элементов ну никак не покрыть двумя парами чтобы в выборке из трех была как минимум одна.

morse ★★★★★
() автор топика

Придумал такой алгоритм: разбиваем множество на m-k+1 равных подмножеств (если n делится на m-k+1; если нет, то почти равных, но для упрощения формулы мы в дальнейшем будем считать что делится). В каждом подмножестве трахаем элементы по принципу «все со всеми». Так как мы не можем выбрать m элементов так, чтобы хотя бы k элементов не оказалось из одного подмножества, то у нас всегда будет как минимум одно совпадение.

Итого ответ: C((n/(m-k+1),k)*(m-k+1).

Кто меньше? (а я спать)

morse ★★★★★
() автор топика
Ответ на: комментарий от Pythagoras

если в произвольном выборке (m) должно быть всё подмножество k элементов, тогда получается больше:
для пар получается - (C из (n-m) по 2) + (n-m)*m + 1

Если обобщать, для k=3:
(C из (n-m) по 3) + (C из (n-m) по 2)*m + (n-m)*(C из m по 2) + 1

в итоге:
[сумма (C из (n-m) по i) * (C из m по (k-i))] + 1
где i от 1 до k

TheAnonymous ★★★★★
()
Ответ на: комментарий от morse

А, так тебе нужно, чтобы оба элемента пары попадали в эту выборку, или хотя бы один? Если оба, то попробуй так:

(C из (n-m+k-1) по k) + 1.

Мы выбираем произвольное подмножество размера m, и считаем, сколько нужно пар, чтобы заполнить всё остальное. И берём на одну больше, чтобы уж точно хватило.

Pythagoras ★★
()
Ответ на: комментарий от TheAnonymous

для пар получается - (C из (n-m) по 2) + (n-m)*m + 1

Я вручную попытался решить вариант n=6 m=3 k=2, и обошелся шестью парами. По твоей формуле получается

С(3,2) = 3; +3*3+1 = 13. Вдвое больше.

Pythagoras

(C из (n-m+k-1) по k) + 1

C(4,2) = 6; +1 = 7. Опять же больше шести.

morse ★★★★★
() автор топика

Точное решение пока некогда искать, оценочное: пар будет не больше чем нижняя грань C(n, m)/[C(n-k, m-k) - k + 1]

buddhist ★★★★★
()
Ответ на: комментарий от morse

Я понял, как «какое минимальное количество произвольных пар нужно взять, чтобы в некотором подмножестве точно оказалась хотя бы одна из них»

TheAnonymous ★★★★★
()
Ответ на: комментарий от morse

Надо точнее условия формулировать, а то мы тут немного другую задачу решаем)

Pythagoras ★★
()
Ответ на: комментарий от TheAnonymous

Если пары произвольные, то ничто не мешает им повторяться. Возьми хоть миллион пар (1,2)(1,2)(1,2)... и ты не покроешь даже множество из четырех элементов.

morse ★★★★★
() автор топика
Ответ на: комментарий от morse

Требование неповторяемости совершенно естественно для подобной задачи.

Pythagoras ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.