當前位置:首頁 » 軟體設計 » 演算法設計策略

演算法設計策略

發布時間: 2021-01-23 06:28:11

㈠ 什麼是策略設計模式

設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經專驗的總結。使用設屬計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編寫真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。

㈡ 程序設計《任選一題》

【問題描述】
馬的遍歷問題。在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);//開始搜索
}

㈢ 數學建模中的策略決定方法

策略決定的話可以用層次分析法、最優化演算法等。
數學建模應當掌握的十類演算法:
1、蒙特卡羅演算法(該演算法又稱隨機性模擬演算法,是通過計算機模擬來解決問題的算 法,同時可以通過模擬可以來檢驗自己模型的正確性,是比賽時必用的方法) 2.數據擬合、參數估計、插值等數據處理演算法(比賽中通常會遇到大量的數據需要 處理,而處理數據的關鍵就在於這些演算法,通常使用Matlab作為工具) 3.線性規劃、整數規劃、多元規劃、二次規劃等規劃類問題(建模競賽大多數問題 屬於最優化問題,很多時候這些問題可以用數學規劃演算法來描述,通常使用Lindo、 Lingo軟體實現) 4.圖論演算法(這類演算法可以分為很多種,包括最短路、網路流、二分圖等演算法,涉 及到圖論的問題可以用這些方法解決,需要認真准備) 5.動態規劃、回溯搜索、分治演算法、分支定界等計算機演算法(這些演算法是演算法設計 中比較常用的方法,很多場合可以用到競賽中) 6.最優化理論的三大非經典演算法:模擬退火法、神經網路、遺傳演算法(這些問題是 用來解決一些較困難的最優化問題的演算法,對於有些問題非常有幫助,但是演算法的實 現比較困難,需慎重使用) 7.網格演算法和窮舉法(網格演算法和窮舉法都是暴力搜索最優點的演算法,在很多競賽 題中有應用,當重點討論模型本身而輕視演算法的時候,可以使用這種暴力方案,最好 使用一些高級語言作為編程工具) 8.一些連續離散化方法(很多問題都是實際來的,數據可以是連續的,而計算機只 認的是離散的數據,因此將其離散化後進行差分代替微分、求和代替積分等思想是非 常重要的) 9.數值分析演算法(如果在比賽中採用高級語言進行編程的話,那一些數值分析中常 用的演算法比如方程組求解、矩陣運算、函數積分等演算法就需要額外編寫庫函數進行調 用) 10.圖象處理演算法(賽題中有一類問題與圖形有關,即使與圖形無關,論文中也應該 要不乏圖片的,這些圖形如何展示以及如何處理就是需要解決的問題,通常使用Matlab 進行處理)

㈣ 把「內部排序演算法的解題策略,演算法設計分析與實現」翻譯成英文

Internal sorting algorithm problem solving strategies,algorithm design and analysis

㈤ 學java怎麼樣 怎麼樣才能學好java

Java是編程語言中比較難學的一門語言,它的難度並不低,相對比於C語言、Python語言來說,他們的學習難度要比Java輕松很多;

Java的學習中最難得就是,各種各樣的框架,框架的使用、整合、最後項目;

學習Java剛開始我們要學習各種各樣的基礎知識:

Java的基礎:

數據結構和演算法、集合(容器)、IO流、多線程、封裝、多態、繼承等等

資料庫的基礎:

MySQL基礎、MySQL 增刪改查語句、資料庫對象、JDBC、反射和註解等

Java web基礎知識:

前端的基礎:

JS(JavaScript)、jQuery、HEML、CSS等

當我們學完這些基礎知識以後我們將邁入Java中的高級階段 JavaEE

這個階段中會需要我們將所有的,知識總結在一起揉吧揉吧和一塊,「難就難在這里」以我對學習Java來看就是這種想像,起個名詞「學英語」;

就是那種 「ABCDEFG···」我都會,但是合在一起的話我們就變得,不能理解甚至無從下手。原本很簡單的基礎知識,什麼 封裝多態簡單、什麼 HTML/CSS簡單、什麼資料庫簡單!!但是他們集合在一起會導致我們不知道從哪裡開始


一臉懵逼?

學習Java不止要靠毅力、腦力、思維力,還要靠人際交流問題需要靠你的花言巧語找大牛為你指點江山,走上成功之路!

那麼有關Java學習的難度和線路我整理啦一些有用的知識,為你指點江山!

㈥ 演算法設計與分析作業,第9題的第3小問~~按它敘述的策略,獲得的任務序列不應該是3-2-4-1嗎怎

您好每個任務所需時間是(4,2,8,1) 為了使平均ACT最小 只要使總共等待時間最少即可 根據內貪心演算法容 應該讓耗時小的任務首先完成 所以 順序 是 4 2 1 3(第四個耗時1分鍾 第二個耗時2分鍾 第一個耗時4分鍾 第三個耗時8分鍾) 望採納 謝謝啦

㈦ 並行演算法有哪三種設計策略

並行數據挖掘技術來不同於其它自並行演算法的地方在於它需要處理的數據的規模很大。人們知道,對於並行而言,交互之間的消耗(即內存的使用)是比執行時間(計算階段)重要得多的因素。串列數據挖掘演算法對於規模很小的數據也需要大量的運行時間

熱點內容
美發店認證 發布:2021-03-16 21:43:38 瀏覽:443
物業糾紛原因 發布:2021-03-16 21:42:46 瀏覽:474
全國著名不孕不育醫院 發布:2021-03-16 21:42:24 瀏覽:679
知名明星確診 發布:2021-03-16 21:42:04 瀏覽:14
ipad大專有用嗎 發布:2021-03-16 21:40:58 瀏覽:670
公務員協議班值得嗎 發布:2021-03-16 21:40:00 瀏覽:21
知名書店品牌 發布:2021-03-16 21:39:09 瀏覽:949
q雷授權碼在哪裡買 發布:2021-03-16 21:38:44 瀏覽:852
圖書天貓轉讓 發布:2021-03-16 21:38:26 瀏覽:707
寶寶水杯品牌 發布:2021-03-16 21:35:56 瀏覽:837