У меня есть список из 100 пунктов. Я хотел бы случайно связать эти предметы друг с другом. Эти пары должны быть уникальными, поэтому существует 4950 возможностей (100 выберите 2).Случайные уникальные пары
Из всех 4950 пар, я бы хотел, чтобы было выбрано 1000 пар. Но они ключевы, я бы хотел, чтобы каждый элемент (из 100 предметов) в целом появлялся столько же раз (здесь, 20 раз).
Я пытался реализовать это с кодом пару раз. И он работал нормально, когда я пытался с меньшим количеством выбранных пар, но каждый раз, когда я пытаюсь использовать полные 1000 пар, я застреваю в цикле.
Есть ли у кого-нибудь идеи для подхода? И что, если я изменю количество пар, которые я хочу выбрать (например, 1500, а не 1000 случайных пар)?
Моя попытка (написано в VBA):
Dim City1(4951) As Integer
Dim City2(4951) As Integer
Dim CityCounter(101) As Integer
Dim PairCounter(4951) As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
i = 1
While i < 101
CityCounter(i) = 0
i = i + 1
Wend
i = 1
While i < 4951
PairCounter(i) = 0
i = i + 1
Wend
i = 1
j = 1
While j < 101
k = j + 1
While k < 101
City1(i) = j
City2(i) = k
k = k + 1
i = i + 1
Wend
j = j + 1
Wend
Dim temp As Integer
i = 1
While i < 1001
temp = Random(1,4950)
While ((PairCounter(temp) = 1) Or (CityCounter((City1(temp))) = 20) Or (CityCounter((City2(temp))) = 20))
temp = Random(1,4950)
Wend
PairCounter(temp) = 1
CityCounter((City1(temp))) = (CityCounter((City1(temp))) + 1)
CityCounter((City2(temp))) = (CityCounter((City2(temp))) + 1)
i = i + 1
Wend
То, что работает на 2, должно работать от 1000 до. – AlexWien
Добавлено моя попытка редактирования. – user2073725
Случайный счетчик, кажется, вычисляет один меньше, чем диапазон, который вы хотите. Если это не случайный (1,4951)? – 2013-02-14 22:34:11