由一個C++版本猜數字遊戲引起的效率問題
一直以來C++,C++以其優越的效能,得到了很多程式設計人員的愛好,但是C++其傑出的一點主要是其效率問題,但是如果不能很好的運用,反而會取得很差的效果,適得其反,因此如何去取得一個好的演算法成效,是一個程式設計者的選擇,本文主要透過一個小遊戲的開發,從一個點上進行切入分析程式的效率所在
#include
#include
#include
#include
#include
using std::string;
using std::endl;
using std::cin;
using std::cout;
int main()
{
int min,max;
double k=0;
string text="請輸入你要猜測的數字的範圍";
string text1="猜數字遊戲";
cout<<:setw>
cout<<:setw>
cout<
cin>>min;
cout<
cin>>max;
srand(time(0));
int range=max-min+1;
int date=rand()/100%range+min;
int answer=date;
cout<
cin>>date;
if(max>date&&mink)
{
k=(k+max)/2;
if(k==date)
cout<<:setw>
else
cout<<:setw>
}
else
{
do
{
k=(k+min)/2;
}
while(k==date);
cout<
}
}
else
{
cout<
}
return 0;
}
上面這段程式沒有去採用任何的方式進行程式的最佳化,只是在程式的核心部分採用了一個二分法去實現數字的搜尋,雖然從一定程度上面能夠達到高效率,但是在整體上面執行效果方面卻有點搪塞,下文采用二叉樹的整數劃分樹形先根序搜尋方式去寫了一段程式,程度程式碼如下:
#include
#defineMAX10000000
#defineSL25
int t[MAX], m = 0, num = 0;
void hf(int n, int *t)//整數劃分生成樹的線性表儲存的函式;
{
int i;
if(n) {
for(i = 1; i <= n; i++) {
t[m++] = i;
hf(n-i,t);
}
}
else {
t[m++] = '#';
num++;
}
}
void print(int *t)//列印整數劃分生成樹的線性表;
{
int l;
printf("Array T is:\n");
for(l = 0; l >",k);
for(i = 0; i < len; i++)
printf(" %d", S[i]);
printf("\n");
k++;
}
void scan(int *t)//掃描儲存樹的線性表生成可識別的組合結果;
{
int S[SL] = {0}, S1[SL] = {0}, S2[SL] = {0};
int i, leap = 1, top = 0, top1 = 0, top2 = 0;
int z1 = 0, z2 = 0;
for(i = 0; i < m; i++) {
if(leap) {
if(t[i] != '#')
S[top++] = t[i];
else {
leap = 0;
print_s(S,top);
}
}
else {
if(t[i] != '#') {
S1[top1] = t[i];
z1 = z1 + S1[top1];
top1++;
}
else {
while(z1 != z2) {
S2[top2] = S[--top];
S[top] = 0;
z2 = z2 + S2[top2];
S2[top2] = 0;
top2++;
}
top2 = 0;
while(top1) {
S2[top2++] = S1[--top1];
S1[top1] = 0;
}
while(top2) {
S[top++] = S2[--top2];
S2[top2] = 0;
}
print_s(S,top);
z1 = z2 = 0;
}
}
}
}
int main()//整數劃分主函式;
{
int n;
printf("Enter n:");
scanf("%d",&n);
hf(n,t);
print(t);
scan(t);
return 0;
}
兩段程式對比後,讀者可以仔細的研究一下,程度2採用一個整數劃分樹形先根序搜尋的方式去完成了,程式才程式碼的美觀性,效率性方面可以看出,其遠遠超過程式碼1的執行效率,主要其在最佳化方面做的很好,達到了一個健壯的效果。
結束語:本文雖然為從演算法執行的時間複雜度上面去分析整個程式,但讀者可以看出,2個同樣的程式,在運用不同演算法執行後,其真正的效率問題也就無形中顯示出來了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29212814/viewspace-1102013/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 猜數字遊戲遊戲
- Shell猜數字遊戲遊戲
- 猜數字小遊戲遊戲
- 【Java】——猜數字遊戲Java遊戲
- 由分號引起的問題
- 使用者猜數字遊戲遊戲
- Rust學習之旅1——寫個猜數字遊戲Rust遊戲
- 一個自己都感覺幼稚的猜數遊戲遊戲
- linux實現猜數字小遊戲Linux遊戲
- C語言初學者(自學)做的一個猜數字小遊戲C語言遊戲
- C#之簡易猜數字遊戲C#遊戲
- LeetCode 299 猜數字遊戲 Java實現LeetCode遊戲Java
- 7-24 猜數字遊戲 (15分)遊戲
- 【python小練習】簡單的猜數字遊戲Python遊戲
- 一個RESOURCE MANAGER引起的問題分析
- wordle game 猜字遊戲GAM遊戲
- 一個由於侵入框架引起的故障框架
- 一個拖拉且錯誤的猜數字程式
- [轉帖]一個NAT問題引起的思考
- C語言實現的一個簡單的猜數小遊戲C語言遊戲
- LeetCode每日一題: 猜數字大小(No.374)LeetCode每日一題
- Java學習筆記(一) 猜數遊戲Java筆記遊戲
- 透過編寫“猜數字”遊戲來學習 Awk遊戲
- 猜數字
- 以猜數字遊戲引出的分治演算法的理解與思考遊戲演算法
- L1-056 猜數字 (20分) C++C++
- 這個由墓碑組成的遊戲,能讓你直觀感受到“人死不是一個數字”遊戲
- 【Java基礎教程】用Java實現猜數字小遊戲Java遊戲
- 【恩墨學院】一次由查詢轉換引起的效能問題的分析
- 回憶小時的快樂,利用python做一款數字猜謎小遊戲Python遊戲
- 猜數字11.9
- 猜數字的介面版
- 填數字遊戲解題機遊戲
- 歷屆試題 數字遊戲(數學)遊戲
- 一次跨域問題引起的思考跨域
- PHP 由 empty 和 isset 面試題引起的思考PHP面試題
- 解決由無線干擾引起的 Wi-Fi 和藍芽問題藍芽
- 由Linux核心bug引起SSH登入緩慢問題的排查與解決Linux
- 由setContentView()方法引起的思考View