离散化是程序设计中一个常用的技巧,它可以有效的降低时间复杂度。其基本思想就是在众多可能的情况中,只考虑需要用的值。离散化可以改进一个低效的算法,甚至实现根本不可能实现的算法。要掌握这个思想,必须从大量的题目中理解此方法的特点。例如,在建造线段树空间不够的情况下,可以考虑离散化。

有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理。当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。

例如:

91054与52143的逆序对个数相同。

设有4个数:

1234567、123456789、12345678、123456

排序:123456<1234567<12345678<123456789

=>1<2<3<4

那么这4个数可以表示成:2、4、3、1

思路是:先排序,再删除重复元素,最后就是索引元素离散化后对应的值。

假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:

sort(sub_a,sub_a+n);

int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数

for(i=0;i

a[i]=lower_bound(sub_a,sub_a+size,a[i])-sub_a + 1;//k为b[i]经离散化后对应的值

对于第3步,若离散化后序列为0,1,2,...,size - 1则用lower_bound,从1,2,3,...,size则用upper_bound。其中lower_bound返回第1个不小于b[i]的值的指针,而upper_bound返回第1个大于b[i]的值的指针,当然在这个题中也可以用lower_bound然后再加1得到与upper_bound相同结果,两者都是针对以排好序列。使用STL离散化大大减少了代码量且结构相当清晰。[1]

如果说OIBH问得最多的问题是二分图,那么问得最多的算是离散化了。对于什么是离散化,有各种说法,比如“排序后处理”、“对坐标的近似处理”等。[2]

离散化是程序设计中一个常用的技巧,它可以有效的降低时间和空间复杂度。下面是用来说明如何运用离散化改进一个低效的的算法的三个例子。

相关查询: 离散化 程序设计 复杂度 不可能 情况下
最新查询:花开乱世 Blossom in Shanghai 转变到 Stephan yu-yu 聚少离多 中国能源化工金三角 梅里特 拉贾斯坦邦 毛阳镇 地一大道 媒介物 台中师范 不由得 Erdberg 爆炸动力学 回忆起 深黄色 时代周刊 pockets 管碟法抗生素效价测量 夺宝旋风 伊朗高原 平乐县 无师自通 killed 著作权法 Trampoline 大华·西溪风情 Linux 凯达格兰 volcanic 烨世兵权 南昌新军起义 摩诃摩耶 Doctor Yellow 斯瓦希里语 傲世法则 富甲天下 青溪鳞毛蕨 Pissarro 囚徒:沈醉讲述高墙内的战俘生活 阿佤山 西安交通大学研究生教育教材 lecture 沙头角 五笔识别码 charisma 玄阙州 球果木蓝亚属 unhealthy 一塌糊涂 市场趋势 POWERED 唐海松 网球队 脱氧胆酸钠 转矩流变仪 Fighter 优秀报关员手册(第二辑) 仿生学 宾夕法尼亚洲 神仙下凡 横行一时 潜藏在 小规模 Autodesk 威斯康星冰期 建筑设计 人工髋关节置换技术管理规范(2012版) 张松桥 半自动 波兰圣十字工业大学(凯尔采) 闻一知十 正当手段 中国科学技术大学生物科学实验中心 论黑格尔的中国文化观 昌乐信息港 段季红 离散化
友情链接: 知道 电影 百科 好搜 问答 微信 值得买 巨便宜 天天特价 洛阳汽车脚垫 女装 女鞋 母婴 内衣 零食 美妆 汽车 油价 郑州 北京 上海 广州 深圳 杭州 南京 苏州 武汉 天津 重庆 成都 大连 宁波 济南 西安 石家庄 沈阳 南阳 临沂 邯郸 保定 温州 东莞 洛阳 周口 青岛 徐州 赣州 菏泽 泉州 长春 唐山 商丘 南通 盐城 驻马店 佛山 衡阳 沧州 福州 昆明 无锡 南昌 黄冈 遵义
© 2025 haodianxin 百科 豫ICP备14030218号-3 消耗时间:0.090秒 内存2.84MB