离散优化总结
离散优化是一种常见的高效数据结构,它通过建立数据与存储结构(数组)之间(不一定)一一对应的映射关系来达到对复杂数据的优化。
离散优化最重要的一点是建立映射,对于特殊的线段、点而言,这些映射可以是对一个区间的映射,即将某段线或者某块区域映射到数组里面去,从而在计算时降低时间复杂度。
Hash优化:是对于字符串和数字的一种优化方式。它通过将数据映射到数组内的某个元素从而达到节省空间的效果。
根据hash算法的不同,可能会引起数据的碰撞,即hash(key1)==hash(key2),会使得数据存储出现错误。有两个方法可以解决:
- 拉链法,将hash所对密码指向链表头,每次查找元素遍历整串链表,直到找到该元素为止(编程复杂度较高)
- 开地址法,当hash所对密码冲突时,将数据存入另外的位置(可以是下一个空位置,也可以是计算出的任意位置),当然如果使用线性开地址法,只要有一个数据碰撞,那么其余所有数据都很有可能进行至少一次碰撞,非常耗费时间。所以我们运用hash算出另一个位置并存储:
while(hashtable[ad]!=0){
ad+=ad%3+1;//可以是异于主hash算法的另一hash算法
}
通常Hash算法分为两个板块:
- 查找元素,hash(key)对应的不一定是目标元素,需要对目标进行搜索,推荐使用开地址法进行搜索
- 插入元素,与查找同理,在插入之前必须检查此元素是否已被插入,再用开地址法存入相应的地址
Hash可用的构造方法
- 直接定址
- 取模法
- 平均取中值
- 随机数
- 数字分析法,将最有代表特色的位置作为特征码
- 折叠法,将数拆分成几部分并求和
- 基数法,将低进制数当作高进制数转化为原进制的数,并进行分析,取特征码(两个进制之间应该是互质的关系)
1640: 线段覆盖
时间限制:1 Sec 内存限制: 128 MB
提交:43 解决: 27
[提交][状态][讨论版]
题目描述
X轴上方有若干条平行于X轴的线段,求这些线段能覆盖到的X轴的总长度?
输入
第一行一个数n(n<=1000),表示线段的个数;
接下来n行,每行两个整数ai,bi
(-10^8<=ai,bi<=10^8),代表一个线段的两个端点。
输出
输出覆盖x轴的长度。
样例输入
2
10 12
2 4
样例输出
4
将每个点存入数组进行排序,然后遍历所有线段,将线段所覆盖到的点全部记录,输出结果
Comments | NOTHING