Северное Сияние, А чо сразу банк?
Банки - гниль ещё та. И работать там - зашквар.
Ты слышал про Basecamp? Не последняя компания, топчик от айти. Вот у них философия такая - брать людей только на удалёнку.
Даже книгу такую написали - "Remote". Невероятно известная книга в айти-сфере, но тебе она неведома, т.к. ты живёшь в каком-то своём коконе
xmoonlight, Возможно, я ступил и перепутал.
Тогда решается просто инвертированием вероятности: 1-P
Это не суть важно и на сам алгоритм никак не влияет.
Roman Prokopets, я бы рад кодом помочь, он тут не сильно сложны. В лямбдах это напишется в одну строку, но я так не умею.
Я напишу циклами, а в 2020-м это не очень модно, тем более, для JS
Пусть у нас массив из оценок [5, 5, 3, 2]
Сумма всех оценок S = 5+5+3+2 = 15
Вероятности выбора каждого элемента:
[5/15, 5/15, 3/15, 2/15] = [0.33333, 0.33333, 0.2, 0.133333], в сумме они дадут 1, как и должно быть.
1. Берём первый элемент с оценкой 5 и с вероятностью 0.3333 выбираем его: P = random()*1.0
Если P<0.333, то выбираем 1-й элемент и заканчиваем работу. Иначе идём дальше
2. Берём 2-й элемент с оценкой 5. Теперь у нас вероятность изменилась и мы её пересчитываем, чтобы в сумме была 1:
S = 5 + 3+ 2 = 10
Пересчитываем вероятности:
[5/10, 3/10, 2/10] = [0.5 ,0.3, 0.2] - в сумме опять 1, как и должно быть.
Теперь с вероятностью 0.5 определяем, берём ли мы 2-й элемент в качестве результата или нет: P = random()*1.0
Если P< 0.5, то заканчиваем работу. Иначе, идём дальше.
3. Пересчитываем общую сумму оценок: S = 3 + 2 = 5
Новые вероятности для оставшихся оценок: [3/5, 2/5] = [0.6, 0.4], в сумме опять 1
С вероятностью 0.6 определяем, оставляем ли 3-й элемент в качестве результата или нет.
Если нет, то дальше
4. Пересчитываем сумму оставшихся оценок: S = 2.
Новые вероятности для оставшихся оценок: [2/2] = [1].
То есть, со 100% вероятностью забираем последний элемент.
Но вот чтобы добраться до последнего элемента надо продраться через тернии более высоких оценок. Сложно, маловероятно, но в принципе это возможно.
UPD: Для оптимизации расчёта новой суммы S просто вычитаем из предыдущей S значение оценки i-го элемента. Сводим алгоритм к O(N)
Roman Prokopets, Сложно так объяснять.
Основная мысль в том, что Мы идём по массиву и с некоторой вероятносью решаем, берём мы этот элемент или идём дальше. Вероятность зависит от величины оценки. И у нас обязательно должно соблюдаться условие, что среди оставшихся элементов мы на 100% что-то должны выбрать. Сейчас напишу пример для понимания
Robur, почему вы думаете, что она не сможет подготовить себе финансовую подушку? Вы же не знаете её материальное положение. В конце концов, можно трёшку разменять на двушку или продать машину/почку, если уж совсем на нуле.
звучит красиво, но на практике постоянный геморрой.
И, опять же, ты пишешь "Обычно все библиотеки, которые работают с файловой системой отлично понимают юникод. .". "Обычно...". Нужно полагать, что бывают НЕ ОБЫЧНЫЕ ситуации?
Банки - гниль ещё та. И работать там - зашквар.
Ты слышал про Basecamp? Не последняя компания, топчик от айти. Вот у них философия такая - брать людей только на удалёнку.
Даже книгу такую написали - "Remote". Невероятно известная книга в айти-сфере, но тебе она неведома, т.к. ты живёшь в каком-то своём коконе