Промоделировал Вашу задачу при n= 600. График кол-ва белых шаров - более-менее плавная, вогнутая, убывающая кривая с максимумом, естественно, 600 и минимумом 0. График кол-ва красных шаров имеет явный экстремум (хотя, конечно, т.к. работаем со случайными величинами, линия имеет множество локальных экстремумов), на концах обращаясь в 0. Напиминает участок окружности или часть параболы с ветвями вниз. Т.к. в моей программе используется еще понятие пустого шара (массив из 600 элеменотов, случайным образом выбираем из него, если красный, то данная ячейка массива становится пустым шаром) то заодно построил и их график. Он довольно симметричен с графиком белых шаров, только кривая - возрастающая. Интересно, что максимум графика красных шаров очень близок к точке пересечения графика белых шаров и пустых шаров.
Ну а вероятность вытащить красный шар, как отношение кол-ва красных к сумме кол-ва красных и белых шаров в начальной части графика примерно совпадает с графиком красных шаров (с учетом масштаба, я домножил эту вероятность на n=600), в среднем возрастает, одновременно все больше и больше "прыгая", в конце - вообще довольно размыта, но приближается опять таки к 1 (ну или к 600 с учетом домножения).
Надеюсь, ясно написал. Думаю, Вы без труда и сами промоделируете.
Важно, что зависимости вероятностей и кол-ва шаров в среднем, явно существуют и вполне определенные. Вопрос - как их найти.
Добавлено спустя 3 минуты 45 секунд:
Вот код моделирующей программы (Builder, но от билдера там только рисование графиков) на всякий случай, за алгоритм прошу не пинать - естественно он самый простой и не оптимизированный:
Код:
#define WHITE 2
#define RED 1
#define EMPTY 0
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const int n = 600;
int balls[n];
for(int i=0;i<n;i++)
balls[i] = WHITE;
int n_white = n, n_red = 0, n_empty = 0;
int x = 0;
while(n_white || n_red)
{
Image1->Canvas->Pixels[x][Image1->ClientHeight - n*n_red/(n_red+n_white)] = clBlue;
int nn;
while( balls[nn = rand()%n] == EMPTY);
if(balls[nn] == RED) {balls[nn] = EMPTY;n_red--;n_empty++;}
else {balls[nn] = RED;n_white--;n_red++;}
Image1->Canvas->Pixels[x][Image1->ClientHeight - n_white] = clGreen;
Image1->Canvas->Pixels[x][Image1->ClientHeight - n_red] = clRed;
Image1->Canvas->Pixels[x++][Image1->ClientHeight - n_empty] = clBlack;
}
}
Добавлено спустя 26 минут 21 секунду:
график 1-го прогона
график многих прогонов
Зеленая - кол-во белых шаров, черная - кол-во пустых шаров, красная - кол-во красных шаров, синяя - вероятность вытащить красный шар * 600