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

本书探讨了数据结构与算法设计的基础知识,通过数学基本概念的回顾和递归原则的介绍,为深入理解算法提供了理论基础。同时,通过C++实例展示了递归算法的应用,以及模板的使用。书中还简要回顾了C++语法和概念,帮助读者巩固编程技能。
摘要由CSDN通过智能技术生成

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

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

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

  1. 基本情形,即不用递归就可以求解的情况。
  2. 向基本情况推进,每一次递归都必须使原来的问题更小化,更接近基本情形。
  3. 设计法则,假设所有的递归调用都可以正确执行。
  4. 合成效益法则,基本来说就是你在递归调用解决问题的时候,原问题会在过程中分解成很多子问题,子问题经过递归可以分解成更小的子问题,而在某些情况下,处于不同的递归树中的子问题可能会是相同的子问题,那么在设计算法的时候,应该避免多次求解同样的子问题,具体的例子可以参见斐波那契数列的最简单递归算法。
之后,因为该书是C++版本的,所以作者简单的回顾了一些C++的语法和概念,其中比较重要的,包括如下几个:
  1. 指针,参数的传递方式,比如值传递,引用传递,还有返回值的传递方式,也是值传递和引用传递
  2. 介绍了class,并且重点讲了三大成员方法,析构函数,复制构造函数,赋值操作符重载
  3. 最后说了些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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值