1、S/N为10,其信噪比为10dB。对于通过有噪声信道传输数字数据而言,信噪比非常重要,因为它设定了有噪声信道一个可达的数据传输速率上限,即对于带宽为W赫兹,信噪比为S/N的信道,其最大数据传输速率(信道容量)为:C = Wlog2(1+S/N)(bps)例如,对于一个带宽为3KHz,信噪比为30dB(S/N就是1000)的话音信道,无论其使用多少个电平信号发送二进制数据,其数据传输速率不可能超过30Kbps。值得注意的是,香农定理仅仅给出了一个理论极限,实际应用中能够达到的速率要低得多。其中一个原因是香农定理只考虑了热噪声(白噪声),而没有考虑脉冲噪声等因素。4、以下代码运行结果是什么int
2、main()int a,b,c,abc = 0;a=b=c=40;if(c)int abc;abc = a*b+c;printf(%d,%d, abc, c);return 0;/0 405、给出了从纽约出发和到达洛杉矶的各种航班信息,写出找到一条从纽约到洛杉矶的最短距离的航班组合的代码。单源最短路:Dijkstra 迪杰斯特拉 n2Bellman Ford veSPFA O(ke), 其中k为所有顶点进队的平均次数,可以证明k一般小于等于2各点最短路:Floyd-Warshall 弗洛伊德 n3最小生成树Prim 普里姆 n2Kruskal 克鲁斯卡尔 eloge代码如下/*=*| Dijk
3、stra数组实现O(N2)| Dijkstra - 数组实现(在此基础上可直接改为STL的Queue实现)| lowcost - beg到其他点的最近距离| path - beg为根展开的树,记录父亲结点*=*/#define INF 0x03F3F3F3Fconst int N;int pathN, visN;void Dijkstra(int costN, int lowcostN, int n, int beg) int i, j, min; memset(vis, 0, sizeof(vis); visbeg = 1; for (i=0; in; i+) lowcosti = cost
4、begi; pathi = beg; lowcostbeg = 0; pathbeg = -1; / 树根的标记 int pre = beg; for (i=1; min = INF; for (j=0; j j+) / 下面的加法可能导致溢出,INF不能取太大 if (visj=0 & lowcostpre+costprejlowcostj) lowcostj = lowcostpre + costprej; pathj = pre; for (j=0; if (visj = 0 & lowcostj =表示求最小值, 作为最长路,=表示求最大值, 作为最短路 (v-u distu + c)
5、 distv = distu + c; prev = u; return 1; return 0;int bellman (int src) int i, j; +i) disti = inf; prei = -1; distsrc = 0; bool flag; +i) flag = false; / 优化m; +j) if( 1 = relax(edgej0, edgej1, edgej2) ) flag = true; if( !flag ) break; for (j=0; if (1 = relax(edgej0, edgej1, edgej2) return 0; / 有负圈| S
6、PFA(Shortest Path Faster Algorithm)Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。 它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边。原理:只有那些在前一遍松弛中改变了距离估计值的点,才可能引起他们的邻接点的距离估计值的改变。判断负权回路:记录每个结点进队次数,超过|V|次表示有负权。/ POJ 3159 Candiesconst int INF = 0x3F3F3F3F;const int V = 30001;const int E = 150001;int pntE, costE, nxtE;int e,
7、headV; int distV; bool visV;int main(void) int n, m; while( scanf(%d%d, &n, &m) != EOF ) int i, a, b, c; e = 0; memset(head, -1, sizeof(head); for( i=0; i m; +i ) / b-a distu + c ) inline void addedge(int u, int v, int c) pnte = v; coste = c; nxte = headu; headu = e+;int SPFA(int src, int n) / 此处用堆栈
8、实现,有些时候比队列要快 int i; for( i=1;= n; +i ) / 顶点1.n visi = 0; disti = INF; int QE, top = 1; Q0 = src; vissrc = true; while( top ) int u, v; u = Q-top; visu = false; for( i=headu; i != -1; i=nxti ) v = pnti; if( 1 = relax(u, v, costi) & !visv ) Qtop+ = v; visv = true; return distn;语法:Floyd_Washall(Graph G
9、,int n,Graph D,Graph P);参数:G:图,用邻接矩阵表示n:图的顶点个数D:Di,j表示从i 到j 的最短距离P:Pi,j表示从i 到j 的最短路径上j 的父节点自定义:MaxN;返回值:null注意:此算法允许图中带有负权的弧,但不允许有路径长度为负值的回路. 源程序: void Floyd(int GMaxN,int n,int DMaxN,int PMaxN) int i,j,k;ii+)jj+) Dij=Gij; Pij=i;i+) Dii=0;Pii=0; for (k=0;kDik+Dkj) Dij=Dik+Dkj; Pij=Pkj;void Floyd(int
10、 n,int DMaxN) /G 不用再输出的情况下.| Prim求MST cost耗费矩阵(inf为无穷大); prim(cost, n); 返回-1代表原图不连通;const typec inf = 0x3f3f3f3f;int visV; typec lowcV;typec prim(typec costV, int n) / vertex: 0 n-1 int i, j, p; typec minc, res = 0; vis0 = 1; i+) lowci = cost0i; i+) minc = inf; p = -1; if (0 = visj & minc lowcj) min
11、c = lowcj; p = j; if (inf = minc) return -1; / 原图不连通 res += minc; visp = 1; if (0 = visj & lowcj costpj) lowcj = costpj; return res;Kruskal 算法#include stdio.hqueuealgorithmstring.hiostreammath.husing namespace std;#define Maxn 1010struct Edge int u,v; int w; /*bool operatorE.w; */edge1000010;bool cm
12、p(Edge E1,Edge E2) return E1.wE2.w;int n,m;int rankMaxn,pMaxn;void makeset(int n) for(int i=0;=n; ranki=0; pi=i;int findset(int x) if(x!=px) px=findset(px); return px;void unionset(int x,int y) x=findset(x); y=findset(y); if(rankxranky) py=x; else px=y; if(rankx=ranky) ranky+;/* * */int main(int arg
13、c, char* argv) int t; int T=0; scanf(%d,&t); while(t-) T+;n,&m); makeset(n);edgei.u,&edgei.v,&edgei.w); sort(edge,edge+m,cmp); int ans; if(findset(edgei.u)!=findset(edgei.v) unionset(edgei.u,edgei.v); if(edgei.w=0;i-),*c&(1 -1,等到反码 - 然后得到原码。11 - 1 = 10 - 10 取反,得原码01,所以其数值为“-1”。100 - 1 = 011 - 011 取反
14、,得原码100,所以其数值为“-4”。统一用这种方法求补码,或求补码的真值!以前那种很容易错!求-15的补码第一步:+15:00001111第二步:逐位取反(1变成0,0变成1),然后在末尾加1。11110001再举一个例子验证下:求-64的补码+64:0100000011000000逆:二进制值:10111111(-65的补码)各位取反:加1:01000001(+65的补码)20、挑bug,在linux下运行:#include char*reverse(char* str)int len=0, i=0;char *pstr=str, *ptemp,*pd;while(*+pstr)len+;pstr-;/ptemp=(char*)malloc(len+1);ptemp=(char*)malloc(len+1);pd=ptemp;while(len-)*ptemp=*pstr; ptemp+;i+;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1