ARTS (第16周)
总是在拼命的学习,不动手其实永远不会。
之前学习了跳表,当初以为会了,就没去写。
最近看到索引的知识想实现个跳表看看,但实际写起来却发现东缺西缺,问题多多。
直到我在次复习了跳表的过程和思想,找了一些别的资料,才写好跳表。
本周:
跳表、Huffman编码、分治算法,回溯算法(穷举)
Algorithm 算法
跳表
本质来说就是跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。
具体内容如下:代码里都有注释
1 | package search; |
Huffman编码
哈夫曼编码可以应用于压缩文件,以UTF-8编码为例,一个字母所占的空间为1个字节(即8个位)
而使用哈夫曼编码,可以根据字母出现频率统计出哈夫曼编码,字母出现的最多的占1个位,第二多的占2个位,以此类推。
然后再利用统计出来的哈夫曼编码对数据进行压缩处理。这里我写了哈夫曼编码的部分。
1 | package greed; |
分治算法
分治算法,顾名思义,核心思想就是分而治之。
这里我做了个求逆序度的题
这个解法本质来说就是归并排序,统计归并排序过程中出现的逆序次数,将这些逆序次数统计在一起,那么结果就是逆序度了。(ps:归并排序也是一种分治算法)
1 | package divideandconquer; |
回溯算法(穷举)
即穷举出所有的情况,根据要求得出需要的结果。
内容如下:
1、8皇后问题
2、0-1背包问题
3、简易的正则匹配(只匹配?和*)
1 | package back; |
Review 英文文章
https://redis.io/documentation
redis的介绍文档、模块,常见问题等。
Tip 技巧
极客时间的专栏《数据结构与算法之美》
本周学习了该专栏中的38-39篇
内容如下:
分治算法:将大问题拆成小问题,再由小问题的结果组合成大问题,比较适合用递归的方式写。
回溯算法:穷举一切可能,以此来发现最好的结果,比较适合用递归的方式写。
Share 分享
https://blog.csdn.net/ityouknow/article/details/94685167
如何写出让同事无法维护的代码
https://blog.csdn.net/epubit17/article/details/89449589
如何写出让同事膜拜的漂亮代码