我有以下表达式:(2 ^ i * 3 ^ j),i,j> = 0我需要按递增顺序枚举它,即1 2 3 4 6 8 9 12 ....
我正在考虑执行以下操作:维护优先级队列。对于current(i,j),我们可以递增i或递增j。计算这些新值的表达式并将它们推入优先级队列。从队列中弹出并继续。我们从(0,0)开始。我们还需要维护(i,j)以及计算表达式。此外,需要忽略重复。
我想通过保持较小的状态来了解是否有更快的方法来枚举上述表达式?
答案 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_index
和j_index
维护,它们跟踪那些指数未递增的最后一个值。