等于一的一半的幂

等于一的一半的幂

Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
把每一个分母为2的亚单位比率称为一个困惑。
数字1可以用多种方式写成一个困惑的总和。
把所有的困惑都称为齐塔人。
两个齐塔人是不同的,只要其中一个齐塔人至少有一个困惑,而另一个则没有在上图中,最后两个齐塔人被认为是相同的。
找到所有方法的数字1可以写为一个齐塔人与N困惑因为这个数字可能很大,所以把它计算成100003的模。
请不要发布代码,而是发布算法。尽可能精确。
这个问题是在一次竞赛中提出的,官方的解决方案是用罗马尼亚语编写的,已经作为docx文件上传到https://www.dropbox.com/s/ulvp9of5b3bfgm0/1112_descr_P2_fractii2.docx?dl=0。(你可以使用谷歌翻译)
我不明白《解决方案》的作者在那里想说什么。

最佳答案

好吧,这让我想起了bfs算法(广度优先搜索),你从一个点向外辐射,找到多个不同排列的解。
在这里,您可以使用递归,并将基本情况设置为在递归函数的1个调用堆栈中达到n个复杂值时。
所以你可以说:

function(int N <-- perplexes, ArrayList<Double> currentNumbers, double dividedNum)
if N == 0, then you're done - enter the currentNumbers array into a hashtable
clone the currentNumbers ArrayList as cloneNumbers
remove dividedNum from cloneNumbers and add 2 dividedNum/2
iterate through index of cloneNumbers
    for every number x in cloneNumbers, call function(N--, cloneNumbers, x)

这是一个粗糙,效率很低,但很短的方法。显然有很多方法可以删减算法(减少进入哈希表的重复项数量,尽可能防止克隆,等等),但因为这显示了每个数字的绝对排列,然后将该序列输入哈希表,哈希表将使用它的均等()比较来查看序列已经存在(例如您的前2个Zeta),并拒绝重复。这样,你就会得到你想要的答案。
当前算法的效率:O(| E | ^(N)),其中| E |是在所有插入结束时数组中可以包含的绝对数量,N是插入的数量(或者如您所说的,困惑的数量)显然这不是最理想的速度,但它确实有效。
希望这有帮助!

关于algorithm - 等于一的一半的幂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27198248/

10-10 13:38