数据结构与算法--第12讲.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法--第12讲.ppt

一、稳定伴侣问题 设有n个男孩m1,m2,…,mn与n个女孩w1,w2,…, wn。 每一个男孩mi都依照他喜爱这n个女孩的程度列成一张表,最喜欢的女孩排在第1位,最不喜爱的女孩排在第n位;同样地,每个女孩wi也按照她喜爱n个男孩的程度列成一张表。 要求把男孩与女孩进行配对,使得:如果mp与wq在一对的话,那么满足如下条件: 对mp的喜爱表格中排在wq之前的女孩而言,她的伴侣在她的表格中一定排在mp之前。 对wq的喜爱表格中排在mp之前的男孩而言,他的伴侣在他的表格中一定排在wq之前。 不稳定情况 m 分析问题 第一步:初始化关系矩阵 Matrixint man(n, n), woman(n, n); // 矩阵类模板 templateclass ElemType class Matrix { protected: ElemType *elems; // 存储矩阵元素 int rows, cols; // 矩阵行数和列数 public: ElemType operator()(int i, int j); // 重载函数运算符!!! 分析问题 第二步:将男孩入等待栈,准备依次配对; 分析问题 第三步:对女孩构建rank表。 如果woman(i, j)=w,则rank(i,w)=j 分析问题 第四步,开始配对。 分析问题 取栈顶元素4 分析问题 取栈顶元素3 分析问题 取栈顶元素2 分析问题 取栈顶元素1 分析问题 看下一个next[] 分析问题 重新看4的下一个 算法实现 while (!waiting.Empty()) { int boy, girl; waiting.Top(boy); // 取出等待婚约的男孩 girl = man(boy, next[boy]++); // 当前男孩boy中意的女孩 if (womanEngagement[girl] == FREE) { // 当前女孩girl还没有婚约 womanEngagement[girl] = boy; manEngagement[boy] = girl; // 配对 waiting.Pop(boy); // 男孩boy出栈 } else 算法实现 else if (rank(girl, boy) rank(girl, womanEngagement[girl])) {//女孩与男孩womanEngagement[girl]解除婚约,改与男孩boy配对 waiting.Pop(boy); waiting.Push(womanEngagement[girl]); // 男孩womanEngagement[girl]重回等待栈中 womanEngagement[girl] = boy; manEngagement[boy] = girl;// 配对 coutelse: boy girlendl; } } 二、广义表 General List 由于广义表本属线性类型的数据结构,它和数组类似,每个数据元素本身又可以是一个数据结构,因此在教材中和“数组”合为一章。 但广义表比数组更为复杂,它兼有“多层次”的特点,特别是它的存储表示和操作的实现和树的操作极为类似。 人工智能等领域的LISP语言使用的一种数据结构,是对线性表的一个推广。 二、广义表 General List 定义: n(?0)个表元素组成的有限序列 记作 GL = (a1, a2, a3, …, an) 说明: GL是表名,ai是表元素,它可以是表(称为子表),可以是数据元素(称为原子)。 n为表的长度。n=0的广义表为空表 例如: A = ( ) 空表 无表头,无表尾,表长为0; B = (x,y,z) 单元素表 表头为x,表尾为(y,z),表长为3; C = (B,y,z) 非单元素表 表头为B,表尾为(y,z),表长为3; D = (x,(y,z)) 非单元素表 表头为x,表尾为((y,z)),表长为2; E=( x,E ) 递归表 表头为x,表尾为(E),表长为2。 广义表的深度 广义表的深度 表头和表尾 若广义表不空,则可分成表头和表尾,反之,一对表头和表尾可唯一确定广义表。 对非空广义表:称第一个元素为GL的表头,其余元素组成的表称为GL的表尾; B = (a,(b,c,d)) 表头:a 表尾 ((b,c,d)) 即 HEAD(B)=a, TAIL(B)=((b,c,d)), C = (e) 表头:e 表尾 ( ) D = (A,B,C,f )

文档评论(0)

tangtianxu1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档