博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重读<算法导论>
阅读量:7235 次
发布时间:2019-06-29

本文共 1147 字,大约阅读时间需要 3 分钟。

重读<算法导论>

记得多年前学数据结构的时候作为教材的延伸读物我拜读了<算法导论>,当时有选择的读了大约2/3的东西,只学理论和算法实在枯燥,看书之余动手写了其中的一些算法,但是由于实在不知道这些知识有什么用处,剩余的1/3大部分是一些具体的理论推导和稍微复杂的算法。

那么,为什么近期又重读这本算法著作呢?

首先就是我遇到问题了,在前一阵的工作中频繁出现红黑树的分析问题,我不得不根据红黑树的排列去查找STL Map 中的内容,每次出现问题都要去内存中找出有用的状态。

其次就是在研究V8的时候我觉得有必要系统的研究一下编译器实现,于是研究了一段时间的<龙书>,那段时间一直是遇到问题后直接google一下,始终觉得不爽。

基于以上的原因,在这周一的时候,我开始重读了这本算法名著。

 

也许是因为五年的工作积累吧,我重读<算法导论>有一种说不出的亲切感,其实自己的实际工作中好多的想法和算法导论上面讲的理论如出一辙,并且再看其中的一些算法的时候也不会觉得枯燥,因为现在已经不只是理论,每一个抽象的理论都似乎有一个生动的例子。

 

比如最大堆算法,最小堆算法,上学的时候看他们的感觉是,这东西有什么用?先学习一下吧。

现在重温的时候的感觉是,TOP K 算法的时候不就可以以最小堆实现么..

算法代码如下:

void TopKAlgorithm(
int inputArray[], 
int nInputLength, 
int nOutputLength )
{
    
//
construct the minimum heap the size is K
    vector<
int> vec(inputArray,inputArray+nOutputLength);
    make_heap (vec.begin(),vec.end(), greater<
int>());
    
for(
int i=nOutputLength; i<
10; i++)
    {
        
if(inputArray[i] >= vec[
0])
        {
            vec[
0] = inputArray[i];
            make_heap (vec.begin(),vec.end(), greater<
int>());
        }
    }
    
for(
int i=
0; i<nOutputLength; i++)
    {
        inputArray[i]=vec[i];
    }
}

 

总结和建议

我写这篇文章的目的有两个,第一,记得有个哲学家说过,人不能两次踏入同一条河流,所以人在有了一定的经历之后对一些东西的看法可能不同或者更深刻,所以建议经典的好书拿出来翻翻说不定会有新的收获,第二,我想说的是理论和实践结合了可能会产生出更大的能量,而且这个时候理论也不会显的那么枯燥,共勉..

 

转载地址:http://qpofm.baihongyu.com/

你可能感兴趣的文章
大搜车孙信宇:一个好的团队应该去中心化
查看>>
《A Practical Guide to Continuous Delivery》作者访谈录
查看>>
一文看懂大数据领域的六年巨变
查看>>
Rust 和Erlang的对比
查看>>
DevOps实战:Graphite监控上手指南
查看>>
ODE网络:一场颠覆RNN的革命即将到来
查看>>
微软宣布开源WPF、WinForms和WinUI
查看>>
搞容器,必须考虑这五大安全要素
查看>>
javascript招式总结
查看>>
如何对DevOps数据库进行源代码控制
查看>>
Netflix是如何针对云构建和部署代码的
查看>>
波士顿儿童医院如何利用开放云创新
查看>>
Azure Resource Manager 概述
查看>>
微服务基础架构的5个关键问题
查看>>
正确掌握React 生命周期(Lifecycle)
查看>>
install virtualbox on centos server
查看>>
腾讯优测优分享 | 这样做测试用例评审更高效
查看>>
思维导图来学习 Javascript 基础知识
查看>>
容器中运行有状态服务? Kubernetes Says “Yes!”
查看>>
IIS短文件名泄露漏洞修复
查看>>