0

我有以下表达式: (2^i * 3^j), i,j >=0 并且我需要按升序枚举它,即 1 2 3 4 6 8 9 12 ....

我正在考虑执行以下操作:维护优先级队列。对于当前 (i,j),我们可以增加 i 或增加 j。计算这些新值的表达式并将它们推入优先级队列。从队列中弹出并继续。我们从 (0,0) 开始。我们还需要维护 (i,j) 以及计算表达式。此外,需要忽略重复项。

我想知道是否有更快的方法来枚举上述表达式,通过保持较小的状态?

4

1 回答 1

1

沿着这些思路。

 results = [1]
 i_index = 0
 j_index = 0 
 for(count=0, count<n, count ++){
     i_incr = results[i_index]*2  // next value of expression by incrementing i
     j_incr = results[j_index]*3  // next value of expression by incrementing j
     if (i_incr > j_incr)
         results << j_incr
         j_index += 1
     else if (i_incr < j_incr)
         results << i_incr
         i_index += 1
     else
        results << i_incr
        i_index += 1
        j_index += 1
     end
  }

状态由i_index和维护j_index,它们分别跟踪这些索引未增加的最后一个值。.

于 2013-09-24T05:56:08.043 回答