根据我在Google上发现的公式,它是2 ^(32-1)= 2147483648,但这似乎有点高。这是对的吗?
答案 0 :(得分:1)
实际上,它不是error
。它是lookUp :: (Eq k) => k -> [(k,v)] -> v
lookUp k = foldl (\ acc (k',v) -> if k == k' then v else acc) (error "key not found")
或2^(32-1)
。
所以......比你计算的还要大。
答案 1 :(得分:1)
我们可以使用induction证明实际结果((2 ^ r) - 1,其中r是行数)!!树中的每一行r包含2 ^(r-1)个节点这很清楚,因为每行包含最后一行的元素数量的两倍,所以第一行包含2 ^(1 - 1)= 1个节点,第二行行包含两次这个数字2 ^(2 - 1),2个节点。
假设如果我们有r行,则节点总数的公式为2 ^ r - 1.检查这个是否为普通情况,1行有2 ^ 1 - 1 = 1个节点......
现在显示从第二个案例到第一行+第一行的工作情况因此在第二种情况下我们有(2 ^ r) - 1个节点来获得第(r + 1)个案例的总行数我们需要添加(r + 1)个节点。第(r + 1)行具有2 ^((r + 1)-1)个节点,如第一段中所讨论的。将其添加到我们当前节点总数上:
(2 ^ r) - 1 + 2 ^(r + 1 - 1)= 2 ^ r - 1 + 2 ^ r = 2 * 2 ^ r - 1 = 2 ^(r + 1) - 1
由于这是第(r + 1)行的正确公式,我们已经证明了结果。