按递增顺序列举代数表达式

时间:2013-09-24 04:33:24

标签: c++ algebra

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

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

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

1 个答案:

答案 0 :(得分: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_indexj_index维护,它们跟踪那些指数未递增的最后一个值。