日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

算法设计与分析第1章 算法概述

發(fā)布時(shí)間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法设计与分析第1章 算法概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第1章 算法概述(窮舉算法)

重要人物:Alan Turing(圖靈機(jī))、Donald Knuth(TEX系統(tǒng))

算法:解決問題的一種方法或一個(gè)過程
特性:有窮性(Finiteness)、確定性(Definiteness)、可行性(effectiveness)、輸入(Input)、輸出(Output)
程序:算法+數(shù)據(jù)結(jié)構(gòu)

計(jì)算時(shí)間的漸進(jìn)表示
多項(xiàng)式時(shí)間算法(polynomial time algorithm):O(1) < O(logn) < O(n) < O(nlogn) < O(n2)< O(n3)
指數(shù)時(shí)間算法(exponential time algorithm):O(2n) < O(n!) < O(nn)

算法復(fù)雜性:算法所需要的計(jì)算機(jī)資源
時(shí)間復(fù)雜性:隨著問題規(guī)模n的增大,算法運(yùn)行時(shí)間與問題規(guī)模n的某個(gè)函數(shù)f(n)增長率相同,記時(shí)間復(fù)雜度為T(n)=O(f(n))
空間復(fù)雜性:算法所需空間大小,記為S(n)=O(f(n)),不消耗輔助空間的操作稱為原地操作
漸近分析的記號:漸進(jìn)上界記號O、漸進(jìn)下界記號Ω\OmegaΩ、非緊上界記號o、非緊下界記號ω\omegaω、緊漸近界記號Θ\ThetaΘ

窮舉算法

例1. 雞翁一值錢5,雞母一值錢3,雞雛三值錢1。百錢買百雞,問雞翁、母、雛各幾何?
Cock+Hen+Chick=100
Cock5+Hen3+Chick/3=100

代碼:

#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{int x,y,z;x=0;while(x<=20){y=0;while(y<34){z=100-x-y;if((5*x+3*y+z*1.0/3)==100){printf("Cock is %d,Hen is %d,Chick is %d\n",x,y,z);}y++;}x++;}return 0;
}

例2. Google方程式
有一個(gè)字符組成的等式:WWWDOT - GOOGLE = DOTCOM
1)每個(gè)字符代表一個(gè)0-9之間的數(shù)字;
2)WWWDOT、GOOGLE和DOTCOM都是合法的數(shù)字;
3)不能以0開頭。請找出一組字符和數(shù)字的對應(yīng)關(guān)系,使它們互相替換,并且替換后的數(shù)字能夠滿足等式.

代碼1:

/*暴力搜索(窮舉)
*/
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{int w,d,o,t,g,l,e,c,m;int A,B,C;w=1;while(w<=9){d=1;while(d<=9){if(d==w){d++;continue;}o=0;while(o<=9){if(o==w||o==d){o++;continue;}t=0;while(t<=9){if(t==w||t==d||t==o){t++;continue;}g=1;while(g<=9){if(g==w||g==d||g==o||g==t){g++;continue;}l=0;while(l<=9){if(l==w||l==d||l==o||l==t||l==g){l++;continue;}e=0;while(e<=9){if(e==w||e==d||e==o||e==t||e==g||e==l){e++;continue;}c=0;while(c<=9){if(c==w||c==d||c==o||c==t||c==g||c==l||c==e){c++;continue;}m=0;while(m<=9){if(m==w||m==d||m==o||m==t||m==g||m==l||m==e||m==c){m++;continue;}A=w*100000+w*10000+w*1000+d*100+o*10+t;B=g*100000+o*10000+o*1000+g*100+l*10+e;C=d*100000+o*10000+t*1000+c*100+o*10+m;if(A==(B+C)){cout<<"answer: "<<A<<" - "<<B<<" = "<<C<<endl;}m++;}c++;}e++;}l++;}g++;}t++;}o++;}d++;}w++;}return 0;
}

代碼2:

/*遞歸搜索(回溯)
*/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef struct tagcharitem  //數(shù)據(jù)結(jié)構(gòu)
{char c;int value;
} charitem; charitem a[]=           //初始化
{{'W',-1},{'D',-1},{'O',-1},{'T',-1},{'G',-1},{'L',-1},{'E',-1},{'C',-1},{'M',-1}
};int mark[10];   //標(biāo)記數(shù)組void search(int cnt)    //對字母進(jìn)行搜索 最后判斷下
{if(cnt==10){int sum1=a[0].value*1e5+a[0].value*1e4+a[0].value*1e3+a[1].value*1e2+a[2].value*10+a[3].value;int sum2=a[4].value*1e5+a[2].value*1e4+a[2].value*1e3+a[4].value*1e2+a[5].value*10+a[6].value;int sum3=a[1].value*1e5+a[2].value*1e4+a[3].value*1e3+a[7].value*1e2+a[2].value*10+a[8].value;if(sum1-sum2==sum3)cout<<sum1<<"-"<<sum2<<"="<<sum3<<endl;return;}for(int i=9; i>=0; i--) //為字母賦值,W更可能為較大值{if(mark[i]!=0) continue;if((cnt==0||cnt==4||cnt==2)&&i==0) continue; //剪枝:開頭為0a[cnt].value=i;mark[i]=1;search(cnt+1);a[cnt].value=-1;mark[i]=0;}
}int main()
{memset(mark,0,sizeof(mark));search(0);return 0;
}

總結(jié)

以上是生活随笔為你收集整理的算法设计与分析第1章 算法概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。