- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学生选课系统的算法研究.ppt
应用场景分析 —— 数据分析 选课信息的数据结构设计是算法实现的关键: 由于在预选阶段选课与退课都很频繁,而且每位同学选课的数目是不确定的。因此选课信息的数据结构要能支持频繁的插入与删除操作。 * * 学生选课系统的算法研究 2007元培 杨璐 应用场景分析 ——任务的提出 模拟学生选课系统。在预选阶段同学可以任意选课退课,选课的同时要输入意愿点。专业课先到先得,人满为止;通选课在预选阶段不限人数,选课平台关闭后按照意愿点从高到低排序,取一定的名额。 要求算法能够按照课程号查到选该课的学生id,也可以按学生的id查到该人的选课情况。 应用场景分析 —— 数据基础 已经存在完整的学生档案数据库(包括id、姓名、院系等等基本信息)。实现按学号索引。 已经存在课程(班级)档案数据库(包括课程号、教师、上课地点、人数限制等等信息)。实现按课程编号索引。 可以认为学生档案信息和课程信息是相对静态的。支持批量的追加操作。在每个记录中包含一个删除标记int delete。置为0为未删,置为1为已删。避免偶尔的删除操作对整个数据库带来的影响。 数据结构设计 选课时对课程进行管理,因此构建通过课程查找学生id的索引。 Class_id *class_set 0172483 0248532 0259098 ….. Maxnum=200(课程最大容纳量) Actualnum=150(目前选课人数) 存放选课的学生信息的空间(可采用数组、链表实现) 数组数据结构 学生信息包括两部分:id与意愿点。 struct std { int id; int point; } struct std * list = ( struct std * ) malloc (sizeof (struct std ) * maxnum * 2 ); 这里因为在预选阶段选课人数可以超出班级最大容纳人数,但是根据实际情况又不会无限制的超出。所以我们将结构体数组的长度设为maxnum*2。 数组的算法 预选阶段,每增加一个学生插在数组尾部,每删除一个遍历数组找到此人,并将其后的依次向前挪一位。插入一个学生n++,删除一个学生n--。 预选阶段结束,选课系统关闭后,选该课程的学生不再变动。这时候数组中的学生是无序的。用冒泡法按意愿点对数组中的学生进行排序,取前maxnum位作为最终名单。 链表结构 struct std { int id; int point; struct std * next; } 预选阶段,每增加一个学生插在链表尾部,每删除一个遍历链表找到此人,并删除之。插入一个学生n++,删除一个学生n--。 预选阶段结束。因为链表难以实现排序操作,所以我们只好把链表中的内容复制到一个数组中(同时释放原链表),再用冒泡法按意愿点对数组中的学生进行排序,取前maxnum位作为最终名单。 数组PK链表 时间代价: 插入操作:直接插在队尾,O(1) 直接插在表尾,O(1) 删除操作:遍历数组找到需删的id,删除后 将其后的各个数字前移一位。 O(n) 遍历链表找到需删的id,然后删除O(n) 排序操作:冒泡法O(n2) 复制链表加冒泡法O(n)+O(n 2)=O(n2) 空间代价: 数组结构体有两个数据项,链表结构体有三个数据项,但数组总长度为链表的两倍(认为链表长度平均为maxnum)。所以二者相差不大。 综上所述,两种数据结构没有明显的优劣之分。 更好的方法——优先队列 struct std { int id; int point; } 最小值在堆的最上方。当插入了maxnum个学生时(班满时),将堆顶元素的意愿点输出,作为意愿点的下限。这时还没有选此课的学生就会知道,如果自己所能给出的意愿点小于这个值,就肯定选不上这门课。这样可以避免盲目选课,浪费意愿点。 当班满时插入一个新学生,如果他的意愿点小于等于堆顶元素,则不予插入;如果大于堆顶元素,就删除堆顶元素,插入新元素,同时输出新的堆顶元素的意愿点,作为意愿点下限值。 插入和删除的时间代价都是O(log2n),而且省去了冒泡排序O(n2)的时间。空间代价与数组相同。 注意:因为意愿点有可能重复,所以冒泡法或优先队列产生的都是不升序或不
您可能关注的文档
- 大中型沼气及秸秆气化站的安全管理.doc
- 大众车系CAN数据传输系统原理应用与故障诊断(修改).doc
- 大型FPGA设计中的多时钟设计策略.doc
- 大型WEB网站架构深入分析_线程和多线程.doc
- 大型公共建筑冷机cop指标:实测与应用_secret.doc
- 大型火电厂锅炉轴流式引风机抢风改进方法研究(邓顺勇).doc
- 大型进口齿轮箱的自主维修及国产化探索.doc
- 大学C程序设计教程-西安交通大学.ppt
- 大学女生头发长度和染发与人格的相关性研究.doc
- 大学毛概课后习题及其准确答案.doc
- 2024年火电电力职业鉴定考前冲刺测试卷及答案详解【基础+提升】.docx
- 2024年火电电力职业鉴定考前冲刺测试卷(实用)附答案详解.docx
- 2024年火电电力职业鉴定考前冲刺测试卷(综合题)附答案详解.docx
- 2024年火电电力职业鉴定考前冲刺测试卷附答案详解【满分必刷】.docx
- 2024年火电电力职业鉴定考前冲刺测试卷(综合卷)附答案详解.docx
- 2024年火电电力职业鉴定考前冲刺练习及完整答案详解【各地真题】.docx
- 2024年火电电力职业鉴定考前冲刺测试卷含答案详解(B卷).docx
- 2024年火电电力职业鉴定考前冲刺测试卷附答案详解(培优A卷).docx
- 2024年火电电力职业鉴定考前冲刺测试卷附参考答案详解【夺分金卷】.docx
- 2024年火电电力职业鉴定考前冲刺测试卷及完整答案详解(全优).docx
最近下载
- 高中数学第四章定积分4.3定积分的简单应用4.3.2简单几何体的体积教案.docx VIP
- TZSQX008-2020建设工程全过程质量行为导则.docx VIP
- 2024年山东省高中学业水平合格考生物试卷试题(含答案详解).docx VIP
- 高级教师职称评审答辩简答题.doc VIP
- 禁毒情报学习通超星期末考试答案章节答案2024年.docx VIP
- 北京市2024年艺术类专业考生综合分分数分布(一分一段表).pdf VIP
- 2025年乳腺癌诊疗指南(doc14页) .pdf VIP
- 篮球的起源与发展ppt课件.pptx VIP
- 网上调查赚钱经验及技巧总结.doc VIP
- ALPHA AS100说明书-V102用户手册.pdf
文档评论(0)