小编kay*_*kay的帖子

什么是优秀的人工智能期刊?

我对人工智能感兴趣,并希望跟上最新的人工智能研究.有人可以推荐我应该阅读的前2-3种AI期刊吗?

artificial-intelligence

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

加速和最佳实践:为每个模块预先计算的数据使用ets

((请原谅我,我在一个帖子中提出了不止一个问题.我认为它们是相关的.))

您好,我想知道,Erlang中有关每模块预编译数据的最佳实践.

示例:我有一个模块,它在一个熟悉的知识,复杂的正则表达式上运行.re:compile/2的文档说:"编译一次并执行多次比每次想要匹配时编译效率要高得多".由于没有指定re的mp()数据类型,因此如果你想要一个目标独立的梁,就不能在编译时放入,因此必须在运行时编译RegEx.((注意: re:compile/2只是一个例子.任何复杂的memoize函数都适合我的问题.))

Erlang的模块(可以)有一个-on_load(F/A)属性,表示在加载模块时应该执行一次的方法.因此,我可以将我的正则表达式编译为此方法并将结果保存在名为的新ets表中?MODULE.

Dan回答后更新.

我的问题是:

  • 如果我正确理解ets,它的数据将保存在另一个进程中(与进程字典不同)并且检索ets表的值非常昂贵.(如果我错了,请证明我错了!)是否应将ets中的内容复制到流程词典中以加快速度?(请记住:数据永远不会更新.)
  • 将所有数据作为一个记录(而不是许多表项)放入ets/process字典中是否存在任何(相当大的)缺点?

工作范例:

-module(memoization).
-export([is_ipv4/1, fillCacheLoop/0]).
-record(?MODULE, { re_ipv4 = re_ipv4() }).
-on_load(fillCache/0).

fillCacheLoop() ->
    receive
        { replace, NewData, Callback, Ref } ->
            true = ets:insert(?MODULE, [{ data, {self(), NewData} }]),
            Callback ! { on_load, Ref, ok },
            ?MODULE:fillCacheLoop();
        purge ->
            ok
    end
.
fillCache() ->
    Callback = self(),
    Ref = make_ref(),
    process_flag(trap_exit, true),
    Pid = …
Run Code Online (Sandbox Code Playgroud)

erlang big-o memoization ets

9
推荐指数
3
解决办法
2471
查看次数

偏好SVS或Git的原因

我刚刚发现了一个仍然使用CVS的开源项目.我想知道现在还有什么理由比CVN或Git更喜欢CVS.(我不认为懒得迁移作为答案!;-))

CVS有其他两个缺乏的东西吗?比如说,支持$ OS或$ fancy_tool?

在" 使用SVN而不是CVS有什么好处?"有详细解释为什么不使用CVS.但我想反过来问问.CVS不可能都是坏事.或者是吗?

language-agnostic svn git cvs version-control

9
推荐指数
2
解决办法
4163
查看次数

在Erlang中区分字符串与列表

在Erlang中,当您有一个可打印字符列表时,它是一个字符串,但字符串也是一个项目列表,列表的所有功能都可以应用到字符串中.理想情况下,数据结构:字符串在erlang中不存在.

我的部分代码需要确保某些东西不仅是一个列表,而且是一个字符串.(一个真正的字符串).它需要将列表分开,例如 [1,2,3,a,b,"josh"] ,从字符串中分离出来 "Muzaaya" .保护表达式is_list/1将对true字符串和列表说明.没有这样的警卫is_string/1,所以这意味着我需要一个代码片段来确保我的数据是一个字符串.在这种情况下,字符串是仅可打印的列表(字母,两种情况,上部和下部),并且可以包含数字,例如"Muzaaya2536 618 Joshua".我需要一个代码片段(Erlang)来检查我并确保变量是一个字符串,而不仅仅是一个列表.谢谢

erlang

9
推荐指数
2
解决办法
4289
查看次数

高效搜索乱码中的单词

我想你可以把它归类为拼字游戏风格的问题,但它起初是因为一位朋友提到了英国电视智力竞赛节目Countdown.在节目中的各种轮次涉及参赛者被提出一组乱七八糟的字母,他们必须提出他们可以用的最长的单词.我朋友提到的那个是"RAEPKWAEN".

在相当短的时间内,我用Python来处理这个问题,使用PyEnchant处理字典查找,但是我注意到它实际上无法很好地扩展.

这是我目前的情况:

#!/usr/bin/python

from itertools import permutations
import enchant
from sys import argv

def find_longest(origin):
    s = enchant.Dict("en_US")
    for i in range(len(origin),0,-1):
        print "Checking against words of length %d" % i
        pool = permutations(origin,i)
        for comb in pool:
            word = ''.join(comb)
            if s.check(word):
                return word
    return ""

if (__name__)== '__main__':
    result = find_longest(argv[1])
    print result
Run Code Online (Sandbox Code Playgroud)

这对他们在节目中使用的9个字母的例子来说很好,9 factorial = 362,880和8 factorial = 40,320.在那个等级上,即使它必须检查所有可能的排列和字长,也不是那么多.

然而,一旦你达到14个字符,那就是87,178,291,200可能的组合,这意味着你很依赖运气,很快找到一个14个字符的单词.

通过上面的示例单词,我的机器大约需要12 1/2秒才能找到"重新唤醒".有了14个字符的乱码,我们可以用23天的规模来讨论所有可能的14个字符排列.

有没有更有效的方法来处理这个?

python pyenchant

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

使Fabric.js对象可拖动但不"可选"

Fabric.js有这个非常酷的方面,默认情况下它允许所有对象都是"可选择的",这意味着它们可以被拖动,调整大小和旋转.但是,我希望它们只能被拖拽,不能调整大小或旋转.这可能吗?如果需要的话,我不介意与源码混淆,这比自己重新实现更好.

javascript fabricjs

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

Python文档中的错误?

我正在阅读http://docs.python.org/2/tutorial/modules.html#more-on-modules,并想知道以下内容是否正确:

模块可以导入其他模块.习惯但不要求将所有import语句放在模块的开头(或脚本,就此而言).导入的模块名称放在导入模块的全局符号表中.

显然不是:

>>> def foo(): import sys
... 
>>> foo()
>>> sys.path
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
Run Code Online (Sandbox Code Playgroud)

有关在线演示,请访问http://ideone.com/cLK09v.

那么,它是Python文档中的错误还是我不明白?

python import module

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

在C中定义未使用的参数

我需要使用pthreat但我不需要将任何参数传递给函数.因此,我将NULL传递给pthread_create上的函数.我有7个pthreads,所以gcc编译器警告我有7个未完成的参数.如何在C编程中将这7个参数定义为未使用?如果我没有将这些参数定义为未使用,是否会导致任何问题?提前感谢您的回复.

void *timer1_function(void * parameter1){
//<statement>
}

int main(int argc,char *argv[]){
  int thread_check1;
  pthread_t timer1;
  thread_check1 = pthread_create( &timer1, NULL, timer1_function,  NULL);
    if(thread_check1 !=0){
        perror("thread creation failed");
        exit(EXIT_FAILURE);
    }
while(1){}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c gcc posix pthreads

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

DELIMITER /在SQLAlchemy中创建触发器

我需要在SQLAlchemy中创建一个BEFORE INSERT 触发器:

DELIMITER |
CREATE TRIGGER set_rank BEFORE INSERT ON authors
FOR EACH ROW BEGIN
    IF NEW.rank = 0 THEN
        SET NEW.rank = (SELECT IFNULL(MAX(a.rank),0) + 1
                        FROM authors AS a
                        WHERE a.id = NEW.pub_id);
    END IF;
END |
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

在mysql-workbench中执行代码的工作正常,但在我的实际代码中执行时会出现"你的SQL语法中有错误"异常:

from sqlalchemy.sql.expression import text

connection = db.session.connection()
text(..., connection).execute();
Run Code Online (Sandbox Code Playgroud)

跑步SELECT SLEEP(1),CREATE TABLE test (id INT)甚至USE some_db工作得很好.

这是我得到的mysql错误消息:

(1064,"你的SQL语法有错误; ...'DELIMITER附近| \n \n \n创建TRIGGER set_rank BE ...")

我很确定我错误地使用了DELIMITER.在这个环境中什么是正确的语法/如何解决我的问题?

python mysql sqlalchemy flask

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

多个作家,一个读者,哪个集合

我的情况是这样的:

多个线程必须同时写入同一个集合(add和addrange).物品的顺序不是问题.当所有线程都完成(加入)并且我回到我的主线程上时,我需要以foreach样式快速读取所有收集的数据,因为所有线程都完成后不需要实际锁定.

在"过去的日子"中,我可能会在List上使用读写器锁,但是对于新的并发集合,我想知道是否有更好的选择.我只是无法弄清楚哪些并发集合似乎假设读者也在并发线程上.

c# concurrency multithreading

8
推荐指数
2
解决办法
1420
查看次数