我正在尝试寻找解决问题的实用方法(例如在工程方面的努力),其中我有一堆未知值:
val a: Int32 = ???
val c: Int32 = ???
val d: Bool = ???
Run Code Online (Sandbox Code Playgroud)
和表达式二进制树(在内存中),最终返回一个布尔值,例如
((a > 4) || (b == (c+2))) && (a < b) && ((2*d)) || e
Run Code Online (Sandbox Code Playgroud)
我有的布尔运算符and or xor not和32位整数有比较的东西,以及加法,乘法,除法(注意:这些必须尊重32位溢出!)以及一些按位的东西(移位,按位&,| ^).但是,我不一定需要支持所有这些操作[参见:LOL_NO_IDEA]
我想得到三个答案中的一个:
我正在解决的问题都不是太大或太复杂,而且条款太多(最多的是大约数百个).并且有大量的LOL_NO_IDEA可以.然而,我正在解决数以百万计的这些问题,因此不断的成本将会刺痛(例如转换为文本格式,并唤起外部解算器)
因为我是用scala做的,所以使用SAT4J看起来非常吸引人.虽然,文档很糟糕(特别是像我这样的人,他们只关注这个SAT世界几天)
但我目前的想法是,首先将每个Int32变为32个布尔值.这样我可以通过将它作为嵌套布尔表达式来表达像(a <b)这样的关系(比较msb,如果它们是eq,那么下一个等等)
然后当我有一个布尔变量和布尔表达式的大表达式树时 - 然后遍历它,同时逐步建立一个:http: //en.wikipedia.org/wiki/Conjunctive_normal_form
然后将其喂入SAT4J.
然而,所有这些看起来都非常具有挑战性 - 甚至构建CNF似乎效率很低(以天真的方式做,我实现它)并且容易出错.更不用说尝试将所有整数数学编码为布尔表达式.而且我无法为像我这样的人找到好的资源,一个想要使用SAT解决问题的工程师主要是一个黑盒子
我很感激任何反馈,即使它像"哈哈,你的白痴 - 看看X"或"是的,你的想法是正确的.享受!"
scala artificial-intelligence satisfiability conjunctive-normal-form
我有一大堆文件,如:
{ loc: [10.32, 24.34], relevance: 0.434 }
Run Code Online (Sandbox Code Playgroud)
并希望能够有效地执行以下查询:
{ "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }
Run Code Online (Sandbox Code Playgroud)
随意的盒子.
添加2d索引loc使得这非常快速和有效.但是,我现在也想获得最相关的文件:
.sort({ relevance: -1 })
Run Code Online (Sandbox Code Playgroud)
这导致一切都被抓到了(在任何特定的盒子里都会有大量的结果,而我只需要前10名左右).
任何建议或帮助非常感谢!!
我有一个网站,由postgres数据库支持.有多个Web服务器,它们维护与每个客户端的持久连接,并需要通知它们相关事件.来自一个Web服务器的更改可能会影响连接到另一个Web服务器的用户,因此我需要Web服务器之间的一些消息传递层.理想情况下,我想使用数据库来保持简单.
所以我看到的两个显而易见的方法是:
1)让网络服务器监听所有事件,并且网络服务器端过滤那些对它有用的事件(例如,与它当前有连接的用户有关).
要么:
2)为每个连接客户端动态创建一个监听器,并在客户端断开连接时删除监听器.
第一种方式意味着很多无用的数据通过网络,但网络服务器很容易过滤(一个简单的hashmap查找).第二种方式看起来很理想,如果 postgres以这样的方式实现,即我可以随时创建数千(至数万)的侦听器.
顺便说一下,我正在使用最新版本的postgres
思考?
非常感谢!
这有什么问题:
template <typename T>
std::list<T> & operator+=(std::list<T> & first, std::list<T> const& second)
{
std::for_each(second.begin(), second.end(), boost::bind(&std::list<T>::push_back, first, _1));
return first;
}
Run Code Online (Sandbox Code Playgroud)
编译很好,但不起作用.
我使用haskell的一个最大问题是能够(正确地)预测haskell代码的性能.虽然我遇到了一些更难的问题,但我发现自己几乎没有理解.
采取这样简单的事情:
count [] = 0
count (x:xs) = 1 + count xs
Run Code Online (Sandbox Code Playgroud)
据我了解,这不是严格的尾部调用(它应该在堆栈上保持1),所以看看这个定义 - 我能解释什么呢?计数函数显然应该有O(1)空间要求,但是这个是吗?我可以保证会不会或不会?
我需要在JavaScript中使用超级简单继承的超级可读版本.这是一些自动生成的代码,我无法使用外部函数或库.
我真正想要的是,假设Point3d"继承"Point,我想要这样的东西:
function Point(x,y) {
this.x = x;
this.y = y;
}
function Point3d(x,y,z) {
Point(x, y);
this.z = z;
}
Run Code Online (Sandbox Code Playgroud)
除了它实际上没有工作:
var pt = new Point3d(230,30,11);
// but x and y are in global scope, they should be in pt.x and pt.y :(
Run Code Online (Sandbox Code Playgroud)
一个可能的选择,在代码生成中会复制所有成员 - 但由于Javascript是基于原型的,我想这很容易做到(如果我真的知道Javascript)
谢谢
boost-bind ×1
c++ ×1
haskell ×1
javascript ×1
mongodb ×1
node.js ×1
optimization ×1
postgresql ×1
prototype ×1
scala ×1
stl ×1