A. 貪心演算法的時效性是什麼
請問下你說時效性的時間復雜度的意思嗎,在能用貪心演算法的情況下,貪心的時間復雜度肯定時極低的。
B. 貪心演算法
#include <stdio.h>
#define M 100
void main()
{
int i,j,k,temp,m,n;
int t[M]={2,14,4,16,6,5,3},p[M]={1,2,3,4,5,6,7},s[M],d[M]={0};
m=3;n=7;
for(i=0;i<7;i++)
for(j=0;j<7-i;j++)
if(t[j]<t[j+1])
{
temp=t[j];
t[j]=t[j+1];
t[j+1]=temp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
for(i=0;i<m;i++) //求時間。
{
s[i]=p[i];
d[i]=t[i];
}
for(k=0;k<m;k++)
printf(" %d",d[k]);
printf("\n");
for(i=m;i<n;i++)
{
for(k=0;k<m-1;k++) //求最小。
{
temp=d[k];
if(temp>d[k+1])
{temp=d[k+1];j=k+1;}
}
printf("這是最小下標的: %d\n",j);
printf("最小的值: %d\n",temp);
for(k=0;k<m;k++)
printf(" %d",d[k]);
printf("\n");
//j=temp;
s[j]=s[j]+p[i];
d[j]=d[j]+t[i];
}
printf("\n");
for(k=0;k<7;k++)
printf(" %d",t[k]);
printf("\n");
for(k=0;k<7;k++)
printf(" %d",p[k]);
printf("\n");
for(k=0;k<m;k++)
printf(" %d",s[k]);
printf("\n");
for(k=0;k<m;k++)
printf(" %d",d[k]);
printf("\n");
}
C. 貪心法的時間復雜度由哪個操作決定
待處理數據的狀態、問題的規模
時間復雜度取決於:待處理數據的狀態、問題的規模。演算法復雜度分為時間復雜度和空間復雜度。
D. 貪心演算法的時間復雜度
貪心演算法只是一個解決問題的策略。同樣是採用貪心演算法的計算方式,解決不同的問題,它們的時間復雜度是不一樣的,不能夠一概而論的。
E. 貪心演算法馬的遍歷 時間復雜度
【問題描述】
馬的遍歷問題。在8×8方格的棋盤上,從任意指定方格出發,為馬尋找一條走遍棋盤每一格並且只經過一次的一條路徑。
【初步設計】
首先這是一個搜索問題,運用深度優先搜索進行求解。演算法如下:
1、 輸入初始位置坐標x,y;
2、 步驟 c:
如果c>64輸出一個解,返回上一步驟c--
(x,y) ← c
計算(x,y)的八個方位的子結點,選出那此可行的子結點
循環遍歷所有可行子結點,步驟c++重復2
顯然(2)是一個遞歸調用的過程,大致如下:
void dfs(int x,int y,int count)
{
int i,tx,ty;
if(count>N*N)
{
output_solution();//輸入一個解
return;
}
for(I=0;i<8;++i)
{
tx=hn[i].x;//hn[]保存八個方位子結點
ty=hn[i].y;
s[tx][ty]=count;
dfs(tx,ty,count+1);//遞歸調用
s[tx][ty]=0;
}
}
這樣做是完全可行的,它輸入的是全部解,但是馬遍歷當8×8時解是非常之多的,用天文數字形容也不為過,這樣一來求解的過程就非常慢,並且出一個解也非常慢。
怎麼才能快速地得到部分解呢?
【貪心演算法】
其實馬踏棋盤的問題很早就有人提出,且早在1823年,J.C.Warnsdorff就提出了一個有名的演算法。在每個結點對其子結點進行選取時,優先選擇『出口』最小的進行搜索,『出口』的意思是在這些子結點中它們的可行子結點的個數,也就是『孫子』結點越少的越優先跳,為什麼要這樣選取,這是一種局部調整最優的做法,如果優先選擇出口多的子結點,那出口少的子結點就會越來越多,很可能出現『死』結點(顧名思義就是沒有出口又沒有跳過的結點),這樣對下面的搜索純粹是徒勞,這樣會浪費很多無用的時間,反過來如果每次都優先選擇出口少的結點跳,那出口少的結點就會越來越少,這樣跳成功的機會就更大一些。這種演算法稱為為貪心演算法,也叫貪婪演算法或啟發示演算法,它對整個求解過程的局部做最優調整,它只適用於求較優解或者部分解,而不能求最優解。這樣的調整方法叫貪心策略,至於什麼問題需要什麼樣的貪心策略是不確定的,具體問題具體分析。實驗可以證明馬遍歷問題在運用到了上面的貪心策略之後求解速率有非常明顯的提高,如果只要求出一個解甚至不用回溯就可以完成,因為在這個演算法提出的時候世界上還沒有計算機,這種方法完全可以用手工求出解來,其效率可想而知。
在前面的演算法基礎之上,增添一些程序加以實現:
函數1:計算結點出口多少
int ways_out(int x,int y)
{
int i,count=0,tx,ty;
if(x<0||y<0||x>=N||y>=N||s[x][y]>0)
return -1;//-1表示該結點非法或者已經跳過了
for(i=0;i<8;++i)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx<0||ty<0||tx>=N||ty>=N)
continue;
if(s[tx][ty]==0)
++count;
}
return count;
}
函數2:按結點出口進行排序
void sortnode(h_node *hn,int n)//採用簡單排序法,因為子結點數最多隻有8
{
int i,j,t;
h_node temp;
for(i=0;i<n;++i)
{
for(t=i,j=i+1;j<n;++j)
if(hn[j].waysout<hn[t].waysout)
t=j;
if(t>i)
{
temp=hn[i];
hn[i]=hn[t];
hn[t]=temp;
}
}
}
函數3:修改後的搜索函數
void dfs(int x,int y,int count)
{
int i,tx,ty;
h_node hn[8];
if(count>N*N)
{
output_solution();
return;
}
for(i=0;i<8;++i)//求子結點和出口
{
hn[i].x=tx=x+dx[i];
hn[i].y=ty=y+dy[i];
hn[i].waysout=ways_out(tx,ty);
}
sortnode(hn,8);
for(i=0;hn[i].waysout<0;++i);//不考慮無用結點
for(;i<8;++i)
{
tx=hn[i].x;
ty=hn[i].y;
s[tx][ty]=count;
dfs(tx,ty,count+1);
s[tx][ty]=0;
}
}
函數4:主調函數
void main()
{
int i,j,x,y;
for(i=0;i<N;++i)//初始化
for(j=0;j<N;++j)
s[i][j]=0;
printf("Horse jump while N=%d\nInput the position to start:",N);
scanf("%d%d",&x,&y);//輸入初始位置
while(x<0||y<0||x>=N||y>=N)
{
printf("Error! x,y should be in 0~%d",N-1);
scanf("%d%d",&x,&y);
}
s[x][y]=1;
dfs(x,y,2);//開始搜索
}
QQ:547758555
有問題的話QQ上說
F. 採用貪心演算法進行安排。對演算法的時間和空間復雜度進行分析
時間主要是 排序用時了,快速排序 一般是 o(n*logn)
空間 復雜度基本上是 0(1)
G. tsp問題的貪心演算法,分析時間復雜度,試分析是否存在o的有效演算法
貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的局部最優解。貪心演算法不是對所有問題都能得到整體最優解,但對范圍相當廣泛的許多問題他能產
H. TSP問題的遍歷演算法和貪心演算法有什麼區別,為什麼不選擇遍歷演算法
所有問題遍歷演算法的時間復雜度是最高的,但是對於TSP問題來說貪心演算法一般是得不到最優解的
I. pascal貪心演算法是什麼啊
貪心演算法
1.概念
貪心演算法是從問題的某一個初始解出發逐步逼近給定的目標,以
盡可能快地求得更好的解。當達到某演算法中的某一步不能再繼續
前進時,演算法停止。這時就得到了問題的一個解,但不能保證求
得的最後解是最優的。在改進演算法中,貪心演算法演化為爬山法。
2.特點及使用范圍
貪心演算法的優點在於時間復雜度極底。貪心演算法與其他最優化算
法的區別在於:它具有不可後撤性,可以有後效性,一般情況下
不滿足最優化原理。貪心演算法的特點就決定了它的適用范圍,他
一般不適用於解決可行性問題,僅適用於較容易得到可行解的最
優性問題。這里較容易得到可行解的概念是:當前的策略選擇後,
不會或極少使後面出現無解的情況。另外,對於近年來出現的交
互性題目,貪心演算法是一個較好的選擇。這是因為,在題目中,
一個策略的結果是隨題目的進行而逐漸給出的,我們無法預先知
道所選策略的結果,這與貪心演算法不考慮策略的結果和其具有後
效性的特點是不謀而合的。當然,貪心演算法還可以為搜索演算法提
供較優的初始界值。
J. pascal 貪心演算法
貪心演算法實質上就是每一步都取最優解。比如背包問題(不是0/1和完全,最原始的那種)可以用貪心快速解決。很顯然,它有目光短淺的問題,很多題目還是要用動態規劃的
貪心演算法
1.概念
貪心演算法是從問題的某一個初始解出發逐步逼近給定的目標,以
盡可能快地求得更好的解。當達到某演算法中的某一步不能再繼續
前進時,演算法停止。這時就得到了問題的一個解,但不能保證求
得的最後解是最優的。在改進演算法中,貪心演算法演化為爬山法。
2.特點及使用范圍
貪心演算法的優點在於時間復雜度極底。貪心演算法與其他最優化算
法的區別在於:它具有不可後撤性,可以有後效性,一般情況下
不滿足最優化原理。貪心演算法的特點就決定了它的適用范圍,他
一般不適用於解決可行性問題,僅適用於較容易得到可行解的最
優性問題。這里較容易得到可行解的概念是:當前的策略選擇後,
不會或極少使後面出現無解的情況。另外,對於近年來出現的交
互性題目,貪心演算法是一個較好的選擇。這是因為,在題目中,
一個策略的結果是隨題目的進行而逐漸給出的,我們無法預先知
道所選策略的結果,這與貪心演算法不考慮策略的結果和其具有後
效性的特點是不謀而合的。當然,貪心演算法還可以為搜索演算法提
供較優的初始界值。
具體的演算法介紹或教學就要在書上學了