热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

離散化

http:blog.csdn.netviweeiarticledetails5025970離散化轉自(Matrix67)對於「什麼是離散化」࿰
http://blog.csdn.net/viweei/article/details/5025970 

離散化

轉自(Matrix67 )

對於「 什麼是離散化」 ,搜索帖子你會發現有各種說法,比如「 排序後處理」 、「 對坐標的近似處理」等等。哪個是對的呢?哪個都對。關鍵在於,這需要一些例子和不少的講解才能完全解釋清楚。

離散相對於連續而言,連續通俗來講指平滑的過渡,比如1 和2 之間可以有無數的數,可以無限分割。而離散指數據的不連續性,比如1 ,2 ,3 。。。。這樣畫出的曲線是不連續的。

離散數學是數據結構的基礎,其實是一切馮氏結構計算機的理論基礎。

離散化是程序設計中一個非常常用的技巧,它可以有效的降低時間復雜度。其基本思想就是在眾多可能的情況中「 只考慮我需要用的值」 。下面我將用三個例子說明,如何運用離散化改進一個低效的,甚至根本不可能實現的算法

《算法藝術與信息學競賽》中的計算幾何部分,黃亮舉了一個經典的例子,我認為很適合用來介紹離散化思想。題目意思很簡單,給定平面上n 個點的坐標,求能夠覆蓋所有這些點的最小矩形面積。這個問題難就難在,這個矩形可以傾斜放置(邊不必平行於坐標軸)。

  

這裡的傾斜放置很不好處理,因為我們不知道這個矩形最終會傾斜多少度。假設我們知道這個矩形的傾角是α ,那麼答案就很簡單了:矩形面積最小時四條邊一定都 挨著某個點。也就是說,四條邊的斜率已經都知道了的話,只需要讓這些邊從外面不斷逼近這個點集直到碰到了某個點。你不必知道這個具體應該怎麼實現,只需要理解這可以通過某種方法計算出來,畢竟我們的重點在下面的過程。

我們的算法很顯然了:枚舉矩形的傾角,對於每一個傾角,我們都能計算出最小的矩形面積,最後取一個最小值。

這個算法是否是正確的呢?我們不能說它是否正確,因為它根本不可能實現。矩形的傾角是一個實數,它有無數種可能,你永遠不可能枚舉每一種情況。我們說,矩形的傾角是一個「 連續的」 變量,它是我們無法枚舉這個傾角的根本原因。我們需要一種方法,把這個「 連續的」 變量變成一個一個的值,變成一個「 離散的」 變量。這個過程也就是所謂的離散化。

我們可以證明,最小面積的矩形不但要求四條邊上都有一個點,而且還要求至少一條邊上有兩個或兩個以上的點。試 想,如果每條邊上都只有一個點,則我們總可以把這個矩形旋轉一點使得這個矩形變「 松」 ,從而有余地得到更小的矩形。於是我們發現,矩形的某條邊的斜率必然與某兩點的連線相同。如果我們計算出了所有過兩點的直線的傾角,那麼α 的取值只有可能是這些傾角或它減去90 度後的角(直線按「/」 方向傾斜時)這麼C(n,2) 種。我們說,這個「 傾角」 已經被我們 「 離散化」 了。雖然這個算法仍然有優化的余地,但此時我們已經達到了本文開頭所說的目的。

對於某些坐標雖然已經是整數(已經是離散的了)但范圍極大的問題,我們也可以用離散化的思想縮小這個規模。最近搞模擬賽Vijos 似乎火了一把,我就拿兩道Vijos 的題開刀。
VOJ1056(http://www.vijos.cn /Problem_Show.asp?id&#61;1056) 永遠是離散化的經典問題。大意是給定平面上的n 個矩形&#xff08;坐標為整數&#xff0c;矩形與矩形之間可能有重疊的部分&#xff09;&#xff0c;求其覆蓋的總面積。平常的想法就是開一個與二維坐 標規模相當的二維Boolean 數組模擬矩形的「 覆蓋」 &#xff08;把矩形所在的位置填上True &#xff09;。可惜這個想法在這裡有些問題&#xff0c;因為這個題目中坐標范圍相當大 &#xff08;坐標范圍為-10^8 到10^8 之間的整數&#xff09;。但我們發現&#xff0c;矩形的數量n<&#61;100 遠遠小於坐標范圍。每個矩形會在橫縱坐標上各「 使用」 兩個值&#xff0c; 100 個矩形的坐標也不過用了-10^8 到10^8 之間的200 個值。也就是說&#xff0c;實際有用的值其實只有這麼幾個。這些值將作為新的坐標值重新劃分整個平 面&#xff0c;省去中間的若干坐標值沒有影響。我們可以將坐標范圍「 離散化」 到1 到200 之間的數&#xff0c;於是一個200*200 的二維數組就足夠了。實現方法正如本文開 頭所說的「 排序後處理」 。對橫坐標&#xff08;或縱坐標&#xff09;進行一次排序並映射為1 到2n 的整數&#xff0c;同時記錄新坐標的每兩個相鄰坐標之間在離散化前實際的距離是多少。這 道題同樣有優化的余地。

最後簡單講一下計算幾何以外的一個運用實例&#xff08;實質仍然是坐標的離散&#xff09;。才考的VOJ1238(http://www.vijos.cn/Problem_Show.asp?id&#61;1238) 中&#xff0c;標程開了一個與時間范圍一樣大的數組 來儲存時間段的位置。這種方法在空間上來看十分危險。一旦時間取值范圍再大一點&#xff0c;盲目的空間開銷將導致Memory Limit Exceeded 。我們完全可以采用離散化避免這種情況。我們對所有給出的時間坐標進行一次排序&#xff0c;然後同樣用時間段的開始點和結束點來計算每個時刻的游戲數&#xff0c;只是一次性加的經驗值數將乘以排序後這兩個相鄰時間點的實際差。這樣&#xff0c;一個1..n 的數組就足夠了。


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
author-avatar
简写青春
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有