编程珠玑 第二章 习题6~9

本文详细阐述了多映射multimap数据结构的构建与使用方法,包括按键编码排序与名字字典排序,以及二分搜索查询。接着介绍了利用桶排序原理实现矩阵转置的算法,通过顺序读取矩阵元素并构建桶结构,最终得到转置矩阵。此外,还讨论了实数集合排序、前k个实数求和及判断是否存在特定子集的条件,以及顺序搜索与二分搜索的效率对比。
  • 习题6:定义一个多映射multimap数据结构:map<int, list<string>  >。首先把名字的按键编码(int型)作为名字的标识,根据标识进行排序,当标识相同时,根据名字排序(字典排序);multimap结构中第一位存储名字标识,第二位存储名字,标识相同的名字构成链表,由于multimap本身的各个条目会自动排序,所以省略了标识间的排序;当以按键编码为参数进行查询时,选择二分搜索方法进行结果输出。
  • 习题7:利用桶排序算法原理,因为数据在磁带中存储,所以只能顺序读取矩阵元素,构建和矩阵列数量相同的桶,桶内部选择链表结构,顺序存储。矩阵每行的每个元素放入不同的桶中,形成自然的顺序结构,当所有矩阵元素都存储到对应的桶中后,顺序读取每一个桶和每一个桶中的元素,最后的结果就是原来矩阵的转置。
  • 习题8:先将给定的n元实数集合排序,可以选择快排方法,然后计算前k个实数的和,如果结果小于t,则存在题目要求的k元子集。
  • 习题9:对于顺序搜索,搜索k次的时间复杂度为O(kn);若采用二分搜索则需要先排序,则二分搜索的时间复杂度为O(nlog10(n)+log2(n))。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值