算法概论课后题8.16证明

来源:互联网 发布:战地使命召唤知乎 编辑:程序博客网 时间:2024/06/16 12:53

算法概论8.16

8.16 We are feeling experimental and want to create a new dish. There are various ingredients we can choose from and we’d like to use as many of them as possible,but some ingredients don’t go well with others.if there are n possible ingredients(numbered 1 to n),we write down an n x n matrix giving the discord between any pair of ingredients.this discord is a real number between 0.0 and 1.0,where 0.0 means “they go together perfectly” and 1.0 means “they really don’t go together.”Here’s an example matrix when there are five possible ingredients.

 

1

2

3

4

5

1

0.0

0.4

0.2

0.9

1.0

2

0.4

0.0

0.1

1.0

0.2

3

0.2

0.1

0.0

0.8

0.5

4

0.9

1.0

0.8

0.0

0.2

5

1.0

0.2

0.5

0.2

0.0

 

In this case,ingredients 2 and 3 go together pretty well whereas 1 and 5 clash badly.Notice that this matrix is necessarily symmetric;and that the diagonal entries are always 0.0.Any set of ingredients incurs a penalty which is the sum of all discord values between pairs of ingredients. For instance, the set of ingredients {1,3,5} incurs a penalty of 0.2+1.0+0.5=1.7.We want this penalty to be small.

 

EXPERIMENTAL CUISINE

Input:n,the number of ingredients to choose from;D,the n x n”discord” matrix;some number p≥0

Output:The maximum number of ingredients we can chose with penalty≤p.

Show that if EXPERIMENTAL CUISINE is solvable in polynomial time,then so is 3SAT.

 

 

    题目是说在做菜的时候,有不同的材料可以选择,想要尽可能多的用不同种的食材,但是其中有些食材不是很适合搭配在一起。假设有n中可以用的食材(1到n种),任意两种食材的不搭配度可以表示为一个n x n的矩阵。不搭配度是一个0.0到1.0的值,0.0表示这两种食材搭配很完美,1.0表示这两种食材前绝对不能放在一起。

    如表中所示,食材2和食材3搭配完美,而食材1和食材5搭配就很差。可以发现矩阵是对称的,且对角线上总是0.0。实际上任意两种不同的食材之间搭配多少都会有一些负面的影响。比如{1,3,5}三种食材搭配就会产生0.2+1.0+0.5=1.7的不搭配度。我们希望这个不搭配度尽量的小。

烹饪实验:

输入:可选食材的种类n;n x n的食材之间的不搭配矩阵D;一个值p;

输出:是的不但配的值不超过p的最大可选材料的数量。

证明如果烹饪实验多项式时间可解,则3AT也可以。

---------------------------------------------------------------------------------------------------------------------------------

解题:

    想要证明如果烹饪实验多项式时间可解,则3SAT也可以,只要需要证明3SAT可以规约到烹饪实验,则烹饪实验多项式时间可解,3SAT也就可以。

 

分析:

    根据题目,当某k种食材搭配在一起的时候,这k种食材互相搭配都会有不搭配度,总的不搭配度就是这些不搭配度加起来。

我们来看例子中的表格,实际上5种食材之间都有值,它可以看成一个有5个点的图,由于不同的点之间都有值,所以它实际上就是一个边带有权值的无向完全图。选食材实际上就是在这个图中选点和边,当我们选中3个食材的时候,也就是选择了这个图中的3个点的完全子图,实际上就是一个团。我们希望在保证不匹配度不大于p的情况下,尽可能的使这个团最大,所以这很类似于最大团问题。

所以就想到可以尝试把最大团问题规约到烹饪实验

最大团问题为给定无向图G=(V,E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u,v)∈E,则称U是G的完全子图。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。

所以最大团问题和烹饪实验的差别就是,最大团问题中的输入一般不是完全图(也可能是),而烹饪实验中给出的表格实际可以表示为完全图,所以要想办法把最大团中的图转化成特殊的完全图才能输入到烹饪实验中。

实际可以这么做:

假设最大团问题中输入的无向图为G=(V,E)。

(1)把G图中的边全都赋上权值0。

(2)对于任意u,v∈V,若边(u,v)不属于E,则添上(u,v)。也就是给G图添上边使得G图成为一个完全图,并且添上的边都赋上权值1。

(3)将新的G转化成矩阵输入到烹饪实验中,并且取p=0。

    因为p取为0,所以烹饪实验中,选出来的食材之间的不匹配度都必须是0,不会选择新添上的权值为1的边,所以最后选出来的食材就是原图G中的最大团中的点。

 

    所以最大团问题就转化成了烹饪实验。

 

    又根据算法概论课本第八章中的内容有:3SAT->独立集,独立集->团问题;也就是说3SAT问题可以规约到团问题,而刚才又证明了团问题可以规约到烹饪实验,根据规约的传递性,3SAT就可以规约到烹饪实验。

 

所以如果烹饪实验多项式时间可解,则3SAT也可以。

---------------------------------------------------------------------------------------------------------------------------------

算法分析与设计课程已经结束了,虽然平时做leetcode的题都有选择Hard的来做,可是考试的时候也没做出几题来,做题的速度以及思考的方式都有很多不足,希望自己以后能再多进步吧。

原创粉丝点击