《图解算法》第11章之 接下来如何做

目录

反向索引

傅里叶变换

线性规划


 


 

在二叉查找树中查找节点时,平均运行时间为
O(log n),但在最糟的情况下所需时间为O(n);而在有序数组中查找时,即便是在最糟情况下所
需的时间也只有O(log n),因此你可能认为有序数组比二叉查找树更佳。然而,二叉查找树的插
入和删除操作的速度要快得多。

二叉查找树也存在一些缺点,例如,不能随机访问,就像不能这么说:“给我第五个元素。”
在二叉查找树处于平衡状态时,平均访问时间也为O(log n)。假设二叉查找树像下面这样处于不
平衡状态。
 

 

注意,这棵树是向右倾斜的,因此性能不佳。也有一些处于平衡状态的特殊二叉查找树,如红黑树。
 

反向索引
 

 

傅里叶变换
 

绝妙、优雅且应用广泛的算法少之又少,傅里叶变换算是一个。

如果看了此文你还不懂傅里叶变换,那就过来

Better Explained(https://betterexplained.com/)是一个杰出的网站,致力于以通俗易懂的语言阐释数学,它就傅里叶变换做了一个绝佳的比喻:给它一杯冰沙,它能告诉你其中包含哪些成分①。换言之,给定一首歌曲,傅里叶变换能够将其中的各种频率分离出来。

 

这种理念虽然简单,应用却极其广泛。例如,如果能够将歌曲分解为不同的频率,就可强化
你关心的部分,如强化低音并隐藏高音。傅里叶变换非常适合用于处理信号,可使用它来压缩音
乐。为此,首先需要将音频文件分解为音符。傅里叶变换能够准确地指出各个音符对整个歌曲的
贡献,让你能够将不重要的音符删除。这就是MP3格式的工作原理!
 

数字信号并非只有音乐一种类型。 JPG也是一种压缩格式,也采用了刚才说的工作原理。
 

线性规划
 

最好的东西留到最后介绍。线性规划是我知道的最酷的算法之一。


线性规划用于在给定约束条件下最大限度地改善指定的指标。例如,假设你所在的公司生产
两种产品:衬衫和手提袋。衬衫每件利润2美元,需要消耗1米布料和5粒扣子;手提袋每个利润3
美元,需要消耗2米布料和2粒扣子。你有11米布料和20粒扣子,为最大限度地提高利润,该生产
多少件衬衫、多少个手提袋呢?


在这个例子中,目标是利润最大化,而约束条件是拥有的原材料数量。


再举一个例子。你是个政客,要尽可能多地获得支持票。你经过研究发现,平均而言,对于
每张支持票,在旧金山需要付出1小时的劳动(宣传、研究等)和2美元的开销,而在芝加哥需要
付出1.5小时的劳动和1美元的开销。在旧金山和芝加哥,你至少需要分别获得500和300张支持票。
你有50天的时间,总预算为1500美元。请问你最多可从这两个地方获得多少支持票?


这里的目标是支持票数最大化,而约束条件是时间和预算。


你可能在想,本书花了很大的篇幅讨论最优化,这与线性规划有何关系?所有的图算法都可
使用线性规划来实现。线性规划是一个宽泛得多的框架,图问题只是其中的一个子集。但愿你听
到这一点后心潮澎湃!
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值