c++ - 按递增顺序枚举代数表达式

标签 c++ algebra

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

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

我想知道是否有一种通过维护较少状态来枚举上述表达式的更快方法?

最佳答案

类似的东西。

 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 维护,它们分别跟踪那些索引未递增的最后一个值。 .

关于c++ - 按递增顺序枚举代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18973018/

相关文章:

c++ - Boost.Process - 如何让一个进程运行一个函数?

数学 - 困难的 Pong AI

c - 使用链表进行两个多项式相乘的程序

r - data.frame 中所有变量对的元素乘法总和

c++ - 特定于类的释放函数可以在常量表达式中使用吗?

c++ - flatbuffer c++:是否有可能从 flatbuffers::Vector 窃取

c++ - 是否可以通过 systemtap 探测器停止进程以便附加 gdb?

python - python中的代数表达式

c++ - int ** 与 int [ROWS][COLS]