数据结构与算法——左程云08

【前言】:

后续有时间会更新上纸质笔记中的过程图。

【1】:前缀树

【解释前缀树】:

  • 《@@93_1》

【TrieNode】:

  • 《@@95_2》

【代价极低】:

一个前缀树一旦建好之后 , 你想查询一个字符串 , 它的代价就是字符的数量。( 因为我只用从头节点出发,走过字符个数量的距离就可以确定这件事。 )

【 C++处理方式(析构) 】:

  • 0:51:33

在该位置处 , 详细讲了C++的处理方式。

【2】:贪心算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S9AmVwEH-1663994400643)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220909162451651.png)]

【单一指标】:

买东西最多的用户最有价值;

把产品在微博上转发最多的用户最有价值;

每天上网站最多的用户最有价值;

【综合指标】:

指标一 && 指标二

【 优良解 / 最优解 】:

很多贪心算法只要求找到优良解即可~~~

【无法证明的】:

【1】局部最优 ==》【2】整体最优

​ //第1步 到 第2步 是无法证明的~

什么是最有价值的用户本身是相当主观的一个问题,我们日常接触到的确定性算法(求全局最优解)。

//严格要求出全局最优解的一些题目。

//你的贪心策略的考察就要存在局部最优 ------> 整体最优的证明。(每一道题的证明方式都是不一样的。)

【实用技巧】:

熟悉一些常用的贪心算法模版,要比证明快得多。

【贪心算法会议问题】:

  • 会议室一段时间只能安排一个项目(不能同时两个项目),如何制定安排策略来确保安排的会议是最多的呢???

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vxPQO5L-1663994400644)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220909175832986.png)]

  • 《@@100_3》

【验证贪心策略】:

  • 用什么策略来验证你的贪心策略正确与否???

对数器~~~!!!

拿标杆方法 结合随机大样本 , 两个方法去跑对数器。几千万的随机样本都对,肯定是最优的贪心策略~~~

【贪心策略笔试套路】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ogthdlmf-1663994400644)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220909191832553.png)]

【1】:

实现一个不依靠贪心策略的解法( 如:全排列 、 暴力枚举 ),可以使用最暴力的尝试;

【2】:

脑补出贪心策略A、贪心策略B、贪心策略C…

【3】:

用解法X和对数器,去验证每一个贪心策略,用实验的方式得知哪个贪心策略正确。

【4】:

不要去纠结贪心策略的证明。 //尤其不要在笔试场合纠结它的证明。

//准备模版时,要准备一些全排列的代码。( 其中必有最优解 )

【注意】:

贪心策略的题目只是根据一个标准——或者排个序,或者放到堆里面依次考虑,代码都不会很长,仅仅是实现一个比较策略而已。

几千万的随机样本都对,肯定是最优的贪心策略~~~

【核心】:
  • 模板

  • 对数器

【贪心策略的证明】:

01:18:00

  • 及其需要数学能力的一件事!!!

//证明贪心策略途中的数学暗礁。

【贪心证明题目】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqmdV6qK-1663994400644)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220909192937743.png)]

  • 字典序

两个单词(字符串),如果将其编成字典的话 , 谁放在谁的前面。一个单词排在前面,我就认为它的字典序低,反之则认为高。

​ //我希望让你决定字符串的拼接顺序,你的目标是要把数组中所有的字符串都拼接起来。你不能够选择要哪个字符串,不要哪个字符串,不行,你必须全要,你只能决定的是——拼接顺序。

  • 《@@102_4》

【证明】:

首先我们要证明我们的策略是一个有效的策略。

//不是所有的策略定义出来都是有效策略。

【例】:

我有一个类型,这个类型是枚举类型;

  { 甲 ,乙 ,丙 }             //每一个值就是甲、乙、丙 三种值。

甲遇乙 ==> 甲前 //这种贪心策略是一个环,它不是一种有效的贪心策略,它无法比较出大小。

乙遇甲 ==> 乙前 //这种贪心策略是一个环,它不是一种有效的贪心策略,它无法比较出大小。

甲遇丙 ==> 丙前 //这种贪心策略是一个环,它不是一种有效的贪心策略,它无法比较出大小。

【有效、无效】:

【有效比较策略】:

​ 如果你有一个数组,不管你原始数据如何,只要策略有效 =》 最后得到的序列一定是同样一组序列。

【无效比较策略】:

​ 根据原始数据的不同,你最后排出的序列可能会不一样。

【传递性】:

日常的比较,我们可能会将传递性给忽略掉~~~

  • 数字具备传递性:
1 < 3 , 3 < 10         ------>         1 < 10  
【证明传递性】
  • 《@@103_5》

【 word_final 】:

打word_final的选手都是这样的(虽然做对了,但是没有进行证明,自己也不知道是怎么对的。)

//这些选手是利用实验的方式来培养出题感的。

//打WORD方法——生成一个对数器 ,模拟8、9个贪心策略,如果有一种贪心策略成功了 ==》 直接提交~~~。

//Final的国手尚且如此,你就不要去想什么证明了~ ~ ~

【3】:贪心题目

【贪心策略常用技巧】:

image-20220910205439211
  • 写熟暴力尝试的代码。

【切金条】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFvGiOhx-1663994400644)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220910205702951.png)]

金条总长度为60,有三个人各自想要{10 , 20 , 30} 长度的金条~~~!!!

  • 《@@107_6》

【Huffman】:

  • 《@@108_7》

【面试比重】:

  • 堆和排序是最常用的两个技巧~~

每一道题目的贪点是不一样的 ~

//不同的业务贪点不同( 业务不同,贪点不同)

【贪心题目笔试地位】:

1/5——5道题目中会有一道。

​ //贪心题的区分度并不好。( 面试中不会出现,很可能会考动态规划 ~ )

区分度不好是因为——你找对了就是满分 , 找不对就是0分。

【 花费与利润 】:

  • 《@@109_8》

【中位数】:

  • 一个数据流中 , 随时可以取得中位数;

  • 《@@113_9》

【题意】:

​ 用户源源不断地给你提供数字,它想让你维持一个结构,这个结构可以——随时帮助用户取得它给你的所有数字中的中位数是哪一个?

【还要求】:

​ 给新数字之后,你的结构必须要调整地非常快!!!要中位数时,返回给我的速度也很快~~~!!!

【 N-queens puzzle 】:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnjAyefX-1663994400645)(/Users/yuguangyao/Library/Application Support/typora-user-images/image-20220914133540904.png)]

//最优解的方法只有————暴力尝试~ ~ ~ ! ! !

  • 《@@115_10》

【常数项优化的重要性】:
  • 14皇后

5055ms ----> 229ms

  • 15皇后

1min ----> 1468ms

【常数优化思路】:

指标没有办法优化了,可以对常数项进行优化~~~

  • 用位运算来加速~

//请不要超过32位皇后;

//超过32个皇后 ———— int --> long

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值