多个数字序列递减的快速算法,直到求和的极限

时间:2017-07-27 09:03:44

标签: python algorithm loops iteration

我有:

  • 其中包含浮点字段result的{​​{1}}个对象的有序列表。
  • pack总和为results
  • dc(不是更好的名字)是减少的值。

问题:

  • 我需要为每个results按顺序减少limit,直到所有result的总和小于或等于while(self.sum > self.limit): for dc in self.dc: if dc.result > 0: # max() too slow here result = ( dc.result - self.pack if dc.result - self.pack > 0 else 0 ) # Prevent sum() count for all list on each iteration self.sum -= dc.result - result dc.result = result if self.sum <= self.limit: break (不指定self.pack值低于0 )。

经过一些分析后,我得到了这段代码:

JSON

但它对于小$chart_data = array(); while($row = mysqli_fetch_array($result)) { $chart_data []['gp_submit']= $row["dt"]; $chart_data[]['cnt] = $row["cnt"]; } 值的性能较低(代码执行的迭代次数过多)。

有没有办法让这种方法更快?

1 个答案:

答案 0 :(得分:1)

如果您不太关心从包中删除多少,只要它确保它小于总和,那么您可以将DC实现为最大堆(优先级队列),并且每次都弹出它直到sum为&lt; = self.limit。这将大大加快处理时间,尤其是在大数据集中。

编辑: 由于dc是一个有序列表,只需将其视为堆栈并从后面弹出并从包中取出(因为&#34;最重的&#34;事物在后面)。