powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / SSS. Некоторые задачи
69 сообщений из 69, показаны все 3 страниц
SSS. Некоторые задачи
    #39025902
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. На выходных читал Stiven S. Skiena ADM, встретил несколько задач. Некоторые совершенно простые, но тем не менее попадались интересные.
Например задача 2-45. Вероятно правильный ответ , получается как частичная сумма гармонического ряда (вероятностей того, что текущий элемент будет меньше уже пройденных), однако с другой стороны, если сравнивать текущий элемент только с текущим минимумом можно получить , что вероятно не верно. Однако почему оно не верно и как это объяснить языком теории вероятности я не знаю.

Задача 2-43 интересная, но как решить её мне неизвестно. Вероятно нужно использовать некую функцию в которой присутствует n и k, хотя возникает вопрос, как при просмотре последнего элемента в исходном множестве, в том случае если в целевом множестве не будет хватать одного элемента вероятность может быть меньше 100%.
Если у вас есть идеи по поводу этих задач, было бы интересно послушать.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025903
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще для задачи 2-43 я бы использовал метод Монте-Карло, это был бы идеальный вариант, но вероятно предполагается последовательный перебор элементов
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025920
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я 43 вообще не понял. Выбрать k элементов из множества в n элементов, чтобы вероятность выбора каждого была k/n? Так она и будет k/n, какие бы элементы мы ни выбрали...
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025928
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЧто-то я 43 вообще не понял. Выбрать k элементов из множества в n элементов, чтобы вероятность выбора каждого была k/n? Так она и будет k/n, какие бы элементы мы ни выбрали...

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

Должно быть примерно следующее

Код: plaintext
1.
2.
3.
4.
5.
for(int i=0;i<pow_S;++i)
{
   if(probability_function(n,k))
     add S[i] to S';
}
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025930
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, скорее всего в так называемой probability function будет участвовать счётчик прохода и текущая наполненность множества S'.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025931
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryесли сравнивать текущий элемент только с текущим минимумом можно получить это как? текущий минимум ведь зависит от предыдущих элементов.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025933
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПри этом вероятность того, что каждый элемент из S будет принадлежать подмножеству должна быть одинакова.Что тут подразумевается под "вероятностью"?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025942
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirSashaMercuryесли сравнивать текущий элемент только с текущим минимумом можно получить это как? текущий минимум ведь зависит от предыдущих элементов.

Понимаю что нужно выбирать из всех элементов до него. Потому и получается частичная сумма гармонического ряда, о чём я написал с самого начала. Но допустим я отброшу это, и скажу, что я просто буду сравнивать текущий минимум с текущим элементом, тогда вероятность будет 0.5. Если так делать нельзя, то как это объяснить нормальным языком теории вероятности
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39025945
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirSashaMercuryПри этом вероятность того, что каждый элемент из S будет принадлежать подмножеству должна быть одинакова.Что тут подразумевается под "вероятностью"?

что у каждого элемента одинаковые шансы попасть в спасительную шлюпку S'
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026019
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>тогда вероятность будет 0.5
В задаче же ни слова о динозаврах, да и вы, наверное, не блондинка - откуда же такие предположения?
>Если так делать нельзя, то как это объяснить нормальным языком теории вероятности
Зависимые/независимые события .
SashaMercuryчто у каждого элемента одинаковые шансы попасть в спасительную шлюпку S'То есть вся соль в "n is unknown". Тогда да, интересная задачка.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026031
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir>тогда вероятность будет 0.5
В задаче же ни слова о динозаврах, да и вы, наверное, не блондинка - откуда же такие предположения?
>Если так делать нельзя, то как это объяснить нормальным языком теории вероятности
Зависимые/независимые события .
SashaMercuryчто у каждого элемента одинаковые шансы попасть в спасительную шлюпку S'То есть вся соль в "n is unknown". Тогда да, интересная задачка.

я не фанат теории вероятности, но знаю что над той блондинкой с динозавром смеяться не стоит. Это не предположения, а размышление об обосновании некорректности рассуждений, правильный ответ(на мой взгляд) я написал сразу
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026032
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

а если n известен ? Тут всё просто ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026043
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, ну на объём используемой памяти ограничений же нет. Генерируем массив с нужным количеством различных случайных чисел (от 1 до n), потом в один проход... эээ... проходим по исходному множеству и выбираем элементы с соответствующими номерами.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026221
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirSashaMercury, ну на объём используемой памяти ограничений же нет. Генерируем массив с нужным количеством различных случайных чисел (от 1 до n), потом в один проход... эээ... проходим по исходному множеству и выбираем элементы с соответствующими номерами.

ну а если сгенерируются одинаковые случайные числа ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026229
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'массив с нужным количеством различных случайных чисел '
Как такое сделать ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026231
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryну а если сгенерируются одинаковые случайные числа ?
игнорируй повторы
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026232
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Перед добавлением числа в массив проверять наличие в нем оного?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026235
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку официальный язык форума - русский я настоятельно рекомендую
сейчас, и впредь использовать 2 варианта постановки задачи. А именно:

1) Оригинал на иностранном .
2) Русскоязычный перевод постановки топик-стартера приближённый
к оригиналу настолько насколько это возможно.

Игнорирование этого правила - я считаю лицемерием и попыткой показать
своё умственное превосходство над остальными.

Надеюсь мой посыл будет услышан.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026242
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryну а если сгенерируются одинаковые случайные числа ?
игнорируй повторы

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

Изобретай наиболее оптимальный способ отлова повторов:
1. Биткарта. Работает быстро, но при большом диапазоне займет много места.
2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026259
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryТогда мне не нравится этот вариант. Какое-то 'грязное' решение. Неужели нет другого ?
Насколько я знаю нет ГСЧ без повторов, рано или поздно повторы будут. Так что другого нет.

Изобретай наиболее оптимальный способ отлова повторов:
1. Биткарта. Работает быстро, но при большом диапазоне займет много места.
2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку.

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

Если надо выбирать из исходного множества и оно после не нужно, то после выборки заменять исходное на недействительное значение, например -1.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026267
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоскольку официальный язык форума - русский я настоятельно рекомендую
сейчас, и впредь использовать 2 варианта постановки задачи. А именно:

1) Оригинал на иностранном .
2) Русскоязычный перевод постановки топик-стартера приближённый
к оригиналу настолько насколько это возможно.

Игнорирование этого правила - я считаю лицемерием и попыткой показать
своё умственное превосходство над остальными.

Надеюсь мой посыл будет услышан.

Аргументация тут следующая, 1) английский тут совершенно не сложный, 2) любой IT-специалист должен знать английский язык на таком уровне, 3) и я уже как-то говорил о том, чем москвич отличается от деревни(мне она больше нравится, кстати), он не стесняется спросить как пройти на какую-нибудь Волхонку 20 или куда-нибудь ещё. Ну и в конце концов, если непонятно кому-то, пусть человек попросит, переведут. У нас в Сообществе(CPP, конечно), целый топик, где я задаю вопросы о том как перевести те или иные вещи из стандарта. ... 'лицемерием и попыткой показать своё...' вы знаете что это не так, Марк.

К следующим задачам(наиболее трудным для понимания) добавлю перевод, к этим смысла уже нет, одна совсем простая, а другую уже перевел выше
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026278
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На том спасибо.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026292
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа том спасибо.
ну ладно вам. Лучше бы предложили какую идею :)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какую? Свою? У меня щас идея - как заставить миллиард китайцев вместо Captcha решать
задачи области ИИ и краудсорсинга. И мне это во много раз интереснее чем академические
задачки. Мир сложнен и многообразен. Как можно изучая Скиенну изучать It? Никак.
It можно знать только приобщаясь к полезным стартапам и задачам нашего времени.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026600
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Как можно изучая Скиенну изучать It? Никак.

SashaMercury - можно можно
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026708
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно получается, для поиска минимума или максимума необходимо перебрать n элементов, а обновлять значение переменной в которой этот минимум хранится потребуется на порядок раз меньше. Например для 1.000.000.000.000 элементов потребуется в среднем 28 обновлений.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026709
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИнтересно получается, для поиска минимума или максимума необходимо перебрать n элементов, а обновлять значение переменной в которой этот минимум хранится потребуется на порядок раз меньше. Например для 1.000.000.000.000 элементов потребуется в среднем 28 обновлений.

Интересно в том контексте, что от этой избыточности(если это можно так назвать) было бы здорово избавиться.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39026720
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryТогда мне не нравится этот вариант. Какое-то 'грязное' решение. Неужели нет другого ?
Насколько я знаю нет ГСЧ без повторов, рано или поздно повторы будут. Так что другого нет.

Изобретай наиболее оптимальный способ отлова повторов:
1. Биткарта. Работает быстро, но при большом диапазоне займет много места.
2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку.

Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ?


Судя по всему я нашёл решение данной задачи. Например алгоритм R

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/*
  S has items to sample, R will contain the result
*/
ReservoirSample(S[1..n], R[1..k])
  // fill the reservoir array
  for i = 1 to k 
      R[i] := S[i] 

  // replace elements with gradually decreasing probability
  for i = k+1 to n 
    j := random(1, i)   //  important: inclusive range
    if j <= k
        R[j] := S[i]



Добавлю свой перевод обоснования из w.
Согласно алгоритму первоначально необходимо заполнить целевой массив R мощностью k первыми k элементами множества S. Следом необходимо перебрать оставшиеся в S элементы, до тех пор пока они не закончатся. На каждой итерации последнего перебора для каждого элемента s[i] алгоритм генерирует случайное число j из диапазона [1,i]. Если j<=k, то происходит присваивание r[j]<-s[i]. В действительности, на каждой итерации вероятность того, что будет выбран элемент для целевого множества (всего элементов i, хороших k, потому собственно и получаем, прим. пер.). Вероятность того что будет произведена перезапись конкретного элемента j из целевого множества R . Для того чтобы доказать что после окончания алгоритма каждый элемент S имел возможность попасть в целевое множество воспользуемся индукцией. После итерации i-1 вероятность того, что будет выбран элемент для целевого множества. Так как вероятность того что данный элемент будет перезаписан на следующей итерации , вероятность того что он не будет перезаписан на следующей итерации равна.Таким образом, вероятность того что любой элемент из множества S будет присутствовать в целевом множестве после итерации i определяется как произведение двух событий: элемент будет присутствовать в целевом множестве после предыдущей итерации, и не будет перезаписан (будет сохранён) на итерации i. Имеем . Значит результат справедлив для i, и следовательно справедлив по индукции.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027032
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то для большого, но известного n, выборка k значений (где k<<n) делается гораздо проще, без сортировки и за k итераций.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027101
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВообще-то для большого, но известного n, выборка k значений (где k<<n) делается гораздо проще, без сортировки и за k итераций.

Это совсем другая задача
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027117
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryDima T2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку.

Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ?
Теорию вероятностей помню смутно, поэтому формулами не буду умничать, но при k значительно меньше n вероятность выпадения повтора небольшая, т.е. повторные проходы если и будут, то 1-3, не больше.
Самая тяжелая сортировка - первая, т.к. последующие (если будут) сортируют почти отсортированный массив.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027125
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСудя по всему я нашёл решение данной задачи. Например алгоритм R
Можно поправить алгоритм и будет работать с интервалом 1...n.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/*
  S has items to sample, R will contain the result
*/
ReservoirSample(n, R[1..k])
  // fill the reservoir array
  for i = 1 to k 
      R[i] := i

  // replace elements with gradually decreasing probability
  for i = k+1 to n 
    j := random(1, i)   //  important: inclusive range
    if j <= k
        R[j] := i


Только при k значительно меньше n мой велосипед может оказаться быстрее :)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027534
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryпропущено...


Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ?
Теорию вероятностей помню смутно, поэтому формулами не буду умничать, но при k значительно меньше n вероятность выпадения повтора небольшая, т.е. повторные проходы если и будут, то 1-3, не больше.
Самая тяжелая сортировка - первая, т.к. последующие (если будут) сортируют почти отсортированный массив.

Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ? А если числе 10^12 а уникальных нужно 10^12 - 1. Можем ли мы утверждать что если мы просто будем пропускать повторы мы за обозримый период времени получим множество уникальных чисел ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027547
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ?
Исходим из того что ГСЧ выдает числа с равной вероятностью.
Как с помощью теории вероятности посчитать не знаю, делаем проще. Тест
Код: plaintext
1.
 for(int i = 0; i < 30; i++) printf("%d,", rand()%10 + 1);


Результат5,10,1,1,9,6,6,7,6,9,7,4,3,5,7,5,5,10,2,8,9,9,1,5,10,7,8,4,4,5
в худшем случае 3 прохода для последовательности 5,7,5,5,10

SashaMercuryА если числе 10^12 а уникальных нужно 10^12 - 1. Можем ли мы утверждать что если мы просто будем пропускать повторы мы за обозримый период времени получим множество уникальных чисел ?
При 2k > n быстрее решать обратную задачу: выбрать лишние.
Это решается в один проход: выбираем одно лишнее, оставшиеся 10^12 - 1 требуемый результат :)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027555
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercury Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ?
Исходим из того что ГСЧ выдает числа с равной вероятностью.
Как с помощью теории вероятности посчитать не знаю, делаем проще. Тест
Код: plaintext
1.
 for(int i = 0; i < 30; i++) printf("%d,", rand()%10 + 1);


Результат5,10,1,1,9,6,6,7,6,9,7,4,3,5,7,5,5,10,2,8,9,9,1,5,10,7,8,4,4,5
в худшем случае 3 прохода для последовательности 5,7,5,5,10



где гарантия того что в следующий раз не потребуется 10 проходов ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027557
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryгде гарантия того что в следующий раз не потребуется 10 проходов ?
Нужны гарантии: берешь и гоняешь алгоритм в цикле, собирая статистику.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39027590
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryгде гарантия того что в следующий раз не потребуется 10 проходов ?
Нужны гарантии: берешь и гоняешь алгоритм в цикле, собирая статистику.

Тогда мы говорим о статистике. Ни о чём более.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39028258
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SS
Судя по всему я нашёл решение данной задачи. Например алгоритм R

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/*
  S has items to sample, R will contain the result
*/
ReservoirSample(S[1..n], R[1..k])
  // fill the reservoir array
  for i = 1 to k 
      R[i] := S[i] 

  // replace elements with gradually decreasing probability
  for i = k+1 to n 
    j := random(1, i)   //  important: inclusive range
    if j <= k
        R[j] := S[i]



Добавлю свой перевод обоснования из w.
Согласно алгоритму первоначально необходимо заполнить целевой массив R мощностью k первыми k элементами множества S. Следом необходимо перебрать оставшиеся в S элементы, до тех пор пока они не закончатся. На каждой итерации последнего перебора для каждого элемента s[i] алгоритм генерирует случайное число j из диапазона [1,i]. Если j<=k, то происходит присваивание r[j]<-s[i]. В действительности, на каждой итерации вероятность того, что будет выбран элемент для целевого множества (всего элементов i, хороших k, потому собственно и получаем, прим. пер.). Вероятность того что будет произведена перезапись конкретного элемента j из целевого множества R . Для того чтобы доказать что после окончания алгоритма каждый элемент S имел возможность попасть в целевое множество воспользуемся индукцией. После итерации i-1 вероятность того, что будет выбран элемент для целевого множества. Так как вероятность того что данный элемент будет перезаписан на следующей итерации , вероятность того что он не будет перезаписан на следующей итерации равна.Таким образом, вероятность того что любой элемент из множества S будет присутствовать в целевом множестве после итерации i определяется как произведение двух событий: элемент будет присутствовать в целевом множестве после предыдущей итерации, и не будет перезаписан (будет сохранён) на итерации i. Имеем . Значит результат справедлив для i, и следовательно справедлив по индукции.

Сразу не стал писать, но вот что меня смутило. В доказательстве чётко выделены события которые приведут к тому, что после i итерации элемент будет в целевом массив. Однако к таким событиям почему-то не отнесли вероятность того что конкретный элемент появится в целевом массиве именно на i итерации. Непонятно почему это не оговаривается.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39088595
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Решал на днях несколько задач. По трём из них у меня возникли некоторые вопросы. Возможно у кого-то будут соображения.

Перевод.
Первая задача не требует перевода, добавлю перевод 2 и 3:
4 -29
Некий Мистер Дал утверждает что разработал новую структуру данных типа очередь с приоритетом. Данная структура поддерживает операции Insert, Maximum, Extract Maximum, каждая из этих операций имеет асимптотику О(1). Докажите что он ошибается. (Подсказка: .... используйте тот факт что время исполнения сортировки

4 -30
БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко. Предлагается два варианта организации БД:
1. Использовать одномерный массив и бинарный поиск
2. Создать два массива, в первом будет 60% записей(к ним обращение будет чаще всего), во втором остальные 40. Сначала ищем в первом, если не нашли, идём во второй. Бинарный поиск в каждом из массивов.

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


Мои соображения.
По задаче 3-28 вопросов практически нет, её можно решить следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
//ниже псевдокод, я не тестировал его, основная идея всем понятна. Асимптотика О(n)
x[n];
before[n+1];
after[n+1];
m[n];
//ALGORITHM
//auxilary data
before[i=0..n]=1;
for(int i=0;i<n;++i){
   before[i+1]=before[i]*x[i];
}
after[i=0..n]=1;
for(int i=n-1;i<=0;--i){
   after[i]=after[i+1]*x[i];
}
//main array
for(int i=0;i<n;++i){
   x[i]=before[i]*after[i];
}



Q1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ?

Q2) Со второй задачей сложнее. Очевидным был бы следующий ответ: Так как Extract Maximum выполняется за O(1) то в таком случае сортировка возможна за O(n). Но 1. Зачем остальные части условия ? 2. Разве существует доказательство того что сортировка не может быть реализована за O(n) ?
Следовательно рассуждаю я скорее всего неверно(при решении данной задачи). Есть ли у вас какие-то идеи ?

Q3) Решение третьей задачи кажется совсем простым. В первом случае нужно задать такой вопрос, что лучше, log(n) или 2log(n) ? Конечно лучше хранить всё в одномерном упорядоченном массиве и использовать двоичный поиск.
Теперь пусть массивы будут неупорядоченны, и поиск будет линейный. В таком случае лучше разделить массив на два массива, и сначала осуществить поиск в первом массиве, а затем во втором. Но дело в том, что все рассуждения выше, как вы понимаете, относятся только к операции Search. Как провести комплексное рассуждение и сравнение я не знаю. Подскажите пожалуйста
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089199
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryМои соображения.
По задаче 3-28 вопросов практически нет, её можно решить следующим образом:Да, мне с ходу тот-же самый алгоритм придумался.

SashaMercuryQ1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ?А это ограничение я не понял. Какое такое деление автор задачи ожидает?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089200
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryQ2) Со второй задачей сложнее. Очевидным был бы следующий ответ: Так как Extract Maximum выполняется за O(1) то в таком случае сортировка возможна за O(n). Но 1. Зачем остальные части условия ? 2. Разве существует доказательство того что сортировка не может быть реализована за O(n) ?
Следовательно рассуждаю я скорее всего неверно(при решении данной задачи). Есть ли у вас какие-то идеи ?Тоже не понял, к чему там подсказка. Я рассуждаю так:
а) Если в структуре данных хранится несколько элементов, то эта структура может рассматриваться как массив. В дальнейшем буду использовать это слово и сопутствующую терминологию.
б) Чтобы операция Maximum выполнялась за O(1), надо чтобы в данном массиве данных максимальный элемент был всегда четко указан. Это можно сделать двумя способами, либо хранить дополнительно индекс максимального элемента, либо держать в массив в сортированном состоянии.
в) Если массив изначально не сортирован, но мы имеем индекс на его максимальный элемент то чтобы выполнялась операция ExtractMaximum выполнялась за O(1) надо чтобы мы могли за O(1) найти новый максимальный элемент после экстракта предыдущего максимума. Значит нам нужно где-то хранить индекс предыдущего во величине элемента. Это проще всего сделать если хранить индекс предыдущего элемента вместе с самим элементами... Вывод - в случае хранения данных не в сортированном виде мы должны хранить его в связном списке.
г) Но в случае связанного списка для вставки элемента в правильное место (что бы сохранить сортированность списка), нам понадобится это место найти, а это уже обязательно O(n).
д) Если данные хранятся в виде сортированного индексированного массива, то для нахождения максимума достаточно взять его последний элемент, а для нахождения предыдущего максимально - предпоследний. Все просто и легко, Maximum и ExtractMaximum выполняются за O(1).
е) А если у нас сортированный индексированный массив, то операция вставки потребует найти те два элемента между которыми надо вставлять новый, а это как минимум O(log n). А потом еще двигать хвост массива чтобы освободить место под новый элемент, а это еще O(n).
Таким образом у нас и получается что структура данных у которой все три завяленные операции выполняются за O(1) не получается...
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089215
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury 4 -30
БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Не совсем. Там имеется 40% людей которые делают 60% запросов.
Это значит что результат поиска "своей" записи надо умножить на частоту обращений.

SashaMercuryQ3) Решение третьей задачи кажется совсем простым. В первом случае нужно задать такой вопрос, что лучше, log(n) или 2log(n) ? Конечно лучше хранить всё в одномерном упорядоченном массиве и использовать двоичный поиск.
Не совсем... К тому же у нас заранее известен n.
В случае одного общего массива мы имеем: 10000*log(10000)=132877.1238.
А в случае двух массивов мы имеем: 6000*log(4000) + 4000*log(6000)=71794.7057 + 50202.9871 = 121997.6928
Итого, два массива при бинарном поиске получаются чуть-чуть получше, примерно на 8%.

Аналогично для линейного:
Общий массив: 10К * 10К = 100М
Два массива: 6К*4К+4К*6К= 24К+24К = 48К
Выигрыш получается еще больше.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089226
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercuryQ1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ?А это ограничение я не понял. Какое такое деление автор задачи ожидает?
Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089234
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury 4 -30
БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Не совсем. Там имеется 40% людей которые делают 60% запросов.
Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089235
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНекий Мистер Дал утверждает что разработал новую структуру данных типа очередь с приоритетом. Данная структура поддерживает операции Insert, Maximum, Extract Maximum, каждая из этих операций имеет асимптотику О(1). Докажите что он ошибается. (Подсказка: .... используйте тот факт что время исполнения сортировки

Да. Мистер Дал имеет возможность создать такую структуру. Это может быть автомат (конечный?) который имеет
входы INSERT, EXTRACT_MAXIMUM... и бесконечное число состояний которое моделирует различные варианты входов.
Правда мистер Дал забыл сказать что ему возможно понадобится бесконечно большая память.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089269
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite Owlпропущено...
А это ограничение я не понял. Какое такое деление автор задачи ожидает?
Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент.А ну да. Самый простой. Однако не самый эффективный :) Все-таки O(n) против O(n^2)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089273
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite Owlпропущено...
Не совсем. Там имеется 40% людей которые делают 60% запросов.
Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1
Чего это вдруг неверный? "40% of whom known as good customers and who together account for 60% access to the database". Откуда ты взял вариативность?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089292
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlDima Tпропущено...

Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент.А ну да. Самый простой. Однако не самый эффективный :) Все-таки O(n) против O(n^2)
с чего вдруг O(n^2)? Два прохода: первый перемножить, второй получить результат. Два цикла против трех и никакого лишнего расхода памяти.
White OwlDima Tпропущено...

Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1
Чего это вдруг неверный? "40% of whom known as good customers and who together account for 60% access to the database". Откуда ты взял вариативность?
Не буду спорить, оригинал не понимаю. Не силен в английском. Пользовался Сашиним переводом:
SashaMercuryБД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089305
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite Owlпропущено...
А ну да. Самый простой. Однако не самый эффективный :) Все-таки O(n) против O(n^2)
с чего вдруг O(n^2)? Два прохода: первый перемножить, второй получить результат. Два цикла против трех и никакого лишнего расхода памяти.О! Да, ты прав. Действительно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
product_total=1
for i=lbound(x) to ubound(x)
   product_total = product_total * x[i]
next
for i=lbound(x) to ubound(x)
   m[i] = product_total / x[i]
next

Тогда будет \Theta(2n) против \Theta(3n) для варианта без деления.


Dima TWhite OwlЧего это вдруг неверный? "40% of whom known as good customers and who together account for 60% access to the database". Откуда ты взял вариативность?
Не буду спорить, оригинал не понимаю. Не силен в английском. Пользовался Сашиним переводом:
SashaMercuryБД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Ну как же вы так? Ай-ай-ай! В нашей профессии английский надо знать как родной.
"10К имен, из которых 40% известны как "хорошие клиенты" и кто совместно генерирует 60% запросов к базе"
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089451
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
SSБД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.

Ну как же вы так? Ай-ай-ай! В нашей профессии английский надо знать как родной.
"10К имен, из которых 40% известны как "хорошие клиенты" и кто совместно генерирует 60% запросов к базе"

Моё перевод упрощён, но корректен.
Дословный перевод будет такой:
База данных содержит 10^4 отсортированных имён. (Далее идём of whom, значит 'которых') 40% известны как хорошие клиенты(имена и клиенты в данном случае синонимы) и на них совместно приходится 60% запросов к базе данных. И т.д.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089458
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury 4 -30
БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Не совсем. Там имеется 40% людей которые делают 60% запросов.
Это значит что результат поиска "своей" записи надо умножить на частоту обращений.

SashaMercuryQ3) Решение третьей задачи кажется совсем простым. В первом случае нужно задать такой вопрос, что лучше, log(n) или 2log(n) ? Конечно лучше хранить всё в одномерном упорядоченном массиве и использовать двоичный поиск.
Не совсем... К тому же у нас заранее известен n.
В случае одного общего массива мы имеем: 10000*log(10000)=132877.1238.
А в случае двух массивов мы имеем: 6000*log(4000) + 4000*log(6000)=71794.7057 + 50202.9871 = 121997.6928
Итого, два массива при бинарном поиске получаются чуть-чуть получше, примерно на 8%.

Аналогично для линейного:
Общий массив: 10К * 10К = 100М
Два массива: 6К*4К+4К*6К= 24К+24К = 48К
Выигрыш получается еще больше.

Я выделил красным то место где вы опечатались(или ошиблись, но это повлияло на результат).
1. 1 Пусть у нас один упорядоченный массив из 10000, бинарный поиск даст нам высоту 14. Пусть мы имеем к запросов, итого 14k затрат.
1. 2. Пусть у нас два упорядоченных массива. Первый 4000 элементов, высота поиска 12, второй 6000 элементов, высота 13. Пусть у нас 0,6k запросов на первый массив, 0,4k запросов проходят через первый массив и переходят на второй. Имеем k*(0,6*12+0,4*(12+13))=17,2k затрат.
Вывод: в данном конкретном случае, с точки зрения поиска, нет смысла разделять два упорядоченных массива. Но данный анализ неполный, ибо не учтены остальные аспекты, и я не знаю как правильно это сделать.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089468
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1. 2. Пусть у нас два упорядоченных массива. Первый 4000 элементов, высота поиска 12, второй 6000 элементов, высота 13. Пусть у нас 0,6k запросов на первый массив, 0,4k запросов проходят через первый массив и переходят на второй. Имеем k*(0,6*12+0,4*(12+13))=17,2k затрат.Да, так будет правильнее...
SashaMercuryНо данный анализ неполный, ибо не учтены остальные аспекты, и я не знаю как правильно это сделать.Да нет. Этот анализ настолько полон насколько у нас есть иноформации о задаче.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089493
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercuryQ2) Со второй задачей сложнее. Очевидным был бы следующий ответ: Так как Extract Maximum выполняется за O(1) то в таком случае сортировка возможна за O(n). Но 1. Зачем остальные части условия ? 2. Разве существует доказательство того что сортировка не может быть реализована за O(n) ?
Следовательно рассуждаю я скорее всего неверно(при решении данной задачи). Есть ли у вас какие-то идеи ?Тоже не понял, к чему там подсказка. Я рассуждаю так:
а) Если в структуре данных хранится несколько элементов, то эта структура может рассматриваться как массив. В дальнейшем буду использовать это слово и сопутствующую терминологию.
б) Чтобы операция Maximum выполнялась за O(1), надо чтобы в данном массиве данных максимальный элемент был всегда четко указан. Это можно сделать двумя способами, либо хранить дополнительно индекс максимального элемента, либо держать в массив в сортированном состоянии.
в) Если массив изначально не сортирован, но мы имеем индекс на его максимальный элемент то чтобы выполнялась операция ExtractMaximum выполнялась за O(1) надо чтобы мы могли за O(1) найти новый максимальный элемент после экстракта предыдущего максимума. Значит нам нужно где-то хранить индекс предыдущего во величине элемента. Это проще всего сделать если хранить индекс предыдущего элемента вместе с самим элементами... Вывод - в случае хранения данных не в сортированном виде мы должны хранить его в связном списке.
г) Но в случае связанного списка для вставки элемента в правильное место (что бы сохранить сортированность списка), нам понадобится это место найти, а это уже обязательно O(n).
д) Если данные хранятся в виде сортированного индексированного массива, то для нахождения максимума достаточно взять его последний элемент, а для нахождения предыдущего максимально - предпоследний. Все просто и легко, Maximum и ExtractMaximum выполняются за O(1).
е) А если у нас сортированный индексированный массив, то операция вставки потребует найти те два элемента между которыми надо вставлять новый, а это как минимум O(log n). А потом еще двигать хвост массива чтобы освободить место под новый элемент, а это еще O(n).
Таким образом у нас и получается что структура данных у которой все три завяленные операции выполняются за O(1) не получается...

Теперь я понял при чём тут вставка. Всё что вы рассказали выглядит логично.
Однако это не доказывает того, что такое в принципе не возможно. И вообще, я не уверен в том, что существует полное и объективное доказательство такого факта. Вероятно автор имел ввиду рассуждение в вашем ключе. Спасибо :)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39089498
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite Owlпропущено...
Не совсем. Там имеется 40% людей которые делают 60% запросов.
Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1

Дмитрий, тут я виноват, не до конца перевёл. Но связано это с тем, что частота запросов на мой взгляд не должна сильно влиять на базу данных. Если критерием сравнения будет вставка, то только при отношении около 17:3 преимущество будет у второго способа(2 бинарных поиска)
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39142357
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сфере (Web Mercator) длину градуса метрах получить легко
Код: plaintext
1.
2.
             double  a = 6378137; // большая полуось в метрах
             double degreeSz =  (cos(ltt)* a * Math.PI ) / 180.0;
а шо умножать, что бы тоже сделать на эллипсоиде WGS-84
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39142358
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39144202
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,
в формуле для сферы попробуйте заменить большую полуось а, на сумму большой a и малой b полуосей эллипсоида делённых на два. a -> (a+b)/2.

Вообще для таких вещей используют интегральное исчисление. Не знаю насколько вам это подходит
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39144205
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, приближенная формула другая.
У вас , далее посмотрите приближенные формулы для полупериметра.
Либо, периметр можно найти как длину кривой, в вашем случае так:
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39144325
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
та, не интеграл там не очень нужен
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39144329
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через день я уже нашел. Серапинас Математическая картография.
- это оно, но без картинки, лично мне, не понятно.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39146030
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит радиус линии, подразумевается радиус кривой ? Вы использовали эту формулу, она вам подходит ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39146882
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧто значит радиус линии, подразумевается радиус кривой ?

ну, да. Любая линия на поверхности эллипсоида будет кривой в очевидном смысле.
//Прямая, кстати (в неочевидном смысле), тоже кривая с бесконечным радиусом кривизны.



SashaMercury Вы использовали эту формулу, она вам подходит ?


да, вот тут


а шо делать? Есть альтернатива?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39147841
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то первая задача решена не полностью.

итак есть массив из 12 элементов... надо собрать подмножество из 10 элементов (k=10, n=12)

шаг 1: выберем первых 10 элементов с вероятностью 1

шаг 2: генерим число от 1 до 11. вероятность замены каждого из 10 элементов 1/11. вероятность каждого элемента остаться 1-1/11=10/11. вероятность попадания 11-ого элемента в выборку 10/11.

шаг 3: генерим число от 1 до 12. вероятность замены каждого элемента 1/12. Вероятность каждого из первых 11 элементов остаться в выборке = 10/11-1/12 = (120-11)/132 = 109/132 . Это не равно 10/12 - вероятность попадания в выборку 12-ого элемента

представим что у нас n = не 12, а 13... тогда:


шаг 4: генерим от 1 до 13. вероятность замены уже выбранного элемента 1/13. Вероятность каждого из первых 11 остаться в выборке 109/132-1/13 = (1417 - 132) / 1716 = 1285 / 1716. Вероятность 12-ого остаться 10/12-1/13=(130-12)/156 = 118/156 = 59/78. Вероятность 13-ого попасть в выборку 10/13

имеем уже 3 разные вероятности : 1285/1716, 59/78 и 10/13
1285/1716 = 0.7488
59/78 = 0.7564
10/13 = 0.7692


итак, всего на 4 шагах получили ошибку в 2% (это не мало :)) ). будет больше шагов, разница в вероятностях будет ещё больше.

Если не прав - поправьте. Если нет, стоит искать другое решение, где вероятность выбора каждого элемента будет выражаться через k и n, но ни в коем случае не через i.
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39147859
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Проблема с шагом 3. Вероятность попадания нового элемента 10/12, остаться старому 10/11 * 11/12 = 10/12
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39147860
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,
предлагал использовать интеграл, но это видимо не очень удобно. А зачем в вашем случае альтернатива, если вы уже всё сделали ?
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39147885
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПрограмёр,

Проблема с шагом 3. Вероятность попадания нового элемента 10/12, остаться старому 10/11 * 11/12 = 10/12
Ну да. Я ступил похоже )) чё меня минусовать дёрнуло... Поздно было ))
...
Рейтинг: 0 / 0
SSS. Некоторые задачи
    #39147939
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, бывает, мне даже жаль что вы ошиблись, ибо кое-что мне в том алгоритме действительно не нравится, я позже писал
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / SSS. Некоторые задачи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]