Можно ли использовать std::discrete_distribution
с некоторыми нулевыми весами, предполагая, что был задан хотя бы один положительный вес? Элементы с нулевым весом просто никогда не должны подвергаться выборке.
Тот факт, что он работает на моей машине, не дает мне уверенности, что он будет работать на всех системах.
Пример:
std::discrete_distribution<> dd({1.0, 2.0, 0.0, 3.0});
@KamilCuk То, что вы показываете, это вообще отсутствие весов, а не некоторые из весов, равные нулю.
@BoBTFish Это ответ, спасибо.
Немного более читаемая ссылка: eel.is/c++draft/rand.dist.samp.discrete#2
За [rand.dist.samp.discrete]/2
Unless specified otherwise, the distribution parameters are calculated as:
pk = wk / S
fork = 0, ..., n−1
, in which the values wk, commonly known as the weights, shall be non-negative, non-NaN, and non-infinity. Moreover, the following relation shall hold:0 < S = w0 + ... + wn−1
.
Таким образом, допускаются нулевые веса, но не все веса могут быть равны нулю, поскольку S
должно быть больше нуля.