假设目前的状态是已经执行完程序1的第i条指令,并且执行完了程序2的第j条指令,那么记到达该状态的概率为p[i][j]
那么到达p[i][j]状态有两种可能,一种是程序1已经执行了i-1条指令,程序2执行了j条指令,另一种是程序1执行了i条指令,程序2执行了j-1条指令
所以我们有
if (i < p_line1&&j < p_line2){
p1 = 0.5*prob[i - 1][j]; p2 =0.5* prob[i][j - 1];
}
else if (i < p_line1){//如果程序2全部执行完了,那么执行程序1的概率不变了
p1 = prob[i - 1][j]; p2 = 0.5*prob[i][j - 1];
}
else if (j < p_line2){//如果程序1全部执行完了,那么执行程序2的概率不再变化
p1 = prob[i - 1][j] * 0.5; p2 = prob[i][j - 1];
}
else{
p1 = prob[i - 1][j]; p2 = prob[i][j - 1];
}
prob[i][j] = p1 + p2;
p_line1表示的是程序1的总指令条数,p_line2表示的程序2的总指令条数
源代码(附注释)如下:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int t;
int number1, number2;
string word[3];
int line1, line2;
typedef struct{
bool is_const;
string name;
double value;
}var;
typedef struct{
int index1;
int index2;
char op;
}com;
com command[2][110];
var variable[150];
double prob[110][110],p1,p2,p;
double excute[110][110][40];
void resolve2(int aim,int source,int machine,char op,int current){
command[machine][current].index1 = a