亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? glj.cpp

?? 用貪婪算法尋找交換機的最佳匹配端口
?? CPP
字號:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#define N 4
#define INF 100
#define BANDWITH 30

void main()
{
//int T[N][N]={{0,7,6,4},{2,0,9,2},{4,1,0,8},{7,2,3,0}};
int T[N][N]={{0,3,2,4},{2,3,0,2},{4,1,3,0},{2,0,2,3}};//以下的計算都是對特定的流量矩陣T而言
int constbackT[N][N],backupT[N][N],backup1T[N][N],backup2T[N][N];  //T的備份矩陣
int i,j,m,j1,j2,k,t,row=INF,line=INF;//row是元素之和最大的行號,從0開始計數,line是列...
int g[N],h[N];//g[N]存放T的各列按降序排列后的每行的最大值,h[N]存放T的各行按降序排列后每列的最大值
int minbandwith=0;
int max=0;
int minq[BANDWITH];     //存放分解得到的排列矩陣的系數
int bandsize=0;
int tag=0;
int endtag=0;
int notzerotag=1;   //表示T是否為全零的標記,=1為全零矩陣
int sum=0;//decr[i]為第i行元素和與最大值max的差;
int temp;
int p[N][N][BANDWITH];//存放排列矩陣,*這里預定義長度為20*
int lieb[N];     //保存BV分解時隨機產生的列坐標

int starttag,endlen;  
double jitter;
int individualjitter;//臨時存放每個元素的抖動
int mininterval,maxinterval,tempinterval=0;

 for(i=0;i<N;i++)   //備份原流量矩陣T
 {
	   g[i]=0;
	   h[i]=0;
	   for(j=0;j<N;j++)
	   {
		   backupT[i][j]=T[i][j];
		   backup1T[i][j]=T[i][j];
		   backup2T[i][j]=T[i][j];
		   constbackT[i][j]=T[i][j];
	   }
 }
 cout<<"原流量矩陣如下:"<<endl;
 for(i=0;i<N;i++)
	{
	   for(j=0;j<N;j++)
		   cout<<T[i][j]<<" ";
	   cout<<endl;
	}
 cout<<endl;

 for(j=0;j<N;j++)     //對T的列向量進行冒泡排序,按降序排列
 {
	for(k=0;k<N-1;k++)     
	{
		for(i=0;i<N-k-1;i++)
		{
			if(backup1T[i][j]<backup1T[i+1][j])
			{
				temp=backup1T[i][j];
				backup1T[i][j]=backup1T[i+1][j];
				backup1T[i+1][j]=temp;
			}
		}
	}
 }
    cout<<"列向量按降序排列后的流量矩陣如下:"<<endl;
    for(i=0;i<N;i++)
	{
	   for(j=0;j<N;j++)
		   cout<<backup1T[i][j]<<" ";
	   cout<<endl;
	}
    cout<<endl;
   for(i=0;i<N;i++)    //找出每行的最大值存入g[i]中
   {
	   for(j=0;j<N;j++)
	   {
		   if(backup1T[i][j]>g[i])
			   g[i]=backup1T[i][j];
	   }
   }
for(i=0;i<N;i++)     //對T的行向量進行冒泡排序,按降序排列
{
	for(k=0;k<N-1;k++)     
	{
		for(j=0;j<N-k-1;j++)
		{
			if(backup2T[i][j]<backup2T[i][j+1])
			{
				temp=backup2T[i][j+1];
				backup2T[i][j+1]=backup2T[i][j];
				backup2T[i][j]=temp;
			}
		}
	}
}
 cout<<"行向量按降序排列后的流量矩陣如下:"<<endl;
    for(i=0;i<N;i++)
	{
	   for(j=0;j<N;j++)
		   cout<<backup2T[i][j]<<" ";
	   cout<<endl;
	}
    cout<<endl;
 for(j=0;j<N;j++)    //找出每列的最大值存入h[i]中
   {
	   for(i=0;i<N;i++)
	   {
		   if(backup2T[i][j]>h[j])
			   h[j]=backup2T[i][j];
	   }
   }
   temp=0;
   for(i=0;i<N;i++)
	   minbandwith+=g[i];
   for(j=0;j<N;j++)    
	   temp+=h[j];
   if(temp>minbandwith)
	   minbandwith=temp; 
 cout<<"最小帶寬等于"<<minbandwith<<endl;

 //下面進行LJ分解
 	for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			{
				for(k=0;k<BANDWITH;k++)
					p[i][j][k]=0;   //三維矩陣p保存分解的排列矩陣,預先附值為全零矩陣,
			}
		}	 
for(t=0;notzerotag;t++)   //循環分解得到一組排列矩陣的集合,直到T為0為止
	 {
	  temp=1;
	   for(i=0;i<N;i++)   //產生置換列向量(j1,j2,j3,j4),并存放于lieb[]中
		  {
		   srand( (unsigned)time( NULL ) );
		   k=rand()%10%N;
		   if(i==2)
			{
				while(lieb[i-1]==k||lieb[i-2]==k)
				{
					srand( (unsigned)time( NULL ) );
					k=rand()%10%N;
				}
			}
			else if(i==3)
			{
				if(lieb[i-1]==k||lieb[i-2]==k||lieb[i-3]==k)
					k=6-lieb[i-1]-lieb[i-2]-lieb[i-3];
			}
			else
			{
				for(j=0;j<i;j++)
				{
					while(lieb[j]==k)
					{
						srand( (unsigned)time( NULL ) );
						k=rand()%10%N;
					}
				}				
			}
			lieb[i]=k;
			cout<<"i="<<i<<"   "<<"lieb["<<i<<"]=="<<k<<endl;
			j=lieb[i];
			temp*=T[i][j];
	   } //  for循環產生了一組置換列向量
	     endtag++;
	     cout<<"已經產生第"<<endtag<<"個列置換向量"<<endl;
	if(temp)
	   {
		  max=0;
		for(i=0;i<N;i++)
		{
			k=lieb[i];
			if(T[i][k]>max)
				max=T[i][k];
		}
		minq[t]=max;
		for(i=0;i<N;i++)
		   {
			   temp=lieb[i];
			   p[i][temp][t]=1;
			   T[i][temp]=0;
		   }
		endtag=0;
		cout<<"第"<<t+1<<"個排列矩陣的系數="<<minq[t]<<endl;
		cout<<"第"<<t+1<<"個排列矩陣如下:"<<endl;
         for(i=0;i<N;i++)
			{
			  for(j=0;j<N;j++)
				 cout<<p[i][j][t]<<",";
			     cout<<endl;
			}
		cout<<endl;
		cout<<"分解剩下的矩陣T="<<endl;
		for(i=0;i<N;i++)
			{
			  for(j=0;j<N;j++)
				 cout<<T[i][j]<<" ? ";
			     cout<<endl;
			}
		cout<<endl;  
	 for(i=0;i<N;i++)    //判斷分解后剩下的矩陣R是否為全零矩陣
		 for(j=0;j<N;j++)
		 {
			 if(T[i][j]!=0)
			 {
				 j=INF;
				 i=INF;			
			 }
		 }	
		 if(i==N)   //是全零矩陣,則令notzerotag=0,終止循環
		 notzerotag=0;		 
	   }//if(temp)
 else if(endtag>9)  //設置產生隨機數次數,若大于25則重新生成隨機數
	   {   
		   k=0;
		   for(j=0;j<N;j++)
		   {
			   if(T[0][j]!=0)
				   k++;
		   }
	     if(k==1)  //剩余的矩陣R中每一行中僅有一個非零元素
		   {
			 max=0;
			 for(i=0;i<N;i++)
			 {
				 for(j=0;j<N;j++)
				 {
					 if(T[i][j]!=0&&T[i][j]>max)
						 max=T[i][j];
				 }
			 }
		       for(i=0;i<N;i++)
			   {
				   for(j=0;j<N;j++)
				   {
					 if(T[i][j]!=0)
					   {
						 p[i][j][t]=1;
						 minq[t]=max;
						 T[i][j]=0;							 
					   }                       
				   }
			   }
		     notzerotag=0;
		     cout<<"第"<<t+1<<"個排列矩陣的系數="<<minq[t]<<endl;
		     cout<<"第"<<t+1<<"個排列矩陣如下:"<<endl;
            for(i=0;i<N;i++)
			{
			  for(j=0;j<N;j++)
				 cout<<p[i][j][t]<<",";
			  cout<<endl;
			}
	    	cout<<endl;		   
	    	cout<<"分解剩下的矩陣T="<<endl;
	    	for(i=0;i<N;i++)
			{
			  for(j=0;j<N;j++)
				 cout<<T[i][j]<<" ? ";
			     cout<<endl;
			}
	    	cout<<endl;
		 }//if
		else
		{
			endtag=0;
			t--;
		}
 }//else if
 else
	t--;
 }  //for
   cout<<"LJ分解共得到"<<t<<"個排列矩陣"<<endl;
   for(i=0;i<t;i++)
	   bandsize+=minq[i];
   cout<<"得到的帶寬="<<bandsize<<endl;

//下面對p[i][j][t]進行LJ調度 得到調度表schedul[N][t],每一列對應一個時隙的調度
//LJ調度與BV調度的區別是考慮了調度的開始時間starttime
int schedul[N][BANDWITH];   
double temp2,tagclass[BANDWITH],select[BANDWITH];//存放t個排列矩陣的標記類 
int mintag,selecttag[BANDWITH];
int position[BANDWITH];
int temp1,temp3[N];
int times;
int delet[BANDWITH];
int size=0;   //存放調度表的長度,即各排列矩陣的系數的和
int schedullen;
double starttime[BANDWITH];
    for(i=0;i<t;i++)   
	{
		select[i]=1.0/minq[i];  //對t個排列矩陣預附標記的初值
		tagclass[i]=select[i];
		selecttag[i]=minq[i];   //對t個標記的被選擇標記附初值=0:被調度完,!=0:未被調度完
		position[i]=i;
		starttime[i]=0;      //*****對t個標記的開始時間賦初始值為0;
	}
	for(j=0;j<t;j++)
		cout<<select[j]<<" 初始標記值 ";
    cout<<endl;
for(i=0;i<t;i++)     //進行size次調度
	size+=minq[i];
for(k=0;k<size;k++)   
 {
	for(i=0;i<t;i++)     //對t個標記進行冒泡排序,按升序排列在select數組中
	{
		for(j=0;j<t-1;j++)
		{
			if(select[j]>select[j+1])
			{
				temp2=select[j+1];
				select[j+1]=select[j];
				select[j]=temp2;	

				temp1=position[j+1];
				position[j+1]=position[j];
				position[j]=temp1;

				temp1=selecttag[j+1];
				selecttag[j+1]=selecttag[j];
				selecttag[j]=temp1;
			}			
		}		
	}   //一次排序完成
for(j=0;j<t;j++)
		cout<<select[j]<<"?";
cout<<endl;
for(j=0;j<t;j++)
		cout<<position[j]<<"??";
cout<<endl;

 for(i=0;i<t;i++)
	{ 		
     if(selecttag[i]!=0&&starttime[i]<=k)
	 {	
		 mintag=position[i];
		 temp1=i;
		 i=t;
	 }
	}	 
	cout<<"對排列矩陣P"<<mintag<<"調度"<<endl;
	//下面對p[][][mintag]調度
    for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			if(p[i][j][mintag]==1)
				schedul[i][k]=j+1;
		}
	}
    //修改被調度的排列矩陣的標記
    starttime[temp1]=select[temp1];
	select[temp1]=select[temp1]+tagclass[mintag];
	selecttag[temp1]-=1;
    cout<<endl<<"得到的調度向量:"<<endl;
	for(i=0;i<N;i++)
	    cout<<schedul[i][k]<<endl;
  }//for
cout<<endl<<"得到的調度矩陣:"<<endl;
  for(i=0;i<N;i++)
  {
		for(j=0;j<size;j++)
			cout<<schedul[i][j]<<",";
		cout<<endl;
  }
  cout<<endl;

  //修改得到的調度表,刪除冗余調度使其等于原流量
     for(i=0;i<N;i++)
	 {
		for(j=0;j<size;j++)
		{
			temp=schedul[i][j]-1;
			if(backupT[i][temp]>=1)	
				backupT[i][temp]-=1;
			else
				schedul[i][j]=0;				
		}
	 }
     cout<<"刪除冗余調動后得到的調度表如下:"<<endl;
	 for(i=0;i<N;i++)
	 {
		for(j=0;j<size;j++)   
			cout<<schedul[i][j]<<" ";
		cout<<endl;
	 }
//合并調度向量
	 temp1=0;
	 for(j=0;j<size;j++)
	 {
		 for(i=0;i<N;i++)
		 {
			 if(schedul[i][j]==0)
			 {
				 delet[temp1]=j;  //存放可能可以合并的調度向量
				 temp1++;
				 i=N;
			 }			 				 				
		 }
	 }
 temp=0;
for(times=0;times<2;times++)
{
 for(k=0;k<temp1-1;k++)   //進行合并
 {
	 j1=delet[k];
   for(j=k+1;j<temp1;j++)
	 {	   
	   j2=delet[j];
		 for(i=0;i<N;i++)
		 {			 
			 if(schedul[i][j1]&&schedul[i][j2])
				 i=INF;				 
		 }
		 if(i==N)//可能可以合并,但不知道是否有沖突,下面需要判斷
		 {   
			 for(t=0;t<N;t++)
				 temp3[t]=schedul[t][j1]+schedul[t][j2];
			 for(t=0;t<N-1;t++)   //檢查合并后是否有沖突,即是否有多個端口向同一個端口發送數據
			 {
				for(m=t+1;m<N;m++)
				 {
					 if(temp3[t]==temp3[m])
						 t=N;   //有沖突則跳出
				 }	
			 }
				 if(t==N-1)    //沒有沖突則合并
				 {
					 for(t=0;t<N;t++)
					 {
						 schedul[t][j1]=temp3[t];
						 schedul[t][j2]=0;
					 }
					 for(m=j2+1;m<size;m++)					 
						 for(t=0;t<N;t++)
							 schedul[t][m-1]=schedul[t][m];
					for(m=0;m<N;m++)
						schedul[m][size-1]=0;					 
					 for(m=j+1;m<temp1;m++)
						 select[m-1]=select[m];
					 temp1--;
					 temp++;//記錄刪除的向量的個數
					 cout<<"第"<<j1<<"和第"<<j2<<"列可以合并為:"<<endl;
                     for(t=0;t<N;t++)
					    cout<<schedul[t][j1]<<endl;
				 }				 
		 }//if
	 }//for j
 } //for k
}//for times
  schedullen=size-temp;
  cout<<endl<<"刪除"<<temp<<"個多余調度合并后的調度矩陣S如下:"<<endl;
  for(i=0;i<N;i++)
  {
		for(j=0;j<schedullen;j++)   
			cout<<schedul[i][j]<<",";
		cout<<endl;
  }
  cout<<endl;
//下面對調度矩陣S計算抖動
  jitter=0;
  for(i=0;i<N;i++)
  {
	  for(j=0;j<N;j++)
	  {
		  if(constbackT[i][j]>1)
		  {
			  mininterval=schedullen;
			  maxinterval=1;
			  starttag=0;
			  endlen=schedullen;
			  for(k=0;k<endlen;k++)
			  {
				  t=k%schedullen;
				  if(starttag==0&&schedul[i][t]!=j+1)
					  endlen++;
				  else if(starttag==0&&schedul[i][t]==j+1)
				  {
					  endlen++;
					  starttag=1;
					  tempinterval=0;
				  }
				  else if(starttag==1&&schedul[i][t]==j+1)
				  {
					  tempinterval++;
					  if(tempinterval<mininterval)
						  mininterval=tempinterval;
					  if(tempinterval>maxinterval)
						  maxinterval=tempinterval;
					  tempinterval=0;
				  }
				  else if(starttag==1&&schedul[i][t]!=j+1)
					  tempinterval++;
			  }//for k
			  individualjitter=maxinterval-mininterval;
		  }//if
		  else
			  individualjitter=0;
		  jitter+=individualjitter;
	  }//for j
  }//for i
  jitter=jitter*0.1/(N*(N-1))*10;
  cout<<"抖動="<<jitter<<endl;

}//main

		 
		   
		


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品综合在线观看| 国产亚洲欧美激情| 欧美v日韩v国产v| 中文字幕一区三区| 久久99热99| 欧美色男人天堂| 中文字幕一区二区三区乱码在线| 秋霞电影一区二区| 欧美丝袜第三区| 亚洲免费观看在线视频| 国产成人精品一区二| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久综合九色综合欧美98| 亚洲成人一区二区在线观看| 色哟哟精品一区| 国产精品久久久久久久久快鸭| 蜜芽一区二区三区| 欧美老肥妇做.爰bbww视频| 亚洲欧美福利一区二区| 94色蜜桃网一区二区三区| 久久久蜜桃精品| 精品一区二区在线播放| 91精品福利在线一区二区三区| 伊人性伊人情综合网| 99久久777色| 国产精品高潮久久久久无| 国产成人亚洲综合a∨猫咪| 精品国产伦理网| 久久精品国内一区二区三区| 欧美一区二区三区小说| 日韩综合一区二区| 日韩欧美在线综合网| 免费成人av资源网| 欧美mv日韩mv国产网站| 久久精品av麻豆的观看方式| 日韩精品专区在线| 精品综合久久久久久8888| 欧美一区二区三区白人| 老司机免费视频一区二区| 日韩欧美区一区二| 国产一区二区三区精品视频| 国产亚洲午夜高清国产拍精品| 国内欧美视频一区二区| 国产拍揄自揄精品视频麻豆| 国产精品影视在线观看| 国产精品三级av| 91国在线观看| 麻豆成人综合网| 国产欧美一区二区精品婷婷| 成人动漫视频在线| 一区二区三区四区激情| 日韩一级大片在线观看| 国产91精品在线观看| 亚洲天堂2016| 欧美一区二区三区四区五区 | 国产精品麻豆久久久| 91亚洲精品乱码久久久久久蜜桃| 一区二区三区在线播| 欧美群妇大交群的观看方式| 狠狠色综合日日| 国产精品色眯眯| 欧美视频在线一区二区三区 | 欧美激情一区二区三区| 91成人免费在线| 精品无码三级在线观看视频| 国产精品国产三级国产专播品爱网| 色婷婷综合久色| 国产一区不卡在线| 亚洲综合精品久久| 欧美成人一区二区三区片免费| 波多野结衣中文字幕一区| 青草av.久久免费一区| 亚洲国产精品精华液2区45| 欧美三级视频在线| 粉嫩aⅴ一区二区三区四区五区| 亚洲图片欧美视频| 欧美激情一区二区三区在线| 精品视频在线免费观看| 国产99久久久国产精品潘金| 亚洲午夜精品网| 亚洲国产激情av| 欧美一区二区三区免费大片| 99re这里只有精品6| 九九精品视频在线看| 一区二区久久久| 欧美国产欧美综合| 日韩免费电影一区| 欧美日韩一级视频| 色综合久久综合网欧美综合网| 精品写真视频在线观看| 无码av免费一区二区三区试看 | 欧美少妇xxx| 北条麻妃一区二区三区| 狠狠色丁香久久婷婷综合丁香| 亚洲高清在线精品| 日韩毛片一二三区| 国产欧美日韩不卡免费| 日韩欧美成人午夜| 8x8x8国产精品| 91福利资源站| 97精品电影院| 波多野结衣欧美| 成人一二三区视频| 国产精品18久久久久久久久久久久 | 日本亚洲天堂网| 亚洲午夜精品久久久久久久久| 最好看的中文字幕久久| 欧美激情一区二区三区全黄 | 国产精品18久久久久| 国内国产精品久久| 麻豆精品在线视频| 日韩av中文字幕一区二区| 亚洲bt欧美bt精品777| 亚洲在线视频免费观看| 亚洲香蕉伊在人在线观| 亚洲国产美国国产综合一区二区| 亚洲国产日产av| 日韩黄色小视频| 麻豆精品国产传媒mv男同| 美女看a上一区| 国产久卡久卡久卡久卡视频精品| 国产又黄又大久久| 国产成人丝袜美腿| 91在线精品一区二区三区| 97久久精品人人做人人爽50路| 波多野结衣中文字幕一区| 一本久久a久久精品亚洲| 91黄视频在线| 欧美一区二区三区小说| 久久嫩草精品久久久精品| 欧美高清一级片在线观看| 亚洲欧美自拍偷拍| 午夜欧美一区二区三区在线播放| 日韩电影在线免费观看| 久久99日本精品| 成人免费视频网站在线观看| 91免费国产在线观看| 欧美日韩国产色站一区二区三区| 欧美电影在线免费观看| 亚洲精品在线免费播放| 国产精品久久国产精麻豆99网站| 亚洲欧洲精品天堂一级| 天天色 色综合| 国产成人精品免费看| 91国产丝袜在线播放| 欧美一区二区免费| 国产精品国产三级国产专播品爱网| 亚洲综合视频网| 国产综合色视频| 91久久一区二区| 欧美精品一区二区三区在线 | 蜜桃在线一区二区三区| 成人av网站在线| 欧美日韩国产高清一区二区三区| 精品对白一区国产伦| 亚洲综合色噜噜狠狠| 精品一区二区三区av| 91国产免费看| 国产女主播一区| 日韩精品免费专区| 97久久精品人人做人人爽| 日韩欧美视频一区| 一区二区三区四区国产精品| 九九久久精品视频| 欧美日韩高清在线播放| 中文一区在线播放| 久久国产剧场电影| 欧美中文字幕一区| 国产片一区二区| 激情综合网最新| 欧美精品一二三四| 中文字幕一区在线| 国产乱色国产精品免费视频| 欧美专区日韩专区| 国产精品欧美极品| 国产一区 二区 三区一级| 欧美日本一区二区三区四区| 一区二区三区四区蜜桃 | 欧美日韩免费电影| **网站欧美大片在线观看| 国产在线视频精品一区| 日韩一区二区电影网| 亚洲国产一区二区三区| av中文字幕在线不卡| 久久你懂得1024| 韩国精品主播一区二区在线观看| 欧美日韩在线观看一区二区| 亚洲三级在线观看| 99精品视频中文字幕| 久久一区二区三区四区| 美女视频一区二区三区| 欧美精品久久天天躁| 亚洲一二三区不卡| 在线一区二区三区做爰视频网站| 国产精品久久毛片av大全日韩| 精品亚洲免费视频| 欧美mv和日韩mv国产网站| 久久国产精品区| 精品国产伦一区二区三区观看方式| 热久久久久久久|