- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QM算法源代码和说明.docx
QM算法说明
需求分析
本算法要求输入一最小项和无关项的待化简表达式,通过程序处理输出化简后的结果。
算法流程
程序首先要求用户输入待化简表达式的变量数,然后要求用户逐个输入值为1的项,以2表示输入结束,再要求用户逐个输入无关项同样以2结束。程序将用户输入的所有数据储存在一个数据容器vector中,并将相关项单独存在另一个vector中。
然后程序通过循环遍历所有相关项,将相邻的项合并成蕴涵项存入新建的vector中,无法再合并的项显然为本源蕴涵项,存入专门的容器。之后再对新建的vector中的蕴涵项重复上述操作,直到找到所有的本源蕴涵项。由于变量最多为10个,故合并最多进行10次,故所有合并可在一个10元vector数组内完成。
当之前的工作完成时,此时显然已找到所有的本源蕴涵项,此时遍历之前存储的相关项,统计被覆盖的次数并输出只被覆盖一次的项所属的本源蕴涵项(皆为本质本源蕴涵项)。之后再从vector尾部开始输出其他本源蕴涵项直到所有的相关项都被覆盖为止。
运行结果
测试数据采用《现代逻辑设计》(第二版)P86的样例,F=Σm(4,5,6,8,9,10,13)+d(0,7,15);
结果并非最优的,是因为最后没有寻找最小覆盖导致的。
附:C++源代码
#include iostream
#include cmath
#include cstdlib
#include vector
//#include fstream
using namespace std;
//ofstream out(c://a.log);
bool comp(int n, char* a, char* b)
{
for(int i=0; in; i++)
{
if(a[i]!=b[i] (a[i]!=-b[i]!=-))return false;
}
return true;
}
int implicant(int n, char*a, char*b)
{
int count = 0,temp;
for(int i=0; in; i++)
{
if(a[i]!=b[i])
{
count++;
temp = i;
}
}
if(count == 1)return temp;
else return -1;
}
bool cointain(int n, char* a, char* b)
{
for(int i=0; in; i++)
{
if(a[i]!=b[i] (a[i]!=-))return false;
}
return true;
}
int main()
{
int i,j,k,l,n,count,tmp;
char *temp,c;
vector char* v[10];
vector char* relative;
vector char* prime;
vector char* result;
bool flag[2];
cout输入变量数:endl;
cinn;
temp = new char[n];
cout请输入最小项(2结束):endl;
flag[0] = true;
while(flag[0])
{
for(i = 0; in; i++)
{
cintemp[i];
if(temp[i]!=0 temp[i]!=1)
{
flag[0] = false;
break;
}
}
if(flag[0])
{
v[0].push_back(new char[n]);
relative.push_back(new char[n]);
strcpy(v[0].back(),temp);
strcpy(relative.back(),temp);
}
}
cout请输入无关项(2结束):endl;
flag[0] = true;
while(flag[0])
{
for(i = 0; in; i++)
{
cintemp[i];
if(temp[i]!=0 temp[i]!=1)
{
flag[0] = false;
break;
}
}
if(flag[0])
{
v[0].push_back(new char[n]);
strcpy(v[0].back(),temp);
}
}
for(i = 0; i10; i++)
{
if(v[i].empty())break;
for(j = 0; jv[i].size(); j++)
{
您可能关注的文档
- Lecture10-11,TrainingandDevelopment.ppt
- lecture1GuidingLesson.ppt
- Lecture1Stylistcis.ppt
- LED灯串绕线机与无刷电机价格.docx
- LED驱动精准控制方式.docx
- lesson8Adsorption.ppt
- LF-5型数控沥青混合料快速分离机.doc
- Linux如何配置nVIDIA显卡驱动.doc
- Linux设备模型之platform总线.doc
- Linux设备驱动之platform总线.doc
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
文档评论(0)