小编Ove*_*own的帖子

国际象棋是否有完美的算法?

最近我和一位非编码人员就国际象棋电脑的可能性进行了讨论.我不太懂理论,但想想我已经足够了解.

我认为不存在确定性的图灵机总是在国际象棋中获胜或陷入僵局.我认为,即使你搜索了玩家1/2移动的所有组合的整个空间,计算机在每一步决定的单一动作都是基于启发式的.基于启发式,它不一定能击败对手可以做的所有动作.

相反,我的朋友认为,如果计算机永远不会做出"错误"动作,那么计算机将永远胜出或结合(但是你定义了吗?).然而,作为一名采用CS的程序员,我知道即使你的好选择 - 给予明智的对手 - 也会迫使你最终做出"错误"的动作.即使你知道所有事情,你的下一步行动也是贪婪地匹配启发式.

大多数国际象棋计算机都试图将可能的最终游戏与正在进行的游戏相匹配,这本质上是一个动态的编程追溯.同样,有问题的最后阶段是可以避免的.

编辑:嗯......看起来我在这里乱了一些羽毛.非常好.

再考虑一下,似乎解决像国际象棋这样的有限游戏没有理论上的问题.我认为国际象棋比跳棋更复杂,因为胜利不一定是数字耗尽,而是通过配偶.我最初的断言可能是错误的,但我认为我已经指出了一些尚未得到令人满意的证明(正式).

我想我的思想实验是,无论何时树中的分支被采用,那么算法(或记忆路径)必须找到对手移动的任何可能分支的配偶路径(不进行交配).在讨论之后,我会购买比我们可能梦想的更多的内存,所有这些路径都可以找到.

algorithm chess game-theory

107
推荐指数
14
解决办法
5万
查看次数

您应该听说过哪些复杂的数据结构?

这是一个衍生问题,但我正在询问您至少应该熟悉它们的实用性的数据结构.如果没有一些专业知识,这些结构太难实现.

我会说两者之间的良好界限是堆 - 你应该能够编写一个堆,但它需要你一天.不合适的是BST等.编辑:我认为这取决于你在做什么.我认为列出一个包含总结您使用它的原因的短语会很棒!

这是一个开始的列表:

  1. B +树:单个键上的一般索引结构很好
  2. Kd树:空间数据
  3. 红黑树:自平衡BST; 还有AVL或splay树
  4. 跳过列表:用于随机或(伪)顺序访问的良好混合结构
  5. Trie:线性时间字符串搜索

algorithm performance data-structures

16
推荐指数
2
解决办法
2625
查看次数

为什么GUI代码的计算成本如此之高?

所有Stackoverflowers,

我想知道为什么GUI代码负责吸走很多很多cpu周期.原则上,图形渲染远没有Doom复杂(尽管大多数企业GUI会引入大量的橱窗装饰).事件处理层看起来也是一个沉重的代价,但是,一个编写良好的实现似乎应该在具有大量内存/缓存的现代处理器上有效地在上下文之间切换.

如果有人在他们的大型GUI应用程序上运行了一个分析器,或者一个普通的API本身,那么我对瓶颈所在的位置感兴趣.

可能的解释(我想象)可能是:

  1. 硬件和应用程序接口之间的高度抽象
  2. 很多级别的间接到正确的代码来执行
  3. 优先级低(与其他进程相比)
  4. 行为不端的应用程序充斥着API与调用
  5. 过多的物体定向?
  6. 在API中完成糟糕的设计选择(不仅仅是问题,还有设计理念)

一些GUI框架比其他框架好得多,所以我想听听不同的观点.例如,Unix/X11系统与Windows有很大不同,甚至比WinForms还要多.

编辑:现在是一个社区维基 - 去吧.我还有一件事要补充 - 我是学校里的算法人员,如果GUI代码中的算法效率低下,他们会感兴趣.然后,它可能只是实现开销.

language-agnostic user-interface

13
推荐指数
2
解决办法
1947
查看次数

Java Time Savers

我发现这个问题的本质非常适合Stack Overflow上具有实际意识的人.

我正着手用Java制作一个相当大规模的项目.我不打算详细介绍,但它将涉及数据管理,异构格式的解析,以及需要具有编辑器语义的吸引人的界面.我是一名本科生,并认为这将成为一个展示我的就业技能的好项目 - 哎呀,理想情况下,它甚至可以成为初创公司的理由.

我写信告诉你,我可能没有考虑哪些捷径,这将有助于Java中的复杂项目.当然,我打算在Eclipse中使用它,并且可能会使用SWT作为GUI.但是,我知道Java不幸的是质量过于复杂,我不想被卡住.

在你告诉我我想用Python之类的东西之前,我只想重申为什么我会选择Java:

  1. 在Java中有更多的算法经验,并且会有相当多的经验.
  2. 想要一个庞大的API库来扩展功能.ANTLR,数据库,用于处理某些格式的库
  3. 想要以合适的性能在任何地方运行它

    我对所有技术都持开放态度(最熟悉Java,perl,sql,有点功能).

编辑:目前,我正在给它djna(尽管票数很低).我认为你的所有答案在某些方面肯定是有帮助的.

我认为djna能够更好地打击我作为新手程序员需要注意的东西,认识到我没有采取捷径而是试图不要陷入困境.至于大型框架的建议,尤其是 J2EE,在这种情况下太过分了.我正在尝试提供最简单的解决方案,其中我的API可以由不是J2EE/JDBC专家的人员进行扩展.

感谢提出Apache Commons,尽管我已经知道了.仍然对SWT与Swing感到困惑,但我使用过的每个Swing程序都很难看.正如我在帖子中提到的那样,我将要关注文件交换和我必须自己实现的有限数据库功能(但是要谨慎 - 我知道并发和ACID问题).

仍然是一个社区维基需要改进.

java frameworks

12
推荐指数
6
解决办法
739
查看次数

Java中的CPU利用率太低

嘿stackoverflow社区!

我遇到的问题是高度参与的算法程序正在使用TOO LITTLE cpu利用率:介于3%到4%之间.返回结果需要很长时间,而且我认为这还不够努力.

你们中的任何一个天才有任何想法为什么会发生这种情况 - 如果有什么我期望100%利用率.另外一个细节是该程序插入到sqlite3数据库中,因此,我相信通过sqlite3jdbc库有很多JNI调用.(请注意,我希望之前使用PreparedQuery批处理延迟这些插入,但这会导致严重的内存问题 - 这里有大量数据).

提前致谢

更新:已修复.是的,我只是一个doofus,但我没想到sqlite会启动一个新的事务并且做很多开销.

我现在使用PreparedStatement并在插入之前排队32768条目 - 对我来说似乎是一个足够好的数字.

java cpu utilization

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

什么是第一个双倍偏离相应的长三角?

我想知道从0d向上的第一个双重偏差"相同值"的长度偏离某个增量,比如1e-8.我虽然失败了.我试图在C中做这个,虽然我通常使用托管语言,以防万一.请帮忙.


#include <stdio.h>
#include <limits.h>
#define DELTA 1e-8

int main() {
    double d = 0; // checked, the literal is fine
    long i;
    for (i = 0L; i < LONG_MAX; i++) {
         d=i; // gcc does the cast right, i checked
         if (d-i > DELTA || d-i < -DELTA) {
              printf("%f", d);
              break;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

我猜测问题是di将我加倍,因此d == i然后差异总是为0.我还能检测到这一点 - 我更喜欢有趣的C转换比较比较字符串,这会永远.

答案:完全符合我们的预期.根据标准C/UNIX/POSIX工具,2 ^ 53 + 1 = 9007199254740993是第一个不同点.非常感谢pax的计划.我猜数学再次获胜.

c math double gcc

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

Apache 作为 CouchDB 的反向代理

我正在考虑一个广泛使用 CouchDB 的网络应用程序,到了尽可能多地使用本机 erlang HTTP API 提供服务的地步。

您能否将 Apache 配置为反向代理,以允许将外部 GET 直接代理到 CouchDB,而将 PUT/POST 发送到应用程序内部逻辑(用于卫生、身份验证...)?或者这是不明智的——CouchDB 内置身份验证选项对于 Web 应用程序来说似乎有点弱。

谢谢

erlang proxy couchdb http apache2

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

功能编程新手

嘿,我是Haskell的新手,并且一直使用更多经典的编程语言.我不知道这里发生了什么.我正在尝试制作一个非常简单的Viterbi算法实现,但仅限于两个州(诚实和不诚实的赌场)

我有一个问题,我想解决我的数组,但我不认为我的类型是正确的.每当我试图解决它时,我或者我正在制作一个新阵列 - 同样愚蠢.请特别注意myArray,te中缀和dynamicProgram,PLEASE.非常漂亮

 Code


import Array
import Char

trans :: Int -> Int -> Double -> Double -> Double
trans from x trans11 trans21 =
    if (from == 1) && (x == 1)
        then trans11
    else if (from == 1) && (x == 2) 
        then (1-trans11)
    else if (from == 2) && (x == 1) 
        then trans21
    else (1-trans21)

em :: Char -> [Double] -> Double
em c list = list!! a
    where a = digitToInt c

intToChar :: …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming viterbi

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

Haskell字符串列表通过行

我正在使用行功能来获取输入并在将许多变量发送到函数之前将其拆分.请查看run函数并告诉我为什么会出现以下错误.看起来它应该只是将ln中的第一个字符串分配给seq,但是我得到一个错误.

ERROR:dishonest.hs:33:11:
    Couldn't match expected type `[t]' against inferred type `Char'
    In a 'do' expression: seq <- ln !! 0
    In the expression:
        do ln <- lines s
           seq <- ln !! 0
           states <- ln !! 1
           l1 <- listDouble (ln !! 2)
           ....
    In the definition of `run':
        run s = do ln <- lines s
                   seq <- ln !! 0
                   states <- ln !! 1
                   ....
code follows...

import Char

maximumInd :: (Double, Double) -> Int
maximumInd …
Run Code Online (Sandbox Code Playgroud)

string haskell functional-programming

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

Python pysqlite不接受我的qmark参数化

我认为我是一个傻瓜,也许不是进口正确的包装,但是当我做...


from pysqlite2 import dbapi2 as sqlite
import types
import re
import sys
...
    def create_asgn(self):
        stmt = "CREATE TABLE ? (login CHAR(8) PRIMARY KEY NOT NULL, grade INTEGER NOT NULL)"
        stmt2 = "insert into asgn values ('?', ?)"
        self.cursor.execute(stmt, (sys.argv[2],))
        self.cursor.execute(stmt2, [sys.argv[2], sys.argv[3]])
...
 I get the error pysqlite2.dbapi2.OperationalError: near "?": syntax error 

这对我来说没什么意义,因为文档显示pysqlite是qmark参数化的.我是python和db-api的新手,帮助我!谢谢

python sqlite pysqlite python-db-api

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