CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

解析式不能表达的子集和函数,自由的正式发表

已有 4721 次阅读 2014-12-9 11:31 |个人分类:科研讨论|系统分类:科研笔记| 多项式时间复杂度, P与NP, 函数表示

解析式不能表达的子集和函数

          姜咏江  Email:accsys@126.com

   解析式不能表达的函数一般只能够用真值表的形式来表示,只是函数的定义域和值域都必须是有限个值。著名的子集和subset_sum问题就是这样一个函数。如何将这个函数表达出来?第一,先要确定函数的定义域;第二,求出函数的值域并建立对应关系。

一、添右组合法

   N个数组成的数集的子集应该有2N个。如何能够快速地求出这2N个子集?我这里提供一种方法,叫添右组合法。我相信这是一种最快的求全部子集与子集和方法。

1是添右组合方法求全部非零子集的例子。

1  添右组合例子

序号

S1

S2

S3

S4

S5

1

12

34

56

77

562

2

12,34

34,56

56,77

77,562

 

3

12,56

34,77

56,562

 

 

4

12,77

34,562

 

 

 

5

12,562

 

 

 

 

6

12,34,56

34,56,77

56,77,562

 

 

7

12,34,77

34,56,562

 

 

 

8

12,34,562

 

 

 

 

9

12,56,77

34,77,562

 

 

 

10

12,56,562

 

 

 

 

11

12,77,562

 

 

 

 

12

12,34,56,77

34,56,77,562

 

 

 

13

12,34,56,562

 

 

 

 

14

12,34,77,562

 

 

 

 

15

12,56,77,562

 

 

 

 

16

12,34,56,77,562

 

 

 

 

这种方法操作的具体步骤如下:

(1)将每个数做为一元子集;

(2)将右面的数依次排到左面数的后面,形成二元子集,直到最后一个元素排到所有左面一元集合中,至此形成全部二元子集;

(3)如果子集的最后已是最右面的数,不再添加,以下各次添加亦如此;

(4)将二元子集依次添加上右面的元素,形成三元子集;

(5)将三元子集依次添加上右面的元素,形成四元子集;

(6)将四元子集添加上右面的元素,最后得到全集结束。

   这种方法我们称为添右组合。按照添右组合这种方法,对于n元的集合也可以依次得到一元到n元的全部子集。

二、添右组合定理

   添右组合法得到的子集有两个问题必须回答。

1. 这种方法得到的是全部子集吗?

2. 这些子集中有没有重复的子集?

添右组合定理n元集合用添右组合法得到全部非空子集为2n-1

   这个定理需要证明全部非空子集一个不少,且都不相同。

这里用归纳法来证明:

显然一个元素的集合没有多大意义,因而下面证明从2个元素的集合开始。

(1)n=2,那么A=a1,a2},则A的转移组合得到的子集为{a1}{a2}{a1,a2}子集数为22-1=3说明子集数正好且不重复。

(2)n=k时得到的子集{a1}{a2...a1,a2,...,ak}满足条件子集数为2k-1,且不重复。那么当n=k+1时,则除添加子集{ak+1}之外,需要将n=k时得到2k-1个子集全部添加ak+1,形成的全部子集为

a1}{a2...ak}{ak+1...a1,a2,...,ak}{a1,a2,...,ak,ak+1

子集总数应为2k-1+2k=2×2k-1=2k+1-1,说明子集总数正确。

(3)假设n=k+1时出现了重复子集,不妨设有子集Bi=Bjij,它们之中都包含ak+1。那么将ak+1从它们之中取出,则应有Biak+1=Bjak+1},这与n=k时得到的子集不重复子集矛盾。故没有重复子集产生。

证毕。

   理论上添右组合法可以快速求出任意有限数集的全部子集与其和,也就是构造出子集和函数的真值表表达方式。

三、设计的软件及使用

   我用FoxPro用添右组合法设计了Subset_sum软件。用这款软件可以求出任意有限数集的全部子集,顺带求出其元素和。由于计算机提供的资源不同,软件在不同的计算机上运行的数据范围会受到具体计算机的制约。

1. 验证数集S={1,2,7,14,49,98,343,686,2409,2793,16808,17206,117705,117993}子集有没有和为138457的子集。

    此题摘自《算法导论》,书中只给了一个答案。我们来看看有几个。

1所示,运行subset.exe,选择BuildSetCreateSet,然后输入S集合的数,这样就可以生成其全部非零子集。

 

 

1  Subset_sum建立集合

   得到非零子集之后,就建立了Subset_sum函数,其定义域与值域可以选择TruthTablec查看。总共有10383个子集,也就是214-1个。

   如果想猜测验证所给数为子集和的个数,可以选择GuessCheck项,然后输入猜测的数,回车。2 是输入138457后得到的4个子集,而书中只给出了一个。可见软件是比较全面地寻找了满足条件的子集。这一过程实际上是在值域中搜索,依据真值表列了出全部满足条件的子集,速度之快已是O(n)级多项式时间复杂度。

   讨论pnp的问题,不应将函数的建立时间包括在其中。P类问题借用函数y=x1+x2+...+xn得出了子集和,而这个解析式是早已建立好的通用函数,其定义域包含了Subset_sumh函数的定义域,故而可以借用。用这个表达式计算必须保证自变量属于Subset_sumh函数的定义域才可以。不要以为使用函数y=x1+x2+...+xn不是查表,实际上设计计算机运算器就是制作了一张真值表。在使用该公式求子集和时,难道不用看看子集的元素有哪些吗?

   由和值去查找所有的和为此数的集合,即是所谓的np问题。这里从214-1个数中查找子集和是138457完全是一个O(n)级多项式时间复杂度查找问题。变量是n而不是14。在子集和问题中,请记住2k-1k是一个常量!

 

 

2  输入138457得到4个子集

   软件使用中,如果只想验证某个数是不是这个集合的子集和,那么请选择YesNot项菜单,输入猜测的数,系统会立即给出“是”与“否”的回答。

此外,该软件还可以依据和值及元素数来查找满足条件的全部子集,这要选择菜单Conditions来获得。这样可以减少那些不必要的子集出现。

四、结论

   做为退休的人,已经没有了利益的过多纷争,能做的事情是凭借兴趣,锻炼一下自己的脑子,免于过早痴呆。

   结论是有的,那就是P类问题和NP类问题是同一类问题。P=NP

 

2014-12-9

 

 

附软件:

BuidSubset_Sum.rar

 

 

 

 



https://blog.sciencenet.cn/blog-340399-849597.html

上一篇:美国克雷数学研究所会不会颁奖?
下一篇:P与NP问题概念解剖
收藏 IP: 123.122.55.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

IP: 117.169.1.*   閸ョ偛顦� | 鐠э拷 鐠э拷 +1 [4]閸掓ê鎮忛弬锟�   2015-6-6 14:11
娑撳秷鍏橀悽銊ゆ崲閹板繋绔存稉顏嗗鐎规氨娈戞径姘躲€嶅蹇氥€冩潏鎯х础闁棄褰叉禒銉ㄣ€冪粈杞拌礋閻楃懓鐣鹃惃鍕瘹閺佹媽銆冩潏鎯х础閿涘苯寮芥稊瀣╃瘍閻掕绱濋弶銉嚛閺勫骸鐣犳禒顒佹Ц閸氬奔鐜惃鍕┾偓鍌欑癌缁夊秷銆冩潏鎯х础閻ㄥ嫬褰夐柌蹇旀Ц閻╃ǹ鎮撻惃鍕剁礄閺嶉攱婀伴弫甯礆閿涘矂妫舵0妯兼畱鐎圭偠宸濋弰顖氱暊娴狀兛绠i梻瀵告畱婢х偤鏆遍柅鐔峰閻ㄥ嫬妯婂鍌涙Ц闂堢偛鐖舵径褏娈戦敍灞肩瘍閺勵垳绮扮€规氨娴夐崥宀€娈戦弽閿嬫拱婢х偤鍣洪幍鈧€佃壈鍤ч惃鍕吀缁犳顤冮柌蹇撶摠閸︺劑娼敮绋裤亣閻ㄥ嫬妯婇崚顐犫偓锟�
IP: 117.169.1.*   閸ョ偛顦� | 鐠э拷 鐠э拷 +1 [3]閸掓ê鎮忛弬锟�   2015-6-6 13:27
婢舵岸銆嶅蹇旀闂傚瓨妲搁梾蹇旂壉閺堫剛娈戞晶鐐插娴狀檿閿涘澑^k)閻ㄥ嫭鏌熷蹇擃杻閸旂媴绱檏閹稿洦娓舵妯活偧閺佸府绱氶敍灞肩稑鏉╂┉閿涳拷2^nk)娑擃厾娈憂閺勵垱瀵氶弽閿嬫拱閺佸府绱�
閸ョ偛顦�  閿涳拷 娴g姷娈戦弽閿嬫拱閺勵垱瀵氭潏鎾冲弳閸氭绱甸弰顖氭儊閸栧懏瀚梻顕€顣介惃鍕槵閹板骏绱垫俊鍌涚亯娴g姷婀呮禍鍡涘亝缁″洤宕ラ弬鍥风礉闁絼绠瀗k閺冪姷鏋掗弰顖涘瘹缁嬪绨紒鎾寸€稉搴ょ翻閸忋儳娴夐崗宕囨畱瀵邦亞骞嗛張鈧妯虹湴濞嗏剝鏆熼妴锟�
2015-6-6 13:381 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 | 閸ョ偛顦�
IP: 117.169.1.*   閸ョ偛顦� | 鐠э拷 鐠э拷 +1 [2]閸掓ê鎮忛弬锟�   2015-6-6 13:10
鐠囩兘妫舵担鐘虫瀮娑撶搧閸滃閺勵垯绮堟稊鍫濆彠缁紮绱�
閸ョ偛顦�  閿涳拷 閸︺劍鍨滅拠铚傜稑鐠囪崵娈戦崡姘瀮娑擃叀顕╁妤€绶㈠〒鍛殶閵嗗倷绗夐崷銊ユ礀婢跺秳鑵戠拠缈犵啊閿涘矁顢戦崥妤嬬吹
2015-6-6 13:191 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 | 閸ョ偛顦�
IP: 117.169.1.*   閸ョ偛顦� | 鐠э拷 鐠э拷 +1 [1]閸掓ê鎮忛弬锟�   2015-6-6 11:56
婵粏鈧礁绗€娴g姵鎮堕柨娆庣啊閿涘矁顓哥粻妤€顕挒锛勬畱閺嶉攱婀伴弫鐗堟Ц閺佸瓨鏆熼崣妯哄閻ㄥ嫸绱濈拋绶撴稉鐑樼壉閺堫剚鏆熼敍瀛敍鍧竈k)閸欘垵銆冪粈鍝勵樋妞ょ懓绱¢弮鍫曟?閿涘閿涳拷2^x)閸欘垵銆冪粈鐑樺瘹閺佺増妞傞梻杈剧礉娴e棔缍橀弬鍥﹁厬O閿涳拷2^nk)閻ㄥ埖閺勵垶娈閻ㄥ嫬顤冩径褑鈧矁绻欑亸蹇庣艾1閿涘矁绻栨稉搴㈠瘹閺佹澘顤冮梹澶哥瑝娑撯偓閼锋番鈧拷
閸ョ偛顦�  閿涳拷 閹碘偓鐠嬫挸顦挎い鐟扮础閺冨爼妫跨拋銈呯暰k閺勵垰鐖堕弫甯礉娑撳秵妲搁崣姗€鍣洪敍灞肩瑝閻€劏鐨婢х偛銇囬妴鍌欑稑婵″倹鐏夐惌銉╀壕閻€劍鏆熼惍浣割洤娴f洝銆冪粈鐑樻殶閿涘矂鍋呮稊鍫濇躬閸椾浇绻橀崚鏈佃厬娑旂喎褰叉禒銉︽箒O(x^k)閿涙紒(10^nk)閸忔湹鑵憂閺勵垱鏆i弫鏉垮綁闁插骏绱濋崣顏囶洣閺佸瓨鏆焫>10閿涘鐏忚鲸妲告稉鈧稉顏勩亣娴滐拷0閻ㄥ嫭鏆i弫鑸偓鍌欑伐婵★拷256^5=(2*10^2+5*10^1+6*10^0)^5,鏉╂瑩鍣穔=5,n=2閵嗗倸顩ч弸娓�=65479閸涱澁绱甸幋鎴炲厒娴g姳绡冩导姘湴n閺勵垰顦跨亸鎴欌偓鍌涘瘻閻撗冦亣o閻ㄥ嫯銆冪粈杞扮瑝閼板啳妾绘担搴㈠瘹閺佷即銆嶉敍宀冾嚉婵″倷缍嶉敍锟�
2015-6-6 12:521 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 | 閸ョ偛顦�
閸ョ偛顦�  閿涳拷 鐠囪绔存稉锟�http://blog.sciencenet.cn/blog-340399-895336.html 婵″倷缍嶉敍锟�
2015-6-6 13:012 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 | 閸ョ偛顦�

1/1 | 閹槒顓�:4 | 妫f牠銆� | 娑撳﹣绔存い锟� | 娑撳绔存い锟� | 閺堫偊銆� | 鐠哄疇娴�

扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2025-3-13 21:25

Powered by ScienceNet.cn

Copyright © 2007-2025 中国科学报社

返回顶部