(算法)宝石升级问题
題目:
有一塊寶石,1級升2級成功率100%,2級升3級成功率80%,3級升4級成功率60%,4級升5級成功率40%,每次升級失敗時降回到1級。請問一塊1級寶石升到5級平均要多少次??
思路:
問題:求一塊1級寶石升級到5級的期望次數(shù)
1、蒙特卡洛模擬試驗
考慮一下期望的定義,所有的可能的次數(shù)*出現(xiàn)該次數(shù)的概率之和。出現(xiàn)的次數(shù)可能為無窮大,但當(dāng)次數(shù)達(dá)到一定數(shù)量時,期望就收斂了,因此可以通過概率的模擬試驗來實現(xiàn)。
2、有限狀態(tài)機的概率轉(zhuǎn)移思想
假設(shè)dp(i,j)為1級升到5級的平均次數(shù),則有以下遞推式:
dp(1,5) = 1.0 * dp(2,5) + 0.0 * dp(1,5)+1
dp(2,5) = 0.8 * dp(3,5) + 0.2 * dp(1,5)+1
dp(3,5) = 0.6 * dp(4,5)+ 0.4 * dp(1,5)+1
dp(4,5) = 0.4 * dp(5,5) + 0.6 * dp(1,5)+1
其中dp(5,5)=0;
求解上述方程組,得到dp(1,5)即為答案,答案為17.0833.
代碼:
1、蒙特卡洛模擬試驗
#include <iostream> #include <time.h> #include <stdlib.h> #include <iomanip>using namespace std;bool isUpgrade(double p){double prob=rand()/(double)(RAND_MAX);if(prob<=p)return true;elsereturn false; }double ExpectedUpgradeTimes(double *P,int n){const int TIMES=100000000;int grade=0;int times=0;int total=0;double expect=0;for(int i=0;i<TIMES;i++){grade=0;times=0;while(grade!=n-1){if(isUpgrade(P[grade]))grade++;elsegrade=0;times++;}total+=times;}expect=(double)total/TIMES;return expect; }int main(){srand((unsigned int)time(NULL));double P[]={1.0,0.8,0.6,0.4};int len=sizeof(P)/sizeof(P[0]);double exp=ExpectedUpgradeTimes(P,len+1);cout<<fixed<<exp<<endl;cout << setprecision(2) << exp << endl;return 0; }2、動態(tài)規(guī)劃
#include <iostream> #include <time.h> #include <stdlib.h> #include <iomanip>using namespace std;double ExpectedUpgradeTimes_DP(double *P,int n){double A[n],B[n];double p[n];p[1] = 1.0;p[2] = 0.8;p[3]=0.6;p[4] =0.4;for(int i=4;i>=1;i--){A[i] = 1+A[i+1]*p[i];B[i] = p[i]*B[i+1]+1-p[i];cout<<A[i]<<" "<<B[i]<<endl;}double t = A[1]/(1-B[1]);return t; }int main(){srand((unsigned int)time(NULL));double P[]={1.0,0.8,0.6,0.4};int len=sizeof(P)/sizeof(P[0]);double exp=ExpectedUpgradeTimes_DP(P,len+1);cout<<fixed<<exp<<endl;cout << setprecision(2) << exp << endl;return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/AndyJee/p/4755388.html
總結(jié)
以上是生活随笔為你收集整理的(算法)宝石升级问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: iOS 高阶
- 下一篇: 动态规划算法的应用模型
