擅长:python、mysql、java
<p>正如评论家指出的,这是一个NP难问题。但是,如果您的数据不是太差,以下方法应该可以很好地工作:</p>
<pre><code>picks[] := K numbers chosen at random from the population
While sum(picks) is not in the allowable range
if sum(picks) < MinRange
select an element p from picks at random
let subpop := elements in population which are larger than p
replace p with a random element from subpop
if sum(picks) > MaxRange
select an element p from picks at random
let subpop := elements in population which are smaller than p
replace p with a random element from subpop
</code></pre>
<p>这很容易编写代码,它将返回一个满足约束条件的相对随机选择,并且不会花费太长时间,除非你真的有一个很难解决的问题,在这种情况下,使用任何算法都很难找到解决方案。在</p>
<p>如果您想加速算法,那么您可以选择元素<code>p</code>作为每次<code>picks</code>中最小/最大的元素。这会使算法运行得更快,但也会减少对选择的“随机”选择。在</p>