2009 英特尔® 线程挑战赛 第二题 3SAT 火速发布!

denghui0815 2009-04-20 10:40:59
第二个问题现已发布。您可以在 2009 年 5 月 8 日之前提交作品。请参见竞赛规则了解更多信息或者访问竞赛论坛寻求问题解答。祝您好运!

3SAT


问题描述:可满足性问题研究的是取值为布尔值的析取子式的合取范式组成的表达式是否为TRUE的问题。要解决这个问题,也就是使得整个表达式为TRUE,你必须首先确定一组取值为TRUE或者FALSE的布尔变量是否存在。三元可满足性(3SAT)是可满足性问题的一种,它限制了析取子式只能有3个变量。以下是3SAT表达式的一个例子:
(X_1 | !X_2 | X_3) & (X_3 | X_2 | !X_1) & (X_2 | X_1 | !X_3) & (!X_1 | !X_2 | !X_3) “|”表示逻辑“或”(OR), “&”表示逻辑“与”(AND),“!”表示逻辑“非”(NOT)。当X_1和X_2为TRUE, X_3为FALSE时,此表达式为TRUE。

写一个线程程序,首先从一个文本文件中导入3SAT问题表达式实例,然后确定是否存在使得给定表达式为TRUE的布尔值赋值。

如果存在这样一组赋值,应该把结果打印到标准输出设备,同时将布尔变量的赋值输出到一个文本文件。如果赋值不存在,输出文件会被省略。输入和输出文件名应为应用程序执行命令行的第一和第二个参数。

文件格式:输入文件的第一行将包含两个整数:表达式中布尔变量的最大数量(这里用N表示)和文件中析取子式的数量(这里用K表示)。接下来的K行将包含ABS( [ 1 ,N] )中三个整数,三个整数之间以一个空格隔开。这些整数代表布尔变量的下标,负值表示对子式中布尔变量取反。

如果存在这样一组赋值,满足整个输入的表达式的值为TRUE,那么输出文件将包含N行。每一行表示N个变量中的第几个变量以及所赋的布尔值。每行格式: [ 1 ,N]中的一个整数,一个空格,表示TRUE或FALSE的字符 “T” 或 “F”。


输入文件样例(如上述例子)
3 4
1 -2 3
3 2 -1
2 1 -3
-1 -2 -3

输出文件样例(如上述例子)
2 T
3 F
1 T

计时:总执行时间将用于计分
...全文
401 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
denghui0815 2009-05-11
  • 打赏
  • 举报
回复
我用的walksat 速度还可以
haojn 2009-05-09
  • 打赏
  • 举报
回复
我刚提交

最后试了一下GSAT,但是计算sattisfied clause数量太慢了,我也没时间优化了,最终版本没有添加。

local search应该在N更大一些的时候好用
denghui0815 2009-05-08
  • 打赏
  • 举报
回复
真快 我用了局部搜索算法
优化了以后 uuf250也需要 5秒的时间

局部搜索算法 有个缺陷可能将有解的问题判为UNSAT
比如uf250-054.in 比较容易出这个问题
haojn 2009-05-08
  • 打赏
  • 举报
回复
优化了一下,现在uuf250需要1秒左右
haojn 2009-05-06
  • 打赏
  • 举报
回复
uuf50的那几个我都可以很快得出结果UNSAT
uuf150的大概平均要5秒
denghui0815 2009-05-04
  • 打赏
  • 举报
回复
T F F T F T T F F F F T F F T F F F F T
T F F T F T T T F F F F F F T F F F F T
T F F T F T T T F F F F F F T F T F F T
T F F T F T T T F F F T F F T F F F F T
T F F T F T T T F F T F F F F F T F F T
T F F T F T T T F F T F F F T F T F F T
T F F T F T T T F F T F T F F F T F F T
T T T T F T T F F T T T T F F F T T T F

这个是从高倒低的顺序 需要反一次的

haojn 2009-05-04
  • 打赏
  • 举报
回复
要看n,k的比值了,有个瓶颈值,忘了是多少了
killgxlin 2009-05-04
  • 打赏
  • 举报
回复
50个变量的30秒,够快的
denghui0815 2009-05-03
  • 打赏
  • 举报
回复
来个有解的大家对一下

20 91
4 -18 19
3 18 -5
-5 -8 -15
-20 7 -16
10 -13 -7
-12 -9 17
17 19 5
-16 9 15
11 -5 -14
18 -10 13
-3 11 12
-6 -17 -8
-18 14 1
-19 -15 10
12 18 -19
-8 4 7
-8 -9 4
7 17 -15
12 -7 -14
-10 -11 8
2 -15 -11
9 6 1
-11 20 -17
9 -15 13
12 -7 -17
-18 -2 20
20 12 4
19 11 14
-16 18 -4
-1 -17 -19
-13 15 10
-12 -14 -13
12 -14 -7
-7 16 10
6 10 7
20 14 -16
-19 17 11
-7 1 -20
-5 12 15
-4 -9 -13
12 -11 -7
-5 19 -8
1 16 17
20 -14 -15
13 -4 10
14 7 10
-5 9 20
10 1 -19
-16 -15 -1
16 3 -11
-15 -10 4
4 -15 -3
-10 -16 11
-8 12 -5
14 -6 12
1 6 11
-13 -5 -1
-7 -2 12
1 -20 19
-2 -13 -8
15 18 4
-11 14 9
-6 -15 -2
5 -12 -15
-6 17 5
-13 5 -19
20 -1 14
9 -17 15
-5 19 -18
-12 8 -10
-18 14 -4
15 -9 13
9 -5 -1
10 -19 -14
20 9 4
-9 -2 19
-5 13 -17
2 -10 -18
-18 3 11
7 -9 17
-15 -6 -3
-2 3 -13
12 3 -2
-2 -3 17
20 -15 -16
-5 -17 -19
-20 -18 11
-9 1 -5
-19 9 17
12 -2 17
4 -16 -5


T F F T F T T F F F F T F F T F F F F T
T F F T F T T T F F F F F F T F F F F T
T F F T F T T T F F F F F F T F T F F T
T F F T F T T T F F F T F F T F F F F T
T F F T F T T T F F T F F F F F T F F T
T F F T F T T T F F T F F F T F T F F T
T F F T F T T T F F T F T F F F T F F T
T T T T F T T F F T T T T F F F T T T F
denghui0815 2009-05-03
  • 打赏
  • 举报
回复
总算完成了穿行编码 不过速度很慢 堪比乌龟

50 218
18 -8 29
-16 3 18
-36 -11 -30
-50 20 32
-6 9 35
42 -38 29
43 -15 10
-48 -47 1
-45 -16 33
38 42 22
-49 41 -34
12 17 35
22 -49 7
-10 -11 -39
-28 -36 -37
-13 -46 -41
21 -4 9
12 48 10
24 23 15
-8 -41 -43
-44 -2 -35
-27 18 31
47 35 6
-11 -27 41
-33 -47 -45
-16 36 -37
27 -46 2
15 -28 10
-38 46 -39
-33 -4 24
-12 -45 50
-32 -21 -15
8 42 24
30 -49 4
45 -9 28
-33 -47 -1
1 27 -16
-11 -17 -35
-42 -15 45
-19 -27 30
3 28 12
48 -11 -33
-6 37 -9
-37 13 -7
-2 26 16
46 -24 -38
-13 -24 -8
-36 -42 -21
-37 -19 3
-31 -50 35
-7 -26 29
-42 -45 29
33 25 -6
-45 -5 7
-7 28 -6
-48 31 -11
32 16 -37
-24 48 1
18 -46 23
-30 -50 48
-21 39 -2
24 47 42
-36 30 4
-5 28 -1
-47 32 -42
16 37 -22
-43 42 -34
-40 39 -20
-49 29 6
-41 -3 39
-16 -12 43
24 22 3
47 -45 43
45 -37 46
-9 26 5
-3 23 -13
5 -34 13
12 39 13
22 50 37
19 9 46
-24 8 -27
-28 7 21
8 -25 50
20 50 4
27 36 13
26 31 -25
39 -44 -32
-20 41 -10
49 -28 35
1 44 34
39 35 -11
-50 -42 -7
-24 7 47
-13 5 -48
-9 -20 -23
2 17 -19
11 23 21
-45 30 15
11 26 -24
38 33 -13
44 -27 -7
41 49 2
-18 12 -37
-2 12 -26
-19 7 32
-22 11 33
8 12 -20
16 40 -48
-2 -24 -11
26 -17 37
-14 -19 46
5 47 36
-29 -9 19
32 4 28
-34 20 -46
-4 -36 -13
-15 -37 45
-21 29 23
-6 -40 7
-42 31 -29
-36 24 31
-45 -37 -1
3 -6 -29
-28 -50 27
44 26 5
-17 -48 49
12 -40 -7
-12 31 -48
27 32 -42
-27 -10 1
6 -49 10
-24 8 43
23 31 1
11 -47 38
-28 26 -13
-40 12 -42
-3 39 46
17 41 46
23 21 13
-14 -1 -38
20 18 6
-50 20 -9
10 -32 -18
-21 49 -34
44 23 -35
40 -19 34
-1 6 -12
6 -2 -7
32 -20 34
-12 43 -29
24 2 -49
10 -4 40
11 5 12
-3 47 -31
43 -23 21
-41 -36 -50
-8 -42 -24
39 45 7
7 37 -45
41 40 8
-50 -10 -8
-5 -39 -14
-22 -24 -43
-36 40 35
17 49 41
-32 7 24
-30 -8 -9
-41 -13 -10
31 26 -33
17 -22 -39
-21 28 3
-14 46 23
29 16 19
42 -32 -44
-24 10 23
-1 -32 -21
-8 -44 -39
39 11 9
19 14 -46
46 44 -42
37 23 -29
32 25 20
14 -43 -12
-36 -18 46
14 -26 -10
-2 -30 5
6 -18 46
-26 2 -44
20 -8 -11
-31 3 16
-22 -9 39
-49 44 -42
-45 -44 31
-31 50 -11
-32 -46 2
-6 -7 17
19 -32 48
39 20 -10
-22 -37 38
-31 9 -48
40 12 7
-24 -4 9
-22 49 33
-12 43 10
25 -30 -10
46 47 31
13 27 -7
-45 32 -35
-50 34 9
2 34 30
3 16 2
-18 45 -12
33 37 10
43 7 -18
-22 44 -19
-31 -27 -42
-3 -40 8
-23 -31 38


这个是无解的我的程序跑了半分钟
haojn 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cserken 的回复:]
这样的问题只能举穷吗???
[/Quote]
3SAT属于NPC
haojn 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lixianyu 的回复:]
“三元可满足性(3SAT)是可满足性问题的一种,它限制了析取子式只能有3个变量。”
“输入文件的第一行将包含两个整数:表达式中布尔变量的最大数量(这里用N表示)和文件中析取子式的数量(这里用K表示)。”
从以上2句,可推断出:N等于3.
如果说,N是整个句子的变量数,那么对于:
(X_1 | !X_2 | X_3) & (X_3 | X_2 | !X_1) & (X_2 | X_1 | !X_3) & (!X_1 | !X_2 | !X_3)
这个句子,N等于几呢?
[/Quote]
这个N=3因为只有x1,x2,x3
如果是(X_1 | !X_2 | X_3) & (X_3 | X_2 | !X_1) & (X_2 | X_1 | !X_3) & (!X_1 | !X_2 | !X_4) 就是N=4了
denghui0815 2009-05-02
  • 打赏
  • 举报
回复
所以只需要找到一个解就行了
keninqc1990 2009-05-02
  • 打赏
  • 举报
回复
3SAT是NPC的,就是考搜索+减枝,搜索用多线程来实现也是很方便的
另外,N当然可以大于3,要不然只要枚举8种情况就没了
cmsaint 2009-04-29
  • 打赏
  • 举报
回复
第一行说明,后4行输入,怎么只有3行输出
cserken 2009-04-29
  • 打赏
  • 举报
回复
这样的问题只能举穷吗???
killgxlin 2009-04-29
  • 打赏
  • 举报
回复
看起来今年没有去年人多啊
lixianyu 2009-04-28
  • 打赏
  • 举报
回复
“三元可满足性(3SAT)是可满足性问题的一种,它限制了析取子式只能有3个变量。”
“输入文件的第一行将包含两个整数:表达式中布尔变量的最大数量(这里用N表示)和文件中析取子式的数量(这里用K表示)。”
从以上2句,可推断出:N等于3.
如果说,N是整个句子的变量数,那么对于:
(X_1 | !X_2 | X_3) & (X_3 | X_2 | !X_1) & (X_2 | X_1 | !X_3) & (!X_1 | !X_2 | !X_3)
这个句子,N等于几呢?
haojn 2009-04-27
  • 打赏
  • 举报
回复
N不是3,是整个句子的变量数。3SAT意味着每个clause有3个变量

这道题的算法严重依赖于N和K,要是很大就只能全局优化了
lixianyu 2009-04-26
  • 打赏
  • 举报
回复
N定死了,就是3.
加载更多回复(6)
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问欢迎随时与博主沟通,第一时间进行解答!

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧