小编Fel*_*lix的帖子

Haskell递归Minimax树

我正在尝试使用minimax算法在Haskell中编写一个Tic Tac Toe程序.我构建了自己的"Rose a"数据类型,如下所示:

data Rose a = a :> [Rose a]
Run Code Online (Sandbox Code Playgroud)

这是我想要"存储"我的minimax树的数据类型.我理解minimax算法是如何工作的,但似乎无法在递归函数中实现它.

minimax :: Player -> Rose Board -> Rose Int
minimax p (r :> [])   | hasWinner r == Just p              = 1  :> []
                      | hasWinner r == Just (nextPlayer p) = (-1) :> []
                      | otherwise                          = 0  :> []
minimax p (r :> rs)   = maximum(map root xs) :> xs
    where xs = map (minimax' (nextPlayer p)) rs

minimax' :: Player -> Rose Board -> …
Run Code Online (Sandbox Code Playgroud)

algorithm recursion haskell minimax

2
推荐指数
1
解决办法
2546
查看次数

Haskell递归'sum'函数

我发现很难理解以下递归函数的机制:

sums (x:y:ys) = x:sums(x + y : ys)
sums xs = xs

sums ([0..4])

Output:
[0, 1, 3, 6, 10]
Run Code Online (Sandbox Code Playgroud)

这一行究竟发生了什么?:

x:sums(x + y : ys)
Run Code Online (Sandbox Code Playgroud)

我想说在程序可以将'x'附加到列表之前,必须首先执行函数sum(x + y:ys).但在这种情况下,'x'只会在递归循环结束时附加到列表中一次 - 这不会产生给定的输出......那么我逻辑中的缺陷在哪里?

我的后续问题:我应该如何以合乎逻辑的方式看待/处理递归函数,这会(希望)将我引向'aha-erlebnis'?

任何帮助深表感谢!

recursion haskell function list

1
推荐指数
1
解决办法
1443
查看次数

Python中的Eratosthenes筛非常慢

我用Python编写了一个程序,它找到了给定数字(n)以下的所有素数,并总结它们(回答Project Euler的问题10).为了解决这个问题,我需要将2,000,000以下的所有素数加起来.我的程序有效,但似乎非常低效(当n = 2,000,000时,即使在30分钟后它也不会显示答案).我找到了另一个快得多的程序,虽然我似乎无法找出是什么让我的速度慢于我发现的速度.这是两个程序:

慢节目(我写的那个):

def print_sum(n):

    prime_array = {}
    sum = 0

    for i in range(2, n+1):
        prime_array[i] = 1

    prime_array[0] = 0
    prime_array[1] = 0

    for j in range(2, int(math.sqrt(n)) + 1):
        if prime_array[j] == 1:
            for k in range(2, n + 1):
                prime_array[j*k] = 0

    for x in prime_array:
        if prime_array[x] == 1:
            sum = sum + x

    print sum

print_sum(2000000)
Run Code Online (Sandbox Code Playgroud)

快速计划:

n = 2000000
prime_array = [True] * n
sum = …
Run Code Online (Sandbox Code Playgroud)

python algorithm performance sieve-of-eratosthenes

0
推荐指数
1
解决办法
117
查看次数