我正在寻找一些"推理规则"(类似于设置操作规则或逻辑规则),我可以用它来减少复杂或大小的SQL查询.有没有这样的东西?任何文件,任何工具?您自己找到的任何等价物?它在某种程度上类似于查询优化,但不是在性能方面.
说明不同:使用JOIN,SUBSELECTs,UNIONs(复杂)查询是否可以(或不)通过使用某些转换规则将其减少为更简单的等效SQL语句,从而产生相同的结果?
因此,我正在寻找SQL语句的等效转换,例如大多数SUBSELECT可以重写为JOIN的事实.
我有一些理论/实际问题,我现在还没有关于如何管理的线索,这里是:
我创建了一个SAT求解器,能够在存在模型时找到模型,并且当使用遗传算法在C中出现CNF问题时,不能证明矛盾.
SAT问题看起来基本上就像这样的问题:
我的目标是使用此求解器在许多不同的NP完成问题中找到解决方案 .基本上,我将不同的问题转换为SAT,用我的求解器解决SAT,然后将解决方案转换为原始问题可接受的解决方案.
我已经成功完成了N*N Sudoku以及N-queens问题,但这是我的新目标:将类调度问题减少到SAT,但我不知道如何形成类调度问题以便轻松转换它在SAT之后.
显然,在几个月内,我们的目标就是制作一张如下图所示的时间表:

我发现这个源代码能够解决类调度但不幸的是没有减少SAT:/
我还发现了一些关于规划的文章(例如http://www.cs.rochester.edu/users/faculty/kautz/papers/kautz-satplan06.pdf).
但是,本文中使用的规划域定义语言似乎对我来说过于笼统,以表示类调度问题.:/
是否有人知道如何有效地形成类调度以便将其减少到SAT以及之后,将SAT解决方案(如果它存在^^)转换为类调度?
我基本上对任何建议持开放态度,我现在不知道如何表示,如何减少问题,如何将SAT解决方案转换为计划......
我试图并行化以下程序,但不知道如何减少数组.我知道不可能这样做,但还有其他选择吗?谢谢.(我添加了对m的减少,这是错误的,但希望就如何做到这一点提出建议.)
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <omp.h>
using namespace std;
int main ()
{
int A [] = {84, 30, 95, 94, 36, 73, 52, 23, 2, 13};
int S [10];
time_t start_time = time(NULL);
#pragma omp parallel for private(m) reduction(+:m)
for (int n=0 ; n<10 ; ++n ){
for (int m=0; m<=n; ++m){
S[n] += A[m];
}
}
time_t end_time = time(NULL);
cout << end_time-start_time;
return 0;
}
Run Code Online (Sandbox Code Playgroud) OpenMP本身是否支持减少表示数组的变量?
这可能会像以下一样......
float* a = (float*) calloc(4*sizeof(float));
omp_set_num_threads(13);
#pragma omp parallel reduction(+:a)
for(i=0;i<4;i++){
a[i] += 1; // Thread-local copy of a incremented by something interesting
}
// a now contains [13 13 13 13]
Run Code Online (Sandbox Code Playgroud)
理想情况下,对于omp并行会有类似的东西,并且如果你有足够多的线程使它有意义,那么积累将通过二叉树发生.
我对lambda演算中的前身函数的维基百科描述感到困惑.
维基百科所说的如下:
PRED:=λnfx.n(λgh.h(gf))(λu.x)(λu.u)
有人可以一步一步地解释减少过程吗?
谢谢.
所有,
下面是我发现很难减少的lambda表达式,即我无法理解如何解决这个问题.
(λmλnλaλb.m(nab)b)(λfx.x)(λfx.fx)
这是我试过的,但我被卡住了:
将上述表达式考虑为:(λm.E)M等于
E = (λnλaλb.m (nab)b)
M =(λfx.x )(λfx.fx)
=>(λnλaλb.(λfx.x)(λfx.fx)(nab)b)
考虑到上述表达式为(λn.E)M等于
E =(λaλb.(λfx.x)(λfx.fx)(nab)b)
M = ??
..而我迷路了!!
任何人都可以帮助我理解,对于任何lambda演算表达式,执行还原的步骤应该是什么?
有没有办法查看haskell中的还原步骤,即跟踪所做的递归函数调用?例如,chez方案为我们提供了trace-lambda.Haskell中有一个等价的形式吗?
Haskell 定义说:
表达式是弱头正常形式(WHNF),如果它是:
- 一个构造函数(最终应用于参数),如True,Just(square 42)或(:) 1
- 一个内置函数应用于太少的参数(可能没有),如(+)2或sqrt.
- 或lambda抽象\ x - >表达式.
为什么内置功能会得到特殊处理?根据lambda演算,部分应用函数和任何其他函数之间没有区别,因为最后我们只有一个参数函数.
haskell lambda-calculus partial-application reduction weak-head-normal-form
假设我有10%的优惠券代码.
此优惠券仅适用于产品B.
顾客拥有购物车:
我不希望我的10%优惠券适用于其他产品但仅适用于产品B.
你知道我怎么能在Magento内做到这一点?
我正在通过类型和编程语言,而Pierce,通过降价策略调用,给出了该术语的示例id (id (?z. id z)).在将外部折射率降低到正常形式之前,将内部折射率id (?z. id z)减小到?z. id z第一次,id (?z. id z)作为第一次减少的结果?z. id z.
但是,按价值顺序调用被定义为"只有最外层的重新索引被减少",并且"仅当其右侧已经减少到某个值时,才会减少重新索引".在示例中id (?z. id z)出现在最外层redex的右侧,并且减少了.这与只有最外层的指数减少的规则相比如何?
"最外层"和"最内层"的答案仅仅是指lambda抽象吗?因此,对于一个长期t的?z. t,t不能减少,但在归约s t,t减少到一个值v,如果这是可能的,然后s v被降低?