鍙傝冨嚭澶勶細http://blog.csdn.net/ctu_85/archive/2008/05/11/2432736.aspx
涓銆佷粈涔堟槸綆楁硶
綆楁硶鏄竴緋誨垪瑙e喅闂鐨勬竻鏅版寚浠わ紝涔熷氨鏄錛岃兘澶熷涓瀹氳鑼冪殑杈撳叆錛屽湪鏈夐檺鏃墮棿鍐呰幏寰楁墍瑕佹眰鐨勮緭鍑恒傜畻娉曞父甯稿惈鏈夐噸澶嶇殑姝ラ鍜屼竴浜涙瘮杈冩垨閫昏緫鍒ゆ柇銆傚鏋滀竴涓畻娉曟湁緙洪櫡錛屾垨涓嶉傚悎浜庢煇涓棶棰橈紝鎵ц榪欎釜綆楁硶灝嗕笉浼氳В鍐寵繖涓棶棰樸備笉鍚岀殑綆楁硶鍙兘鐢ㄤ笉鍚岀殑鏃墮棿銆佺┖闂存垨鏁堢巼鏉ュ畬鎴愬悓鏍風殑浠誨姟銆備竴涓畻娉曠殑浼樺姡鍙互鐢ㄧ┖闂村鏉傚害涓庢椂闂村鏉傚害鏉ヨ 閲忋?br />
綆楁硶鐨勬椂闂村鏉傚害鏄寚綆楁硶闇瑕佹秷鑰楃殑鏃墮棿璧勬簮銆備竴鑸潵璇達紝璁$畻鏈虹畻娉曟槸闂瑙勬ān 鐨勫嚱鏁癴(n)錛岀畻娉曟墽琛岀殑鏃墮棿鐨勫闀跨巼涓巉(n) 鐨勫闀跨巼姝g浉鍏籌紝縐頒綔娓愯繘鏃墮棿澶嶆潅搴︼紙Asymptotic Time Complexity錛夈傛椂闂村鏉傚害鐢?#8220;O錛堟暟閲忕駭錛?#8221;鏉ヨ〃紺猴紝縐頒負“闃?#8221;銆傚父瑙佺殑鏃墮棿澶嶆潅搴︽湁錛?O錛?錛夊父鏁伴樁錛汷錛坙og2n錛夊鏁伴樁錛汷錛坣錛夌嚎鎬ч樁錛汷錛坣2錛夊鉤鏂歸樁銆?br />
綆楁硶鐨勭┖闂村鏉傚害鏄寚綆楁硶闇瑕佹秷鑰楃殑絀洪棿璧勬簮銆傚叾璁$畻鍜岃〃紺烘柟娉曚笌鏃墮棿澶嶆潅搴︾被浼鹼紝涓鑸兘鐢ㄥ鏉傚害鐨勬笎榪戞ф潵琛ㄧず銆傚悓鏃墮棿澶嶆潅搴︾浉姣旓紝絀洪棿澶嶆潅搴︾殑鍒嗘瀽瑕佺畝鍗曞緱澶氥?br />
浜屻佺畻娉曡璁$殑鏂規硶
1.閫掓帹娉?br />
閫掓帹娉曟槸鍒╃敤闂鏈韓鎵鍏鋒湁鐨勪竴縐嶉掓帹鍏崇郴姹傞棶棰樿В鐨勪竴縐嶆柟娉曘傝瑕佹眰闂瑙勬ā涓篘鐨勮В錛屽綋N=1鏃訛紝瑙f垨涓哄凡鐭ワ紝鎴栬兘闈炲父鏂逛究鍦板緱鍒拌В銆傝兘閲囩敤閫掓帹娉曟瀯閫犵畻娉曠殑闂鏈夐噸瑕佺殑閫掓帹鎬ц川錛屽嵆褰撳緱鍒伴棶棰樿妯′負i-1鐨勮В鍚庯紝鐢遍棶棰樼殑閫掓帹鎬ц川錛岃兘浠庡凡姹傚緱鐨勮妯′負1錛?錛?#8230;錛宨-1鐨勪竴緋誨垪瑙o紝鏋勯犲嚭闂瑙勬ā涓篒鐨勮В銆傝繖鏍鳳紝紼嬪簭鍙粠i=0鎴杋=1鍑哄彂錛岄噸澶嶅湴錛岀敱宸茬煡鑷砳-1瑙勬ā鐨勮В錛岄氳繃閫掓帹錛岃幏寰楄妯′負i鐨勮В錛岀洿鑷沖緱鍒拌妯′負N鐨勮В銆?
銆愰棶棰樸?闃朵箻璁$畻
闂鎻忚堪錛氱紪鍐欑▼搴忥紝瀵圭粰瀹氱殑n錛坣鈮?00錛夛紝璁$畻騫惰緭鍑簁鐨勯樁涔榢錛侊紙k=1錛?錛?#8230;錛宯錛夌殑鍏ㄩ儴鏈夋晥鏁板瓧銆?
鐢變簬瑕佹眰鐨勬暣鏁板彲鑳藉ぇ澶ц秴鍑轟竴鑸暣鏁扮殑浣嶆暟錛岀▼搴忕敤涓緇存暟緇勫瓨鍌ㄩ暱鏁存暟錛屽瓨鍌ㄩ暱鏁存暟鏁扮粍鐨勬瘡涓厓绱犲彧瀛樺偍闀挎暣鏁扮殑涓浣嶆暟瀛椼傚鏈塵浣嶆垚鏁存暟N鐢ㄦ暟緇刟[ ]瀛樺偍錛?
N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100
騫剁敤a[0]瀛樺偍闀挎暣鏁癗鐨勪綅鏁癿錛屽嵆a[0]=m銆傛寜涓婅堪綰﹀畾錛屾暟緇勭殑姣忎釜鍏冪礌瀛樺偍k鐨勯樁涔榢錛佺殑涓浣嶆暟瀛楋紝騫朵粠浣庝綅鍒伴珮浣嶄緷嬈″瓨浜庢暟緇勭殑絎簩涓厓绱犮佺涓変釜鍏冪礌……銆備緥濡傦紝5錛?120錛屽湪鏁扮粍涓殑瀛樺偍褰㈠紡涓猴細
3 0 2 1 ……
棣栧厓绱?琛ㄧず闀挎暣鏁版槸涓涓?浣嶆暟錛屾帴鐫鏄綆浣嶅埌楂樹綅渚濇鏄?銆?銆?錛岃〃紺烘垚鏁存暟120銆?
璁$畻闃朵箻k錛佸彲閲囩敤瀵瑰凡姹傚緱鐨勯樁涔?k-1)錛佽繛緇瘡鍔爇-1嬈″悗姹傚緱銆備緥濡傦紝宸茬煡4錛?24錛岃綆?錛侊紝鍙鍘熸潵鐨?4绱姞4嬈?4鍚庡緱鍒?20銆傜粏鑺傝浠ヤ笅紼嬪簭銆?
# include <stdio.h>
# include <malloc.h>
......
2.閫掑綊
閫掑綊鏄璁″拰鎻忚堪綆楁硶鐨勪竴縐嶆湁鍔涚殑宸ュ叿錛岀敱浜庡畠鍦ㄥ鏉傜畻娉曠殑鎻忚堪涓緇忓父閲囩敤錛屼負姝ゅ湪榪涗竴姝ヤ粙緇嶅叾浠栫畻娉曡璁℃柟娉曚箣鍓嶅厛璁ㄨ瀹冦?
鑳介噰鐢ㄩ掑綊鎻忚堪鐨勭畻娉曢氬父鏈夎繖鏍風殑鐗瑰緛錛氫負姹傝В瑙勬ā涓篘鐨勯棶棰橈紝璁炬硶灝嗗畠鍒嗚В鎴愯妯¤緝灝忕殑闂錛岀劧鍚庝粠榪欎簺灝忛棶棰樼殑瑙f柟渚垮湴鏋勯犲嚭澶ч棶棰樼殑瑙o紝騫朵笖榪欎簺瑙勬ā杈冨皬鐨勯棶棰樹篃鑳介噰鐢ㄥ悓鏍風殑鍒嗚В鍜岀患鍚堟柟娉曪紝鍒嗚В鎴愯妯℃洿灝忕殑闂錛屽茍浠庤繖浜涙洿灝忛棶棰樼殑瑙f瀯閫犲嚭瑙勬ā杈冨ぇ闂鐨勮В銆傜壒鍒湴錛屽綋瑙勬āN=1鏃訛紝鑳界洿鎺ュ緱瑙c?
銆愰棶棰樸?緙栧啓璁$畻鏂愭嘗閭e錛團ibonacci錛夋暟鍒楃殑絎琻欏瑰嚱鏁癴ib錛坣錛夈?
鏂愭嘗閭e鏁板垪涓猴細0銆?銆?銆?銆?銆?#8230;…錛屽嵆錛?
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2) 錛堝綋n>1鏃訛級銆?
鍐欐垚閫掑綊鍑芥暟鏈夛細
int fib(int n)
{ if (n==0) return 0;
if (n==1) return 1;
if (n>1) return fib(n-1)+fib(n-2);
}
閫掑綊綆楁硶鐨勬墽琛岃繃紼嬪垎閫掓帹鍜屽洖褰掍袱涓樁孌點傚湪閫掓帹闃舵錛屾妸杈冨鏉傜殑闂錛堣妯′負n錛夌殑姹傝В鎺ㄥ埌姣斿師闂綆鍗曚竴浜涚殑闂錛堣妯″皬浜巒錛夌殑姹傝В銆備緥濡備笂渚嬩腑錛屾眰瑙ib(n)錛屾妸瀹冩帹鍒版眰瑙ib(n-1)鍜宖ib(n-2)銆備篃灝辨槸璇達紝涓鴻綆梖ib(n)錛屽繀欏誨厛璁$畻fib(n-1)鍜宖ib(n-2)錛岃岃綆梖ib(n-1)鍜宖ib(n-2)錛屽張蹇呴』鍏堣綆梖ib(n-3)鍜宖ib(n-4)銆備緷嬈$被鎺紝鐩磋嚦璁$畻fib(1)鍜宖ib(0)錛屽垎鍒兘绔嬪嵆寰楀埌緇撴灉1鍜?銆傚湪閫掓帹闃舵錛屽繀欏昏鏈夌粓姝㈤掑綊鐨勬儏鍐點備緥濡傚湪鍑芥暟fib涓紝褰搉涓?鍜?鐨勬儏鍐點?
鍦ㄥ洖褰掗樁孌碉紝褰撹幏寰楁渶綆鍗曟儏鍐電殑瑙e悗錛岄愮駭榪斿洖錛屼緷嬈″緱鍒扮◢澶嶆潅闂鐨勮В錛屼緥濡傚緱鍒癴ib(1)鍜宖ib(0)鍚庯紝榪斿洖寰楀埌fib(2)鐨勭粨鏋滐紝……錛屽湪寰楀埌浜唂ib(n-1)鍜宖ib(n-2)鐨勭粨鏋滃悗錛岃繑鍥炲緱鍒癴ib(n)鐨勭粨鏋溿?
鍦ㄧ紪鍐欓掑綊鍑芥暟鏃惰娉ㄦ剰錛屽嚱鏁頒腑鐨勫眬閮ㄥ彉閲忓拰鍙傛暟鐭ヨ瘑灞闄愪簬褰撳墠璋冪敤灞傦紝褰撻掓帹榪涘叆“綆鍗曢棶棰?#8221;灞傛椂錛屽師鏉ュ眰嬈′笂鐨勫弬鏁板拰灞閮ㄥ彉閲忎究琚殣钄借搗鏉ャ傚湪涓緋誨垪“綆鍗曢棶棰?#8221;灞傦紝瀹冧滑鍚勬湁鑷繁鐨勫弬鏁板拰灞閮ㄥ彉閲忋?
鐢變簬閫掑綊寮曡搗涓緋誨垪鐨勫嚱鏁拌皟鐢紝騫朵笖鍙兘浼氭湁涓緋誨垪鐨勯噸澶嶈綆楋紝閫掑綊綆楁硶鐨勬墽琛屾晥鐜囩浉瀵硅緝浣庛傚綋鏌愪釜閫掑綊綆楁硶鑳借緝鏂逛究鍦拌漿鎹㈡垚閫掓帹綆楁硶鏃訛紝閫氬父鎸夐掓帹綆楁硶緙栧啓紼嬪簭銆備緥濡備笂渚嬭綆楁枑娉㈤偅濂戞暟鍒楃殑絎琻欏圭殑鍑芥暟fib(n)搴旈噰鐢ㄩ掓帹綆楁硶錛屽嵆浠庢枑娉㈤偅濂戞暟鍒楃殑鍓嶄袱欏瑰嚭鍙戯紝閫愭鐢卞墠涓ら」璁$畻鍑轟笅涓欏癸紝鐩磋嚦璁$畻鍑鴻姹傜殑絎琻欏廣?
銆愰棶棰樸?緇勫悎闂
闂鎻忚堪錛氭壘鍑轟粠鑷劧鏁?銆?銆?#8230;…銆乶涓換鍙杛涓暟鐨勬墍鏈夌粍鍚堛備緥濡俷=5錛宺=3鐨勬墍鏈夌粍鍚堜負錛?錛?錛?銆?銆? 錛?錛?銆?銆? 錛?錛?銆?銆?
錛?錛?銆?銆? 錛?錛?銆?銆? 錛?錛?銆?銆?
錛?錛?銆?銆? 錛?錛?銆?銆? 錛?錛?銆?銆?
錛?0錛?銆?銆?
鍒嗘瀽鎵鍒楃殑10涓粍鍚堬紝鍙互閲囩敤榪欐牱鐨勯掑綊鎬濇兂鏉ヨ冭檻姹傜粍鍚堝嚱鏁扮殑綆楁硶銆傝鍑芥暟涓簐oid comb(int m,int k)涓烘壘鍑轟粠鑷劧鏁?銆?銆?#8230;…銆乵涓換鍙杒涓暟鐨勬墍鏈夌粍鍚堛傚綋緇勫悎鐨勭涓涓暟瀛楅夊畾鏃訛紝鍏跺悗鐨勬暟瀛楁槸浠庝綑涓嬬殑m-1涓暟涓彇k-1鏁扮殑緇勫悎銆傝繖灝卞皢姹俶涓暟涓彇k涓暟鐨勭粍鍚堥棶棰樿漿鍖栨垚姹俶-1涓暟涓彇k-1涓暟鐨勭粍鍚堥棶棰樸傝鍑芥暟寮曞叆宸ヤ綔鏁扮粍a[ ]瀛樻斁姹傚嚭鐨勭粍鍚堢殑鏁板瓧錛岀害瀹氬嚱鏁板皢紜畾鐨刱涓暟瀛楃粍鍚堢殑絎竴涓暟瀛楁斁鍦╝[k]涓紝褰撲竴涓粍鍚堟眰鍑哄悗錛屾墠灝哸[ ]涓殑涓涓粍鍚堣緭鍑恒傜涓涓暟鍙互鏄痬銆乵-1銆?#8230;…銆乲錛屽嚱鏁板皢紜畾緇勫悎鐨勭涓涓暟瀛楁斁鍏ユ暟緇勫悗錛屾湁涓ょ鍙兘鐨勯夋嫨錛屽洜榪樻湭鍘婚《緇勫悎鐨勫叾浣欏厓绱狅紝緇х畫閫掑綊鍘葷‘瀹氾紱鎴栧洜宸茬‘瀹氫簡緇勫悎鐨勫叏閮ㄥ厓绱狅紝杈撳嚭榪欎釜緇勫悎銆傜粏鑺傝浠ヤ笅紼嬪簭涓殑鍑芥暟comb銆?
銆愮▼搴忋?
# include <stdio.h>
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{ for (j=a[0];j>0;j--)
printf(“%4d”,a[j]);
printf(“\n”);
}
}
}
void main()
{ a[0]=3;
comb(5,3);
}
3.鍥炴函娉?br />
鍥炴函娉曚篃縐頒負璇曟帰娉曪紝璇ユ柟娉曢鍏堟殏鏃舵斁寮冨叧浜庨棶棰樿妯″ぇ灝忕殑闄愬埗錛屽茍灝嗛棶棰樼殑鍊欓夎В鎸夋煇縐嶉『搴忛愪竴鏋氫婦鍜屾楠屻傚綋鍙戠幇褰撳墠鍊欓夎В涓嶅彲鑳芥槸瑙f椂錛屽氨閫夋嫨涓嬩竴涓欓夎В錛涘樿嫢褰撳墠鍊欓夎В闄や簡榪樹笉婊¤凍闂瑙勬ā瑕佹眰澶栵紝婊¤凍鎵鏈夊叾浠栬姹傛椂錛岀戶緇墿澶у綋鍓嶅欓夎В鐨勮妯★紝騫剁戶緇瘯鎺€傚鏋滃綋鍓嶅欓夎В婊¤凍鍖呮嫭闂瑙勬ā鍦ㄥ唴鐨勬墍鏈夎姹傛椂錛岃鍊欓夎В灝辨槸闂鐨勪竴涓В銆傚湪鍥炴函娉曚腑錛屾斁寮冨綋鍓嶅欓夎В錛屽鎵句笅涓涓欓夎В鐨勮繃紼嬬О涓哄洖婧傛墿澶у綋鍓嶅欓夎В鐨勮妯★紝浠ョ戶緇瘯鎺㈢殑榪囩▼縐頒負鍚戝墠璇曟帰銆?
銆愰棶棰樸?緇勫悎闂
闂鎻忚堪錛氭壘鍑轟粠鑷劧鏁?錛?錛?#8230;錛宯涓換鍙杛涓暟鐨勬墍鏈夌粍鍚堛?
閲囩敤鍥炴函娉曟壘闂鐨勮В錛屽皢鎵懼埌鐨勭粍鍚堜互浠庡皬鍒板ぇ欏哄簭瀛樹簬a[0]錛宎[1]錛?#8230;錛宎[r-1]涓紝緇勫悎鐨勫厓绱犳弧瓚充互涓嬫ц川錛?
錛?錛?a[i+1]>a錛屽悗涓涓暟瀛楁瘮鍓嶄竴涓ぇ錛?
錛?錛?a-i<=n-r+1銆?
鎸夊洖婧硶鐨勬濇兂錛屾壘瑙h繃紼嬪彲浠ュ彊榪板涓嬶細
棣栧厛鏀懼純緇勫悎鏁頒釜鏁頒負r鐨勬潯浠訛紝鍊欓夌粍鍚堜粠鍙湁涓涓暟瀛?寮濮嬨傚洜璇ュ欓夎В婊¤凍闄ら棶棰樿妯′箣澶栫殑鍏ㄩ儴鏉′歡錛屾墿澶у叾瑙勬ā錛屽茍浣垮叾婊¤凍涓婅堪鏉′歡錛?錛夛紝鍊欓夌粍鍚堟敼涓?錛?銆傜戶緇繖涓榪囩▼錛屽緱鍒板欓夌粍鍚?錛?錛?銆傝鍊欓夎В婊¤凍鍖呮嫭闂瑙勬ā鍦ㄥ唴鐨勫叏閮ㄦ潯浠訛紝鍥犺屾槸涓涓В銆傚湪璇ヨВ鐨勫熀紜涓婏紝閫変笅涓涓欓夎В錛屽洜a[2]涓婄殑3璋冩暣涓?錛屼互鍙婁互鍚庤皟鏁翠負5閮芥弧瓚抽棶棰樼殑鍏ㄩ儴瑕佹眰錛屽緱鍒拌В1錛?錛?鍜?錛?錛?銆傜敱浜庡5涓嶈兘鍐嶄綔璋冩暣錛屽氨瑕佷粠a[2]鍥炴函鍒癮[1]錛岃繖鏃訛紝a[1]=2錛屽彲浠ヨ皟鏁翠負3錛屽茍鍚戝墠璇曟帰錛屽緱鍒拌В1錛?錛?銆傞噸澶嶄笂榪板悜鍓嶈瘯鎺㈠拰鍚戝悗鍥炴函錛岀洿鑷寵浠巃[0]鍐嶅洖婧椂錛岃鏄庡凡緇忔壘瀹岄棶棰樼殑鍏ㄩ儴瑙c傛寜涓婅堪鎬濇兂鍐欐垚紼嬪簭濡備笅錛?
銆愮▼搴忋?
# define MAXN 100
int a[MAXN];
void comb(int m,int r)
{ int i,j;
i=0;
a=1;
do {
if (a-i<=m-r+1
{ if (i==r-1)
{ for (j=0;j<r;j++)
printf(“%4d”,a[j]);
printf(“\n”);
}
a++;
continue;
}
else
{ if (i==0)
return;
a[--i]++;
}
} while (1)
}
main()
{ comb(5,3);
}
4.璐┆娉?br />
璐┆娉曟槸涓縐嶄笉榪芥眰鏈浼樿В錛屽彧甯屾湜寰楀埌杈冧負婊℃剰瑙g殑鏂規硶銆傝椽濠硶涓鑸彲浠ュ揩閫熷緱鍒版弧鎰忕殑瑙o紝鍥犱負瀹冪渷鍘諱簡涓烘壘鏈浼樿В瑕佺┓灝芥墍鏈夊彲鑳借屽繀欏昏楄垂鐨勫ぇ閲忔椂闂淬傝椽濠硶甯鎬互褰撳墠鎯呭喌涓哄熀紜浣滄渶浼橀夋嫨錛岃屼笉鑰冭檻鍚勭鍙兘鐨勬暣浣撴儏鍐碉紝鎵浠ヨ椽濠硶涓嶈鍥炴函銆?
渚嬪騫蟲椂璐墿鎵鵑挶鏃訛紝涓轟嬌鎵懼洖鐨勯浂閽辯殑紜竵鏁版渶灝戯紝涓嶈冭檻鎵鵑浂閽辯殑鎵鏈夊悇縐嶅彂琛ㄦ柟妗堬紝鑰屾槸浠庢渶澶ч潰鍊肩殑甯佺寮濮嬶紝鎸夐掑噺鐨勯『搴忚冭檻鍚勫竵縐嶏紝鍏堝敖閲忕敤澶ч潰鍊肩殑甯佺錛屽綋涓嶈凍澶ч潰鍊煎竵縐嶇殑閲戦鏃舵墠鍘昏冭檻涓嬩竴縐嶈緝灝忛潰鍊肩殑甯佺銆傝繖灝辨槸鍦ㄤ嬌鐢ㄨ椽濠硶銆傝繖縐嶆柟娉曞湪榪欓噷鎬繪槸鏈浼橈紝鏄洜涓洪摱琛屽鍏跺彂琛岀殑紜竵縐嶇被鍜岀‖甯侀潰鍊肩殑宸у瀹夋帓銆傚鍙湁闈㈠煎垎鍒負1銆?鍜?1鍗曚綅鐨勭‖甯侊紝鑰屽笇鏈涙壘鍥炴婚涓?5鍗曚綅鐨勭‖甯併傛寜璐┆綆楁硶錛屽簲鎵?涓?1鍗曚綅闈㈠肩殑紜竵鍜?涓?鍗曚綅闈㈠肩殑紜竵錛屽叡鎵懼洖5涓‖甯併備絾鏈浼樼殑瑙e簲鏄?涓?鍗曚綅闈㈠肩殑紜竵銆?
銆愰棶棰樸?瑁呯闂
闂鎻忚堪錛氳綆遍棶棰樺彲綆榪板涓嬶細璁炬湁緙栧彿涓?銆?銆?#8230;銆乶-1鐨刵縐嶇墿鍝侊紝浣撶Н鍒嗗埆涓簐0銆乿1銆?#8230;銆乿n-1銆傚皢榪檔縐嶇墿鍝佽鍒板閲忛兘涓篤鐨勮嫢騫茬瀛愰噷銆傜害瀹氳繖n縐嶇墿鍝佺殑浣撶Н鍧囦笉瓚呰繃V錛屽嵆瀵逛簬0≤i錛渘錛屾湁0錛渧i≤V銆備笉鍚岀殑瑁呯鏂規鎵闇瑕佺殑綆卞瓙鏁扮洰鍙兘涓嶅悓銆傝綆遍棶棰樿姹備嬌瑁呭敖榪檔縐嶇墿鍝佺殑綆卞瓙鏁拌灝戙?
鑻ヨ冨療灝唍縐嶇墿鍝佺殑闆嗗悎鍒嗗垝鎴恘涓垨灝忎簬n涓墿鍝佺殑鎵鏈夊瓙闆嗭紝鏈浼樿В灝卞彲浠ユ壘鍒般備絾鎵鏈夊彲鑳藉垝鍒嗙殑鎬繪暟澶ぇ銆傚閫傚綋澶х殑n錛屾壘鍑烘墍鏈夊彲鑳界殑鍒掑垎瑕佽姳璐圭殑鏃墮棿鏄棤娉曟壙鍙楃殑銆備負姝わ紝瀵硅綆遍棶棰橀噰鐢ㄩ潪甯哥畝鍗曠殑榪戜技綆楁硶錛屽嵆璐┆娉曘傝綆楁硶渚濇灝嗙墿鍝佹斁鍒板畠絎竴涓兘鏀捐繘鍘葷殑綆卞瓙涓紝璇ョ畻娉曡櫧涓嶈兘淇濊瘉鎵懼埌鏈浼樿В錛屼絾榪樻槸鑳芥壘鍒伴潪甯稿ソ鐨勮В銆備笉澶變竴鑸э紝璁緉浠剁墿鍝佺殑浣撶Н鏄寜浠庡ぇ鍒板皬鎺掑ソ搴忕殑錛屽嵆鏈塿0≥v1≥…≥vn-1銆傚涓嶆弧瓚充笂榪拌姹傦紝鍙鍏堝榪檔浠剁墿鍝佹寜瀹冧滑鐨勪綋縐粠澶у埌灝忔帓搴忥紝鐒跺悗鎸夋帓搴忕粨鏋滃鐗╁搧閲嶆柊緙栧彿鍗沖彲銆傝綆辯畻娉曠畝鍗曟弿榪板涓嬶細
{ 杈撳叆綆卞瓙鐨勫縐紱
杈撳叆鐗╁搧縐嶆暟n錛?
鎸変綋縐粠澶у埌灝忛『搴忥紝杈撳叆鍚勭墿鍝佺殑浣撶Н錛?
棰勭疆宸茬敤綆卞瓙閾句負絀猴紱
棰勭疆宸茬敤綆卞瓙璁℃暟鍣╞ox_count涓?錛?
for (i=0;i<n;i++)
{ 浠庡凡鐢ㄧ殑絎竴鍙瀛愬紑濮嬮『搴忓鎵捐兘鏀懼叆鐗╁搧i 鐨勭瀛恓錛?
if 錛堝凡鐢ㄧ瀛愰兘涓嶈兘鍐嶆斁鐗╁搧i錛?
{ 鍙︾敤涓涓瀛愶紝騫跺皢鐗╁搧i鏀懼叆璇ョ瀛愶紱
box_count++錛?
}
else
灝嗙墿鍝乮鏀懼叆綆卞瓙j錛?
}
}
涓婅堪綆楁硶鑳芥眰鍑洪渶瑕佺殑綆卞瓙鏁癰ox_count錛屽茍鑳芥眰鍑哄悇綆卞瓙鎵瑁呯墿鍝併備笅闈㈢殑渚嬪瓙璇存槑璇ョ畻娉曚笉涓瀹氳兘鎵懼埌鏈浼樿В錛岃鏈?縐嶇墿鍝侊紝瀹冧滑鐨勪綋縐垎鍒負錛?0銆?5銆?5銆?0銆?0鍜?0鍗曚綅浣撶Н錛岀瀛愮殑瀹圭Н涓?00涓崟浣嶄綋縐傛寜涓婅堪綆楁硶璁$畻錛岄渶涓夊彧綆卞瓙錛屽悇綆卞瓙鎵瑁呯墿鍝佸垎鍒負錛氱涓鍙瀛愯鐗╁搧1銆?錛涚浜屽彧綆卞瓙瑁呯墿鍝?銆?銆?錛涚涓夊彧綆卞瓙瑁呯墿鍝?銆傝屾渶浼樿В涓轟袱鍙瀛愶紝鍒嗗埆瑁呯墿鍝?銆?銆?鍜?銆?銆?銆?
鑻ユ瘡鍙瀛愭墍瑁呯墿鍝佺敤閾捐〃鏉ヨ〃紺猴紝閾捐〃棣栫粨鐐規寚閽堝瓨浜庝竴涓粨鏋勪腑錛岀粨鏋勮褰曞皻鍓╀綑鐨勭┖闂撮噺鍜岃綆卞瓙鎵瑁呯墿鍝侀摼琛ㄧ殑棣栨寚閽堛傚彟灝嗗叏閮ㄧ瀛愮殑淇℃伅涔熸瀯鎴愰摼琛ㄣ備互涓嬫槸鎸変互涓婄畻娉曠紪鍐欑殑紼嬪簭銆?
}
5.鍒嗘不娉?br />
浠諱綍涓涓彲浠ョ敤璁$畻鏈烘眰瑙g殑闂鎵闇鐨勮綆楁椂闂撮兘涓庡叾瑙勬āN鏈夊叧銆傞棶棰樼殑瑙勬ā瓚婂皬錛岃秺瀹規槗鐩存帴姹傝В錛岃В棰樻墍闇鐨勮綆楁椂闂翠篃瓚婂皯銆備緥濡傦紝瀵逛簬n涓厓绱犵殑鎺掑簭闂錛屽綋n=1鏃訛紝涓嶉渶浠諱綍璁$畻錛沶=2鏃訛紝鍙浣滀竴嬈℃瘮杈冨嵆鍙帓濂藉簭錛沶=3鏃跺彧瑕佷綔3嬈℃瘮杈冨嵆鍙紝…銆傝屽綋n杈冨ぇ鏃訛紝闂灝變笉閭d箞瀹規槗澶勭悊浜嗐傝鎯崇洿鎺ヨВ鍐充竴涓妯¤緝澶х殑闂錛屾湁鏃舵槸鐩稿綋鍥伴毦鐨勩?
鍒嗘不娉曠殑璁捐鎬濇兂鏄紝灝嗕竴涓毦浠ョ洿鎺ヨВ鍐崇殑澶ч棶棰橈紝鍒嗗壊鎴愪竴浜涜妯¤緝灝忕殑鐩稿悓闂錛屼互渚垮悇涓嚮鐮達紝鍒嗚屾不涔嬨?
濡傛灉鍘熼棶棰樺彲鍒嗗壊鎴恔涓瓙闂錛?<k≤n錛夛紝涓旇繖浜涘瓙闂閮藉彲瑙o紝騫跺彲鍒╃敤榪欎簺瀛愰棶棰樼殑瑙f眰鍑哄師闂鐨勮В錛岄偅涔堣繖縐嶅垎娌繪硶灝辨槸鍙鐨勩傜敱鍒嗘不娉曚駭鐢熺殑瀛愰棶棰樺線寰鏄師闂鐨勮緝灝忔ā寮忥紝榪欏氨涓轟嬌鐢ㄩ掑綊鎶鏈彁渚涗簡鏂逛究銆傚湪榪欑鎯呭喌涓嬶紝鍙嶅搴旂敤鍒嗘不鎵嬫錛屽彲浠ヤ嬌瀛愰棶棰樹笌鍘熼棶棰樼被鍨嬩竴鑷磋屽叾瑙勬ā鍗翠笉鏂緝灝忥紝鏈緇堜嬌瀛愰棶棰樼緝灝忓埌寰堝鏄撶洿鎺ユ眰鍑哄叾瑙c傝繖鑷劧瀵艱嚧閫掑綊榪囩▼鐨勪駭鐢熴傚垎娌諱笌閫掑綊鍍忎竴瀵瑰鐢熷厔寮燂紝緇忓父鍚屾椂搴旂敤鍦ㄧ畻娉曡璁′箣涓紝騫剁敱姝や駭鐢熻澶氶珮鏁堢畻娉曘?
鍒嗘不娉曟墍鑳借В鍐崇殑闂涓鑸叿鏈変互涓嬪嚑涓壒寰侊細
錛?錛夎闂鐨勮妯$緝灝忓埌涓瀹氱殑紼嬪害灝卞彲浠ュ鏄撳湴瑙e喅錛?
錛?錛夎闂鍙互鍒嗚В涓鴻嫢騫蹭釜瑙勬ā杈冨皬鐨勭浉鍚岄棶棰橈紝鍗寵闂鍏鋒湁鏈浼樺瓙緇撴瀯鎬ц川錛?
錛?錛夊埄鐢ㄨ闂鍒嗚В鍑虹殑瀛愰棶棰樼殑瑙e彲浠ュ悎騫朵負璇ラ棶棰樼殑瑙o紱
錛?錛夎闂鎵鍒嗚В鍑虹殑鍚勪釜瀛愰棶棰樻槸鐩鎬簰鐙珛鐨勶紝鍗沖瓙闂涔嬮棿涓嶅寘鍚叕鍏辯殑瀛愬瓙闂銆?
涓婅堪鐨勭涓鏉$壒寰佹槸緇濆ぇ澶氭暟闂閮藉彲浠ユ弧瓚崇殑錛屽洜涓洪棶棰樼殑璁$畻澶嶆潅鎬т竴鑸槸闅忕潃闂瑙勬ā鐨勫鍔犺屽鍔狅紱絎簩鏉$壒寰佹槸搴旂敤鍒嗘不娉曠殑鍓嶆彁錛屽畠涔熸槸澶у鏁伴棶棰樺彲浠ユ弧瓚崇殑錛屾鐗瑰緛鍙嶆槧浜嗛掑綊鎬濇兂鐨勫簲鐢紱絎笁鏉$壒寰佹槸鍏抽敭錛岃兘鍚﹀埄鐢ㄥ垎娌繪硶瀹屽叏鍙栧喅浜庨棶棰樻槸鍚﹀叿鏈夌涓夋潯鐗瑰緛錛屽鏋滃叿澶囦簡絎竴鏉″拰絎簩鏉$壒寰侊紝鑰屼笉鍏峰絎笁鏉$壒寰侊紝鍒欏彲浠ヨ冭檻璐績娉曟垨鍔ㄦ佽鍒掓硶銆傜鍥涙潯鐗瑰緛娑夊強鍒板垎娌繪硶鐨勬晥鐜囷紝濡傛灉鍚勫瓙闂鏄笉鐙珛鐨勶紝鍒欏垎娌繪硶瑕佸仛璁稿涓嶅繀瑕佺殑宸ヤ綔錛岄噸澶嶅湴瑙e叕鍏辯殑瀛愰棶棰橈紝姝ゆ椂铏界劧鍙敤鍒嗘不娉曪紝浣嗕竴鑸敤鍔ㄦ佽鍒掓硶杈冨ソ銆?
鍒嗘不娉曞湪姣忎竴灞傞掑綊涓婇兘鏈変笁涓楠わ細
錛?錛夊垎瑙o細灝嗗師闂鍒嗚В涓鴻嫢騫蹭釜瑙勬ā杈冨皬錛岀浉浜掔嫭绔嬶紝涓庡師闂褰㈠紡鐩稿悓鐨勫瓙闂錛?
錛?錛夎В鍐籌細鑻ュ瓙闂瑙勬ā杈冨皬鑰屽鏄撹瑙e喅鍒欑洿鎺ヨВ錛屽惁鍒欓掑綊鍦拌В鍚勪釜瀛愰棶棰橈紱
錛?錛夊悎騫訛細灝嗗悇涓瓙闂鐨勮В鍚堝茍涓哄師闂鐨勮В銆?
6.鍔ㄦ佽鍒掓硶
緇忓父浼氶亣鍒板鏉傞棶棰樹笉鑳界畝鍗曞湴鍒嗚В鎴愬嚑涓瓙闂錛岃屼細鍒嗚В鍑轟竴緋誨垪鐨勫瓙闂銆傜畝鍗曞湴閲囩敤鎶婂ぇ闂鍒嗚В鎴愬瓙闂錛屽茍緇煎悎瀛愰棶棰樼殑瑙e鍑哄ぇ闂鐨勮В鐨勬柟娉曪紝闂姹傝В鑰楁椂浼氭寜闂瑙勬ā鍛堝箓綰ф暟澧炲姞銆?
涓轟簡鑺傜害閲嶅姹傜浉鍚屽瓙闂鐨勬椂闂達紝寮曞叆涓涓暟緇勶紝涓嶇瀹冧滑鏄惁瀵規渶緇堣В鏈夌敤錛屾妸鎵鏈夊瓙闂鐨勮В瀛樹簬璇ユ暟緇勪腑錛岃繖灝辨槸鍔ㄦ佽鍒掓硶鎵閲囩敤鐨勫熀鏈柟娉曘備互涓嬪厛鐢ㄥ疄渚嬭鏄庡姩鎬佽鍒掓柟娉曠殑浣跨敤銆?
銆愰棶棰樸?姹備袱瀛楃搴忓垪鐨勬渶闀垮叕鍏卞瓧絎﹀瓙搴忓垪
闂鎻忚堪錛氬瓧絎﹀簭鍒楃殑瀛愬簭鍒楁槸鎸囦粠緇欏畾瀛楃搴忓垪涓殢鎰忓湴錛堜笉涓瀹氳繛緇級鍘繪帀鑻ュ共涓瓧絎︼紙鍙兘涓涓篃涓嶅幓鎺夛級鍚庢墍褰㈡垚鐨勫瓧絎﹀簭鍒椼備護緇欏畾鐨勫瓧絎﹀簭鍒梄=“x0錛寈1錛?#8230;錛寈m-1”錛屽簭鍒梇=“y0錛寉1錛?#8230;錛寉k-1”鏄疿鐨勫瓙搴忓垪錛屽瓨鍦╔鐨勪竴涓弗鏍奸掑涓嬫爣搴忓垪<i0錛宨1錛?#8230;錛宨k-1>錛屼嬌寰楀鎵鏈夌殑j=0錛?錛?#8230;錛宬-1錛屾湁xij=yj銆備緥濡傦紝X=“ABCBDAB”錛孻=“BCDB”鏄疿鐨勪竴涓瓙搴忓垪銆?
鑰冭檻鏈闀垮叕鍏卞瓙搴忓垪闂濡備綍鍒嗚В鎴愬瓙闂錛岃A=“a0錛宎1錛?#8230;錛宎m-1”錛孊=“b0錛宐1錛?#8230;錛宐m-1”錛屽茍Z=“z0錛寊1錛?#8230;錛寊k-1”涓哄畠浠殑鏈闀垮叕鍏卞瓙搴忓垪銆備笉闅捐瘉鏄庢湁浠ヤ笅鎬ц川錛?
錛?錛?濡傛灉am-1=bn-1錛屽垯zk-1=am-1=bn-1錛屼笖“z0錛寊1錛?#8230;錛寊k-2”鏄?#8220;a0錛宎1錛?#8230;錛宎m-2”鍜?#8220;b0錛宐1錛?#8230;錛宐n-2”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪錛?
錛?錛?濡傛灉am-1!=bn-1錛屽垯鑻k-1!=am-1錛岃暣娑?#8220;z0錛寊1錛?#8230;錛寊k-1”鏄?#8220;a0錛宎1錛?#8230;錛宎m-2”鍜?#8220;b0錛宐1錛?#8230;錛宐n-1”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪錛?
錛?錛?濡傛灉am-1!=bn-1錛屽垯鑻k-1!=bn-1錛岃暣娑?#8220;z0錛寊1錛?#8230;錛寊k-1”鏄?#8220;a0錛宎1錛?#8230;錛宎m-1”鍜?#8220;b0錛宐1錛?#8230;錛宐n-2”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪銆?
榪欐牱錛屽湪鎵続鍜孊鐨勫叕鍏卞瓙搴忓垪鏃訛紝濡傛湁am-1=bn-1錛屽垯榪涗竴姝ヨВ鍐充竴涓瓙闂錛屾壘“a0錛宎1錛?#8230;錛宎m-2”鍜?#8220;b0錛宐1錛?#8230;錛宐m-2”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪錛涘鏋渁m-1!=bn-1錛屽垯瑕佽В鍐充袱涓瓙闂錛屾壘鍑?#8220;a0錛宎1錛?#8230;錛宎m-2”鍜?#8220;b0錛宐1錛?#8230;錛宐n-1”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪鍜屾壘鍑?#8220;a0錛宎1錛?#8230;錛宎m-1”鍜?#8220;b0錛宐1錛?#8230;錛宐n-2”鐨勪竴涓渶闀垮叕鍏卞瓙搴忓垪錛屽啀鍙栦袱鑰呬腑杈冮暱鑰呬綔涓篈鍜孊鐨勬渶闀垮叕鍏卞瓙搴忓垪銆?
浠g爜濡備笅錛?br />
# include <stdio.h>
# include <string.h>
# define N 100
char a[N],b[N],str[N];
int lcs_len(char *a, char *b, int c[ ][ N])
{ int m=strlen(a), n=strlen(b), i,j;
for (i=0;i<=m;i++) c[0]=0;
for (i=0;i<=n;i++) c[0]=0;
for (i=1;i<=m;i++)
for (j=1;j<=m;j++)
if (a[i-1]==b[j-1])
c[j]=c[i-1][j-1]+1;
else if (c[i-1][j]>=c[j-1])
c[j]=c[i-1][j];
else
c[j]=c[j-1];
return c[m][n];
}
char *buile_lcs(char s[ ],char *a, char *b)
{ int k, i=strlen(a), j=strlen(b);
k=lcs_len(a,b,c);
s[k]=’’;
while (k>0)
if (c[j]==c[i-1][j]) i--;
else if (c[j]==c[j-1]) j--;
else { s[--k]=a[i-1];
i--; j--;
}
return s;
}
void main()
{ printf (“Enter two string錛?lt;%d錛?\n”,N);
scanf(“%s%s”,a,b);
printf(“LCS=%s\n”,build_lcs(str,a,b));
}
7.榪唬娉?br />
榪唬娉曟槸鐢ㄤ簬姹傛柟紼嬫垨鏂圭▼緇勮繎浼兼牴鐨勪竴縐嶅父鐢ㄧ殑綆楁硶璁捐鏂規硶銆傝鏂圭▼涓篺(x)=0錛岀敤鏌愮鏁板鏂規硶瀵煎嚭絳変環鐨勫艦寮弜=g(x)錛岀劧鍚庢寜浠ヤ笅姝ラ鎵ц錛?
錛?錛?閫変竴涓柟紼嬬殑榪戜技鏍癸紝璧嬬粰鍙橀噺x0錛?
錛?錛?灝唜0鐨勫間繚瀛樹簬鍙橀噺x1錛岀劧鍚庤綆梘(x1)錛屽茍灝嗙粨鏋滃瓨浜庡彉閲弜0錛?
錛?錛?褰搙0涓巟1鐨勫樊鐨勭粷瀵瑰艱繕灝忎簬鎸囧畾鐨勭簿搴﹁姹傛椂錛岄噸澶嶆楠わ紙2錛夌殑璁$畻銆?
鑻ユ柟紼嬫湁鏍癸紝騫朵笖鐢ㄤ笂榪版柟娉曡綆楀嚭鏉ョ殑榪戜技鏍瑰簭鍒楁敹鏁涳紝鍒欐寜涓婅堪鏂規硶姹傚緱鐨剎0灝辮涓烘槸鏂圭▼鐨勬牴銆備笂榪扮畻娉曠敤C紼嬪簭鐨勫艦寮忚〃紺轟負錛?
紼嬪簭濡備笅錛?
銆愮畻娉曘戣凱浠f硶姹傛柟紼嬬粍鐨勬牴
{ for (i=0;i<n;i++)
x=鍒濆榪戜技鏍?
do {
for (i=0;i<n;i++)
y = x;
for (i=0;i<n;i++)
x = gi(X);
for (delta=0.0,i=0;i<n;i++)
if (fabs(y-x)>delta) delta=fabs(y-x)錛?} while (delta>Epsilon)錛?
for (i=0;i<n;i++)
printf(“鍙橀噺x[%d]鐨勮繎浼兼牴鏄?%f”錛孖錛寈)錛?
printf(“\n”)錛?
} 鍏蜂綋浣跨敤榪唬娉曟眰鏍規椂搴旀敞鎰忎互涓嬩袱縐嶅彲鑳藉彂鐢熺殑鎯呭喌錛?
錛?錛夊鏋滄柟紼嬫棤瑙o紝綆楁硶姹傚嚭鐨勮繎浼兼牴搴忓垪灝變笉浼氭敹鏁涳紝榪唬榪囩▼浼氬彉鎴愭寰幆錛屽洜姝ゅ湪浣跨敤榪唬綆楁硶鍓嶅簲鍏堣冨療鏂圭▼鏄惁鏈夎В錛屽茍鍦ㄧ▼搴忎腑瀵硅凱浠g殑嬈℃暟緇欎簣闄愬埗錛?
錛?錛夋柟紼嬭櫧鐒舵湁瑙o紝浣嗚凱浠e叕寮忛夋嫨涓嶅綋錛屾垨榪唬鐨勫垵濮嬭繎浼兼牴閫夋嫨涓嶅悎鐞嗭紝涔熶細瀵艱嚧榪唬澶辮觸銆?br />
8.絀蜂婦鎼滅儲娉?br />
絀蜂婦鎼滅儲娉曟槸瀵瑰彲鑳芥槸瑙g殑浼楀鍊欓夎В鎸夋煇縐嶉『搴忚繘琛岄愪竴鏋氫婦鍜屾楠岋紝騫朵粠浼楁壘鍑洪偅浜涚鍚堣姹傜殑鍊欓夎В浣滀負闂鐨勮В銆?
銆愰棶棰樸?灝咥銆丅銆丆銆丏銆丒銆丗榪欏叚涓彉閲忔帓鎴愬鍥炬墍紺虹殑涓夎褰紝榪欏叚涓彉閲忓垎鍒彇[1錛?]涓婄殑鏁存暟錛屼笖鍧囦笉鐩稿悓銆傛眰浣夸笁瑙掑艦涓夋潯杈逛笂鐨勫彉閲忎箣鍜岀浉絳夌殑鍏ㄩ儴瑙c傚鍥懼氨鏄竴涓В銆?
紼嬪簭寮曞叆鍙橀噺a銆乥銆乧銆乨銆乪銆乫錛屽茍璁╁畠浠垎鍒『搴忓彇1鑷?鐨勬暣鏁幫紝鍦ㄥ畠浠簰涓嶇浉鍚岀殑鏉′歡涓嬶紝嫻嬭瘯鐢卞畠浠帓鎴愮殑濡傚浘鎵紺虹殑涓夎褰笁鏉¤竟涓婄殑鍙橀噺涔嬪拰鏄惁鐩哥瓑錛屽鐩哥瓑鍗充負涓縐嶆弧瓚寵姹傜殑鎺掑垪錛屾妸瀹冧滑杈撳嚭銆傚綋榪欎簺鍙橀噺鍙栧敖鎵鏈夌殑緇勫悎鍚庯紝紼嬪簭灝卞彲寰楀埌鍏ㄩ儴鍙兘鐨勮В銆傜▼搴忓涓嬶細
鎸夌┓涓炬硶緙栧啓鐨勭▼搴忛氬父涓嶈兘閫傚簲鍙樺寲鐨勬儏鍐點傚闂鏀規垚鏈?涓彉閲忔帓鎴愪笁瑙掑艦錛屾瘡鏉¤竟鏈?涓彉閲忕殑鎯呭喌錛岀▼搴忕殑寰幆閲嶆暟灝辮鐩稿簲鏀瑰彉銆?/div>