数据结构与算法设计--读书笔记之一
2013-01-30 14:53
141 查看
这两天开始读Mark Allen的数据结构与算法设计,这些东西平时用到的机会少,看了久了就容易忘,为了巩固一下效果,争取隔段时间写点读书笔记,方便以后查阅。
第一章主要是简单回顾了一下数学基本知识,包括指数,对数,级数计算公式,还有证明方法,比如数学归纳法。
然后简单介绍了一下递归的定义,提出了四个递归的原则,分别如下:
基本情形,即不用递归就可以求解的情况。
向基本情况推进,每一次递归都必须使原来的问题更小化,更接近基本情形。
设计法则,假设所有的递归调用都可以正确执行。
合成效益法则,基本来说就是你在递归调用解决问题的时候,原问题会在过程中分解成很多子问题,子问题经过递归可以分解成更小的子问题,而在某些情况下,处于不同的递归树中的子问题可能会是相同的子问题,那么在设计算法的时候,应该避免多次求解同样的子问题,具体的例子可以参见斐波那契数列的最简单递归算法。
之后,因为该书是C++版本的,所以作者简单的回顾了一些C++的语法和概念,其中比较重要的,包括如下几个:
指针,参数的传递方式,比如值传递,引用传递,还有返回值的传递方式,也是值传递和引用传递
介绍了class,并且重点讲了三大成员方法,析构函数,复制构造函数,赋值操作符重载
最后说了些C++模板
鉴于我太久没有写C++代码了,很是生疏,于是写了点书中的template的例子,让自己回忆一下.
这里是SimpleTemplate.h文件
这里是main.cpp文件
第一章主要是简单回顾了一下数学基本知识,包括指数,对数,级数计算公式,还有证明方法,比如数学归纳法。
然后简单介绍了一下递归的定义,提出了四个递归的原则,分别如下:
基本情形,即不用递归就可以求解的情况。
向基本情况推进,每一次递归都必须使原来的问题更小化,更接近基本情形。
设计法则,假设所有的递归调用都可以正确执行。
合成效益法则,基本来说就是你在递归调用解决问题的时候,原问题会在过程中分解成很多子问题,子问题经过递归可以分解成更小的子问题,而在某些情况下,处于不同的递归树中的子问题可能会是相同的子问题,那么在设计算法的时候,应该避免多次求解同样的子问题,具体的例子可以参见斐波那契数列的最简单递归算法。
之后,因为该书是C++版本的,所以作者简单的回顾了一些C++的语法和概念,其中比较重要的,包括如下几个:
指针,参数的传递方式,比如值传递,引用传递,还有返回值的传递方式,也是值传递和引用传递
介绍了class,并且重点讲了三大成员方法,析构函数,复制构造函数,赋值操作符重载
最后说了些C++模板
鉴于我太久没有写C++代码了,很是生疏,于是写了点书中的template的例子,让自己回忆一下.
这里是SimpleTemplate.h文件
#ifndef _Simple_Template_H #define _Simple_Template_H // template class template <typename T> class SimpleTemplate { public: // Use default parameter, initialize default parameter with T's zero parameter constructor explicit SimpleTemplate( const T & initValue = T() ) : storedValue(initValue) {} const T& Read() const { return storedValue; } void Write( const T & value) { storedValue = value; } private: T storedValue; }; // Don't forget this #endif
这里是main.cpp文件
#include <iostream> #include "SimpleTemplate.h" #include <string> #include <vector> using namespace std; // template method template <typename T> const T & FindMax( const vector<T> & sourceVector) { int maxIndex = 0; for(int i=1; i < sourceVector.size(); ++i) { if( sourceVector[maxIndex] < sourceVector[i] ) { maxIndex = i; } } return sourceVector[maxIndex]; } int main(char** argv, int argc) { SimpleTemplate<int> v1 = SimpleTemplate<int>(2); SimpleTemplate<double> v2; SimpleTemplate<string> v3; cout << "V1=" << v1.Read() << endl; cout << "V2=" << v2.Read() << endl; cout << "V3=" << v3.Read() << endl; v1.Write(5); v2.Write(6.0); v3.Write("hello"); cout << "V1=" << v1.Read() << endl; cout << "V2=" << v2.Read() << endl; cout << "V3=" << v3.Read() << endl; vector<int> intList = vector<int>(5); intList.push_back(2); intList.push_back(1); intList.push_back(3); intList.push_back(10); intList.push_back(9); int maxValue = FindMax( intList); cout << "MaxValue=" << maxValue << endl; return 0; }
相关文章推荐
- 数据结构与算法设计(读书笔记):2.算法分析
- 【读书笔记】Effective C++—4 设计与声明(之1)
- 【读书笔记】深入理解Java虚拟机——垃圾收集
- 《深入理解Android 卷1》读书笔记 (二)—— Android zygote浅析
- Chapter 17 Core Data iOS 8 -Swift Programming cookBook 读书笔记
- 读书笔记--Neural Networks and Deep Learning(CH0)
- Java虚拟机专题之内存分配(读书笔记)
- 『C程序设计』读书笔记
- Struts 2读书笔记-----拦截器之示例:使用拦截器完成权限控制
- 读书笔记-容器深入理解
- 反脆弱 读书笔记
- 《Google-Bigtable》读书笔记
- Spring实战-读书笔记-01
- 进程编程3 - UNIX高级环境编程第9章读书笔记
- [高效编程读书笔记]用readonly而不是const
- Effective JavaScript 读书笔记 2 浮点数
- java并发-读书笔记
- 《疯狂java讲义2》读书笔记——继承与组合
- 读书笔记: 博弈论导论 - 01 - 单人决策问题
- 进程编程1 – Unix环境高级编程7章读书笔记