首先是轶事:我正在玩一个浏览器游戏,尽管它很有趣,但我发现"磨"实际上是非常好的回报.还有一个简单的鼠标点击程序可以为您完成工作的情况.然后我开始想知道如何制作一个控制鼠标的Haskell程序.唉,在谷歌搜索有点令人失望之后,我所能找到的只是人们指的是GLUT和其他一些支持鼠标输入反应而不是鼠标输出的模块.
现在的问题是:什么Haskell包支持鼠标输出,我在哪里可以了解更多?
给定一组实数值A[1..n,1..n],我希望找到子数组
B = A[i..j,s..t]
用1 <= i <= j <= n,和1 <= s <= t <= n
使得数字的总和B最大化.是否可以使用动态编程解决这个问题?我和奥胡斯大学的一位OR教授谈过,他不知道该怎么做,并说他很难看出它如何能有最佳的子结构质量.
但它有可能吗?如果有,怎么样?如果没有,为什么?
我已经知道一种算法可以O(n^3)及时运行,通过将其减少到n(n+1)/2复杂的子问题O(n),但这看起来有点慢.我知道最佳算法会Omega(n)及时运行,但我希望动态编程能够及时运行O(n^2).
原始问题总结
我添加了这一部分,因为我觉得有些人误解了我的问题.最初的问题是:
O(n^2)?如果有,怎么样?如果不是,为什么不呢?其他问题:
我在这里添加了一个新问题.稍后可能会添加更多内容:
B = A[1..m,1..m]的A[1..n,1..n]位置m < n,那么阵列的最优解决方案B最多也是如此A,因为同样的解决方案是可行的A.因此,要使用动态编程,可以合理地问:最佳子阵列A[1..i,1..i]与最佳子阵列之间的关系是A[1..i+1,1..i+1]什么?我有一个叫做LPSolve解决混合整数优化问题的程序.问题是我无法在迭代期间动态添加约束,因此我会编写一个LPSolve用于解决松弛的Haskell程序,然后根据解决方案推断出一些额外的约束.利用问题结构的约束.
是否可以在Haskell中运行可执行文件并检索发送到终端的输出?
是否存在解决线性编程问题的Haskell包?
我接受了下面问题的答案,但似乎我误解了haskell中的Arrays是如何工作的.我以为他们只是加强了名单.阅读以下问题时请记住这一点.
我发现haskell中的单片阵列在将它们用于较大的阵列时效率很低.
我无法在haskell中找到非单片的数组实现.我需要的是O(1)时间查找多维数组.
是否有支持这种情况的数组实现?
编辑:我似乎误解了整体一词.问题是似乎haskell中的数组像列表一样处理数组.我可能错了.
EDIT2:低效代码的简短示例:
fibArray n = a where
bnds = (0,n)
a = array bnds [ (i, f i) | i <- range bnds ]
f 0 = 0
f 1 = 1
f i = a!(i-1) + a!(i-2)
Run Code Online (Sandbox Code Playgroud)
这是一个长度数组,n+1其中第i个字段包含第i个斐波纳契数.但由于haskell中的数组具有O(n)时间查找,因此计算需要O(n²)时间.
我之前试图解决这个问题,并且我已经搜索了一个解决方案,却找不到一个.
我需要一个函数,它接受一个列表xs和一个整数n,并返回所有长度为n的列表,其中包含xs中的元素.例如:
function [0,1] 3 = [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
Run Code Online (Sandbox Code Playgroud)
我试过这个:
list _ 0 = []
list xs n = do
y <- xs
ps <- list xs (n-1)
return y : ps
Run Code Online (Sandbox Code Playgroud)
还有这个:
list _ 0 = []
list xs n = do
y <- xs
y : list xs (n-1)
Run Code Online (Sandbox Code Playgroud)
没有按预期工作.我想知道两件事:为什么这些不起作用?我该如何修改它们才能起作用?
我正在解决Project Euler Problem 11.我已将问题中的表复制粘贴到名为"input.txt"的文件中.输入文件的每一行包含一行20x20矩阵,列由空格分隔.
我想要的是一个读取此文件的函数,并将其作为IO数组返回.我这样做很麻烦.
到目前为止我已经这样做了:
import System.IO
import Control.Monad
main = readFile "input.txt"
Run Code Online (Sandbox Code Playgroud)
这当然只给我输入文件的IO String表示,但我尝试的一切似乎都失败了.我该怎么办?我知道我应该做点什么
array ((1,1),(20,20)) [ the numbers tupled with their indices ]
Run Code Online (Sandbox Code Playgroud)
但转换这些数字对我来说是完全不可能的,很可能是因为我还没有完全理解monad.
一旦你理解了,我相信这实际上很容易.
有没有人有关于该做什么的建议?