电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

算法与数据结构C语言习题参考答案69章VIP免费

算法与数据结构C语言习题参考答案69章_第1页
1/6
算法与数据结构C语言习题参考答案69章_第2页
2/6
算法与数据结构C语言习题参考答案69章_第3页
3/6
1 1. 现在有一个已排序的字典,请改写二分法检索算法,使之当排序码key 在字典中重复出现时算法能找出第一个key 出现的元素下标(用*position 来保存)。保持算法时间代价为 O(log n)。 【答】 思路 一般的二分法检索算法只要找出关键码key 在字典中的一个下标。在比较的过程中,一旦发现相等,记录下当前下标mid 就符合要求。程序如下: 数据结构 字典采用 6.1.4 节中的顺序表示法。 typedef int KeyType; typedef int DataType; 二分法检索算法 int binarySearch(SeqDictionary * pdic, KeyType key, int * position) { int low, mid, high; low = 0; high = pdic->n - 1; while (low <= high){ mid = (low + high) / 2; if (pdic->element[mid].key = = key) { *position = mid; return TRUE; } else if (pdic->element[mid].key > key) high = mid - 1; else low = mid + 1; } *position = low; return FALSE; } 改写后的算法想要找出关键码key 在字典中第一次出现的下标。在比较中,如果遇到相等(key 与 pdic->element[mid].key 相等),则需要分情形讨论。 (1)如果当前下标mid 等于 0,或者 key 与 pdic->element[mid-1].key 不等,那么 mid一定是 key 第一次出现的下标,返回 mid 即可。 (2)如果情形(1)不成立,那么 mid 一定大于等于 key 第一次出现的下标,需要在low和 mid-1 之间继续进行搜索,找出key 第一次出现的下标。 下面算法中,加粗的部分是对原算法的修改。 修改后的二分法检索算法 int binarySearch1(SeqDictionary * pdic, KeyType key, int * position) { /*算法结束后,*position 存放 key 第一次出现的下标*/ int low, mid, high; low = 0; high = pdic->n - 1; 2 while (low <= high){ mid = (low + high) / 2; if (pdic->element[mid].key = = key) { if (mid = = 0 || key != pdic->element[mid - 1].key) { *position = mid; return TRUE; } /*此时mid 就是key 在字典中第一次出现的下标*/ else high = mid - 1; /*在左半段继续搜索*/ } else if (pdic->element[mid].key > key) high = mid - 1; else low = mid + 1; } *position = low; return FALSE; } 代价分析 该算法的时间...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

算法与数据结构C语言习题参考答案69章

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部