您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法设计--读书笔记之一

2013-01-30 14:53 141 查看
这两天开始读Mark Allen的数据结构与算法设计,这些东西平时用到的机会少,看了久了就容易忘,为了巩固一下效果,争取隔段时间写点读书笔记,方便以后查阅。

第一章主要是简单回顾了一下数学基本知识,包括指数,对数,级数计算公式,还有证明方法,比如数学归纳法。

然后简单介绍了一下递归的定义,提出了四个递归的原则,分别如下:

基本情形,即不用递归就可以求解的情况。
向基本情况推进,每一次递归都必须使原来的问题更小化,更接近基本情形。
设计法则,假设所有的递归调用都可以正确执行。
合成效益法则,基本来说就是你在递归调用解决问题的时候,原问题会在过程中分解成很多子问题,子问题经过递归可以分解成更小的子问题,而在某些情况下,处于不同的递归树中的子问题可能会是相同的子问题,那么在设计算法的时候,应该避免多次求解同样的子问题,具体的例子可以参见斐波那契数列的最简单递归算法。

之后,因为该书是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: