#(离散化基础)知识扩展:利用离散化原理进行算法优化

(大量内容来自百度)

离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。

通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如:

原数据:1,999,100000,15;处理后:1,3,4,2;

原数据:{100,200},{20,50000},{1,400};

处理后:{3,4},{2,6},{1,5};

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

例1

给定平面上n个点的坐标,求能够覆盖所有这些点的最小矩形面积。其中,矩形可以倾斜放置,边不必平行于坐标轴

UVA10173 [2]

这里的倾斜放置很不好处理,因为我们不知道这个矩形最终会倾斜多少度。假设我们知道这个矩形的倾角是α,那么答案就很简单了:矩形面积最小时四条边一定都挨着某个点。也就是说,四条边的斜率已经都知道了的话,只需要让这些边从外面不断逼近这个点集直到碰到了某个点。你不必知道这个具体应该怎么实现,只需要理解这可以通过某种方法计算出来,毕竟重点在下面的过程。

我们的算法很显然了:枚举矩形的倾角,对于每一个倾角,我们都能计算出最小的矩形面积,最后取一个最小值。

这个算法是否是正确的呢?我们不能说它是否正确,因为它根本不可能实现。矩形的倾角是一个实数,它有无数种可能,你永远不可能枚举每一种情况。我们说,矩形的倾角是一个“连续的”变量,它是我们无法枚举这个倾角的根本原因。我们需要一种方法,把这个“连续的”变量变成一个一个的值,变成一个“离散的”变量。这个过程也就是所谓的离散化。

我们可以证明,最小面积的矩形不但要求四条边上都有一个点,而且还要求至少一条边上有两个或两个以上的点。试想,如果每条边上都只有一个点,则我们总可以把这个矩形旋转一点使得这个矩形变“松”,从而有余地得到更小的矩形。于是我们发现,矩形的某条边的斜率必然与某两点的连线相同。如果我们计算出了所有过两点的直线的倾角,那么α的取值只有可能是这些倾角或它减去90度后的角(直线按“\”方向倾斜时)这么C(n,2)种。我们说,这个“倾角”已经被我们“离散化”了。

离散化链接:

https://blog.csdn.net/xiangaccepted/article/details/73276826

https://www.cnblogs.com/sun-of-Ice/p/9419857.html

实例代码:int n, a[maxn], t[maxn];
//这里以下标1为序列的起点,一般情况下从0开始也可以
for(int i = 1;i <= n;i++)
{
    scanf("%d", &a[i]);
    t[i] = a[i];//t是一个临时数组,用来得到离散化的映射关系
}
//下面使用了STL中的sort(排序),unique(去重),lower_bound(查找)函数
sort(t + 1, t + n + 1);//排序
int m = unique(t + 1, t + 1 + n) - t - 1;//去重,并获得去重后的长度m
for(int i = 1;i <= n;i++)
{
    a[i] = lower_bound(t + 1, t + 1 + m, a[i]) - t;//通过二分查找,快速地把元素和映射对应起来
}

原文地址:https://www.cnblogs.com/little-cute-hjr/p/11422380.html

时间: 2024-10-16 00:05:54

#(离散化基础)知识扩展:利用离散化原理进行算法优化的相关文章

硬件基础知识与底层工作原理

1.进入虚拟机(vm)的BOIS,组合键 Ctrl+Atl+Insert2.运算器,控制器,存储器(RAM),输入,输出,北桥,南桥,ROM,缓存,中断,寄存器3.程序局部性原理(时间与空间的局部性)4.机器语言-〉微码(汇编语言)-〉编译器(编译成机器语言)5.高级语言-〉编译--〉机器语言6.API(库),ADI7.硬件架构:ARM系列,X86,安腾,alpha,UltraSparc(sun),Power(IBM),M68k(M68000),PowerPC8.操作系统:Windows,Lin

C#基础知识---扩展方法

一.简介 扩展方法为现有的类型(.Net类型或者自定义类型)扩展应该附加到该类型中的方法. 二.基本原则 定义一个非嵌套.非泛型的静态类 扩展方法是静态的 扩展方法至少要有一个参数,该参数类型是要扩展的类型 第一个参数必须加上this关键字作为前缀 第一个参数不能用其他任何修饰符(如不能使用ref out等修饰符) 第一个参数的类型不能是指针类型 三.例子 例1:为.Net类型添加扩展方法 1 using System; 2 3 namespace ExtensionMethod 4 { 5 c

网站优化的艺术与科学之工具和基础知识

最近在阅读一本网站优化的书,名叫<深入理解网站优化:提升网站转化率的艺术与科学>,本书是对网站优化的4个学科(Web分析.网站易用性.在线营销和网站测试)的最佳实践.网站优化是一门新颖的艺术,结合前面这四门学科完成对网站的测试和分析,更好地吸引和转化访问者. 实施本书中的最佳实践和测试思路,就能以多种方式改进网站:吸引访问者,使他们经常回到网站中,改进转化率和成功的其他度量因素,最终改进在线业务的财务收入. 一.工具 1)Web分析工具 1.免费和便宜的分析工具:Google Analytic

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

php基础知识(语法与原理)

一.php简介 PHP超文本预处理器.是嵌入HTML文件中的服务器脚本程序. PHP代码标记:<?php -. ?> PHP文件的扩展名:.php PHP文件的执行:必须从域名开始访问 PHP每条语句必须以英文(;)结束 二.php网页基础知识 ①  IP地址 IP地址分为v4.v6两个版本,v4长度为32位2进制码,v6为128位2进制码.v4版本IP在2010年左右已经用完,主要格式是192.168.4.238(点分十进制法),由四段组成,每段8位二进制,用十进制表示的取值范围为:0-25

微机原理与接口(1)——基础知识

 微机的基本构成:     硬件设备:         由运算器.控制器.存储器.输入.输出设备: 软件    :         系统软件.程序设计语言.应用软件: CPU:整个计算机硬件的控制指挥中心.     构成:        运算:算术逻辑单元(Arithmetic Logic Unit,ALU).Acc(Accumulator)累加器.状态寄存器(Flag Register,FR)和寄存器组(Register Set,RS).        控制:程序计数器(Program Cou

软考基础知识—编译原理

编译原理和组成原理这一块,是我们比较头疼的.这一块接触的比较少,所以再理解起来的时候,就比较困难.但是所有的知识都是相联系的,万变不离其宗. 例如,学习组成原理的时候,我们联系我们以前的拆装机 ,学习编译原理的时候,我们联系我们学的java和.Net等编程语言等. 由于,计算机的硬件只能识别0和1,组成的机器指令程序,所以计算机编程语言由低级语言(机器语言.汇编语言)发展到了我们现在用的高级语言(java..net.VB.C++等) . 为什么我们说这一块的学习,要联系我们的java呢? Jav

XML基础知识

1.XML基础2.XML语法3.XML DOM4.Javascript解析XML文档 1.XML基础eXtensible Markup Language 可扩展标记语言XML是一种平台无关的用于携带和传送数据的方法. ~~~~xml主要是描述数据是什么,一般没有数据如何呈现的信息,有别于HTML,HTML可以说是xml的一种实现.(注:xhtml才是xml的一种实现) xml文档可以用IE 文本编辑器或者专门的XML编辑器浏览 ~~~xml不同平台的数据交换,但不适合大批量数据的存储与处理(有别

WSFC基础知识奠基

前面主要和大家介绍了一下群集的种类,以及一些群集通用的基本知识,本章开始我们将专注于微软故障转移群集的深入研究与理论解析 微软故障转移群集即是我们上篇文章介绍的,一个典型的高可用性群集解决方案,它内置在Windows Server的角色与功能里面,不需要安装额外工具,故障转移群集通常情况下都是主从工作的模式,即一个群集应用同时只有一个节点对外提供服务,然后故障转移群集利用心跳检测机制检测节点存活状态,一旦检测到节点宕机,会通过查询群集数据库,来讲宕机节点承载的群集应用进行上线 同时故障转移群集也