小编Vik*_*ahl的帖子

完美的哈希函数

我正在尝试散列值

10, 100, 32, 45, 58, 126, 3, 29, 200, 400, 0
Run Code Online (Sandbox Code Playgroud)

我需要一个函数,将它们映射到一个大小为13的数组,而不会导致任何冲突.

我花了几个小时思考这个并用谷歌搜索,无法解决这个问题.我还没有接近可行的解决方案.

我将如何找到这种哈希函数?我玩过gperf,但我真的不明白它,我无法得到我想要的结果.

hash hashtable perfect-hash

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

使用web.py作为非阻塞http-server

在学习python的基本编程时,我找到了web.py. 我遇到了一个愚蠢的问题:

我写了一个简单的控制台应用程序,其主循环在单独的线程中从队列中截取项目.我的目标是使用web.py将项目添加到我的队列,并通过Web请求报告队列的状态.我把它作为模块运行,但无法将其集成到我的主应用程序中.我的问题是,当我用app.run()启动http服务器时,它会阻止我的主循环.还试图用thread.start_new_thread启动它,但它仍然阻止.有一种简单的方法可以在我的应用程序中在后台运行web.py的集成http服务器.

在可能的情况下,我是一个基本的误解的受害者,任何澄清我的推理错误的尝试都会有所帮助;.)(请耐心等待我,我是初学者:-)

python multithreading web-services web.py

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

如何在Clojure中实现`let`以及它的开销是多少?

我可以看到两种实现let绑定的方法.首先,如从SICP所知,let可以实现为lambda函数.这是方便和简单的,但考虑到每个lambda(fn)在JVM中被转换为单独的类并且let在平均程序中使用的次数这一事实,这看起来非常非常昂贵.

其次,let绑定可以直接转换为本地Java变量.这会产生很少的开销,但是在堆栈上存储绑定会破坏语言语义:在这种情况下,创建闭包是不可能的 - 保存的值将在堆栈展开后立即销毁.

那么Clojure中使用的实际实现是什么?指出Clojure源中的相应行是值得赞赏的.

performance clojure let

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

为什么要使用基于红黑树的Java TreeMap实现?

维基百科关于AVL树的文章的第三段说:"由于AVL树更加严格平衡,因此对于查找密集型应用程序来说,它们比红黑树更快."

因此,不应该使用AVL树而不是红黑树来实现TreeMap(因为基于散列的数据结构会有更多的查找密集型应用程序)?

java algorithm avl-tree red-black-tree binary-search-tree

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

C++ is_trivially_copyable检查

如何检查C++类型是否可以轻易复制?我有一个类,它使用具有指定模板类型T的memcpy和memcmp函数,我想为类型启动断言,使用memcpy复制是不安全的.有没有办法(使用现有标准)?

c++ memcpy type-traits memcmp visual-c++

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

消息传递与锁定

在性能方面,消息传递并发方案和基于锁的并发方案之间究竟有什么区别?正在等待锁定的线程阻塞,因此其他线程可以运行.因此,我没有看到消息传递如何比基于锁的并发更快.

编辑:具体来说,我正在讨论像Erlang中的消息传递方法,与使用锁(或原子操作)的共享数据方法相比.

concurrency message-passing

8
推荐指数
3
解决办法
4138
查看次数

具有Boost和外部数据源的Flyweights

也许有一个简单的方法,我没有看到,所以希望有人可以向我解释.

假设我有一节课:

class A {
public:
  const double parameter;
  const std::string name;
  const std:: string fileName;

  A(const double parameter, const std::string name, const std::string fileName) : 
      parameter(parameter), name(name), fileName(fileName) {}; 
};
Run Code Online (Sandbox Code Playgroud)

那个类的生成器是:

class AReader {
public:
  ifstream dataFile;
  AReader(const std::string filename);
  A* readObject(const std::string objectName);
};
Run Code Online (Sandbox Code Playgroud)

我想boost::flyweight用来处理这些A对象,因为它们可能有数百万个引用,实际上它们包含大量数据.他们将在哈希namefileName在一起.

我需要做什么才能做到这一点?我需要boost::flyweight调用AReader.readObject并散列/存储生成的A类.

是否AReader需要成为一个完整的工厂并用作定制工厂?或者是否可以使用flyweight中的默认工厂并以某种方式用于AReader生成A实例(而不是实现工厂所需的整个存储模式),可能通过使AReader实例成为flyweight中的某个参数?或者是否可以const从外部数据源获取公共变量(即,一旦设置,它们不会更改)而无需诉诸第二类?

编辑

我也对不使用Boost的其他建议持开放态度.我当然可以编写我自己的flyweight实现,或任何其他模式,如果一个更适合.但如果我可以使用已经存在的东西,那将是最好的.无论什么最小化我需要编写的代码量,因为一如既往,截止日期很短.

c++ boost flyweight-pattern boost-flyweight

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

为什么MAX()比ORDER BY慢100倍... LIMIT 1?

我有一个表foo(包括其他20个)列bar,baz并且quux索引为bazquux.该表有~500k行.

为什么以下查询的速度差异如此之大?查询A需要0.3秒,而查询B需要28秒.

查询A.

select baz from foo
    where bar = :bar
    and quux = (select quux from foo where bar = :bar order by quux desc limit 1)
Run Code Online (Sandbox Code Playgroud)

说明

id  select_type table   type    possible_keys   key     key_len ref     rows    Extra
1   PRIMARY     foo     ref     quuxIdx         quuxIdx 9       const   2       "Using where"
2   SUBQUERY    foo     index   NULL            quuxIdx 9       NULL    1       "Using where"
Run Code Online (Sandbox Code Playgroud)

查询B.

select baz from foo
    where bar …
Run Code Online (Sandbox Code Playgroud)

mysql performance query-optimization

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

在Haskell中使用'Either'

我有两个值,t1并且t2,类型的Either String Type.该Left-value用于错误处理.这些值用于返回的函数中Either String Type.

我想要做的是检查是否都t1t2Right-值和满足p :: Type -> Bool.如果他们这样做,我想回来Right (the type inside t1).如果这两个t1t2Right-值,但不能满足p,我要回Left someString.如果其中一个t1或是t2一个Left值,我只想传递该值.

我怎样才能以优雅的方式做到这一点?我有一种预感,使用Either作为monad是正确的做法,但我不确定如何去做.

monads haskell either

6
推荐指数
2
解决办法
6844
查看次数

在Haskell中创建唯一标签

我正在为Haskell中的简单命令式语言编写编译器,输出Java字节码.我已经到了我发出字节码的抽象表示的地步.

在编写用于编译if语句的代码时遇到了一些麻烦.要实现if语句,我需要跳转到标签.因此,我需要为该标签生成一个名称,该名称必须是唯一的.

我的第一个想法是通过一些状态compileStatement,即

compileStatement :: Statement -> UniqueIDState -> [AbstractInstruction]
Run Code Online (Sandbox Code Playgroud)

当然,compilerStatement是递归的,所以使用这种方法需要我从递归调用中将唯一ID生成器的状态传递回upp:

compileStatement :: Statement -> UniqueIDState -> (UniqueIdState, [AbstractInstruction])
Run Code Online (Sandbox Code Playgroud)

这看起来有点笨拙,特别是如果我意识到我需要在将来携带更多状态; 有更优雅的方式吗?

compiler-construction haskell code-generation

6
推荐指数
2
解决办法
1658
查看次数