Учитывая функцию для справедливой монеты, запишите функцию для смещенной монеты?

Я столкнулся с этим вопросом об интервью, о котором сообщают, при выполнении некоторого рассмотрения (следующая кавычка является всей информацией, которую я нашел о проблеме):

Учитывая функцию для справедливой монеты, запишите функцию для смещенной монеты, которая возвращает головы 1/n, времена (n параметрический усилитель),

На первый взгляд я записал:

int biased_coin(n) { //0=Tails, 1=Heads
  int sum = 0;

  if(n==1)
    return 1;

  for(int i=0;i<n;i++) {
    sum += unbiased(); //unbiased returns 0 50% of the time and 1 50% of the time
  }

  if(sum == 1)
    return 1;

  return 0;
}

Но это, очевидно, не работает. Для n=4, например, это действительно работает: так как вероятность получения единственной Головы, учитывая 4 броска равняется 4 / (2^4) =1/4. Но для говорят n=3, 3 / (2^3)! =1/3.

Что состоит в том, чтобы реализовать надлежащий путь, что-то вроде этого принимающее Вас не может использовать генератор случайных чисел?

5
задан henry 11 January 2010 в 09:16
поделиться

2 ответа

Это не будет легко: веб-браузеры являются крепостями из-за проблем безопасности. Так что довольно трудно получить от JS на веб-странице чего-то за пределами браузера.

Также Qtwebkit не очень открытый API. Самым большим препятствием в вашем случае является то, что он не предлагает вам доступа к DOM, поэтому вы можете заменить только весь HTML.

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

Так как был выпущен QT 4.6, существует QWebelement (, см. Документы для примеров), чтобы вы могли, по крайней мере, получить доступ к DOM и изменить его. Это сделает много вещей проще. Я предлагаю решить, кто контролирует браузер: будет ли ваше приложение JavaScript, которое звонит снаружи или является приложением действительно в C ++, и вы используете браузер в качестве Smart UI Renderer?

Гораздо простым способом, чтобы сделать вашу идею Было бы начать внутренний веб-сервер, когда ваше приложение запускается, а затем открыть вид QTWebkit, указывая на URL локального сервера. Затем вы можете использовать все стандартные инструменты веб-разработки. Eclipse использует эту технику для его внутренней справочной системы.

-121--4268567-
line-height:  normal | 

<number>| 

<length>| 

<percentage>

из Высота линии

<number>

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

<percentage>

относительно размера шрифта самого элемента. Вычисленное значение - это процент, умноженный на вычисленный размер шрифта элемента.

-121--2439262-

Предполагая:

int fairCoinToss();

Возвращает 1 для головок и 2 для хвостов, написание:

int biasedCoinToss(int n);

, где головки (1) будут отображаться 1 / n времени, когда это должно работать:

int biasedCoinToss(int n) {
  if (n == 1) {
    return 1; // 1/1 = 1 = always heads
  } else if (n == 2) {
    return fairCoinToss(); // 1/2 = 50% = fair coint oss
  }
  int r = random_number(n);
  return r == 0 ? 1 : 0;
}

где Random_Number (n) генерирует справедливое случайное целое число I такое, что 0 <= i . Таким образом, Random_Number (3) равно 0, 1 или 2. Предполагая, что даже распределение, значение 0 выйдет 1/3 времени.

Конечно, мы не можем использовать родной генератор случайного номера, но мы можем создать один в любом случае. FairCointoss () Случайно генерирует 1 или 0. Многократные броски монет могут быть объединены для генерации большего количества. Например:

fairCoinToss() << 1 | fairCoinToss()

будет генерировать:

00 = 0
01 = 1
10 = 2
11 = 3

, что по определению является случайным числом от 0 до 3 (n = 4).

Это нормально, если N - это мощность-2, но это не обязательно. Это достаточно легко, чтобы удовлетворить. Предположим n = 5. В лучшем случае мы можем создать случайное число от 0 до 7. Если вы «Reroll» 5, 6 или 7, пока вы не получите номер в диапазоне от 0 до 4, то у вас есть (не определяется) Случайное число, справедливо распределенное от 0 до 4 включительно, удовлетворяет требованию.

Код для этого выглядит что-то подобное:

int random_number(int n) {
  int ret;
  do {
    int limit = 2;
    ret = fairCoinToss();
    while (limit < n) {
      ret <<= 1;
      ret |= fairCoinToss();
      limit <<= 1;
    }
  } while (ret >= n);
  return ret;
}
10
ответ дан 13 December 2019 в 05:36
поделиться

Если вы создаете / откроете объект и позволяете, чтобы он был унаследован, дочерние процессы, которые разрешены для наследства ручек (например, вы можете указать Binherithandles = True Для CreateProcess) будут иметь копии этих ручков. Эти унаследованные ручки будут иметь одинаковые значения ручки, что и родительские ручки. Так, например:

  • CreateeeVent Возвращает ручку на объект события, ручку - это 0x1234 .
  • Вы разрешаете эту ручку наследоваться.
  • Вы создаете детский процесс, который наследует ваши ручки.
  • Этот дочерний процесс теперь может использовать ручку 0x1234 без необходимости звонить CreateEwent или OpenEvent . Например, вы можете пройти значение ручки в командной строке дочернего процесса.

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

-121--3107695-

Так как большинство значений N не являются полномочиями 2, не может гарантировать вероятность того, что вероятность 1 / n от любого количества бросков монет. Вместо этого вам придется согласиться на то, что приближается к 1/ N к желаемой точности. Но эй, это монета, вообще бросая тебя.

Нарисуйте себе дерево решений с 2 ​​ветками в корне (меченном H и T), затем 2 ветвями на каждом узле (также пометили H и T), пока вы не достигнете достаточного количества узлов листа, чтобы удовлетворить ваши требования к тому, чтобы удовлетворить достаточных требований. Пометьте право (для вас) доля листьев с нужными значениями, например, 1,2,3, если n = 3. Каждый лист затем определяет маршрут из корня, например, Hhthtthhth (или что-то еще). Они определяют последовательность бросок, которые приводят к «3».

Я оставлю кодировку вам.

0
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: