您的位置:首页 > 其它

痛定思痛,开启算法之路(二)

2018-01-03 18:37 211 查看
曾经有一个真挚的算法摆在我的面前、我没有珍惜,直到有一天一个非常重要的考试考到了关于它的一个大题,
除了心痛之后悔莫及,那就是马上把它彻底搞透(这是我最真实的案例,可能这次考试影响不了我的毅力和决心,
但我为他却付出了足够、足够的心血!!)


第一章 绪论

1.欧几里得求最大公约数:

(核心思想:辗转相除)

注意顺序选择:m>n;逐步减小,直到0为止;



为什么辗转相除可以得到最大公约数:

首先给定两个数a,b(a>b),则根据除法运算,a/b=q.r; q是商,r是余数.也可以表示为a=bq+r.

下面给出一个定理:

若a=bq+r,则(a,b)=(b,r),即a,b的最大公约数等于b,r的最大公约数.

证明:

设c是a和b的任意一个公约数,则c能同时整除a和b,即a=cx,b=cy,(x,y是整数)

将它们代入“a=bq+r”中:

cx=cyq+r

得到r=c(x-yq),说明c也能整除r,即c也是b和r的公约数.

于是a和b的公约数就是b和r的公约数,那么a和b最大公约数就是b和r的最大公约数,(a,b)=(b,r).

定理得证.



第一章如其名字,主要是一些基本概念理论的介绍,基本大学时期的数据结构已经涵盖非常清晰明了了,下面继续往下走;

第二章 算法效率分析基础[/b]













例四:
汉诺塔若果往细了去一步步执行确实非常麻烦,但是倒过来想利用递归用程序实现却是十分的简单明了;一次只能挪动一个且大的不能压住小的,一共A、B、C三个柱子,无非就是先将前n-1个小的由A借助C移动到B,然后将第n个最大的从A直接移动到C;此时便完成一次递归,剩下的B上的n-1个借助A由B移动到C原理与上相同;
有些问题细思极恐,比如此问题,如果让你一步步去模拟实现,规模小还可以,一旦稍微变大其代价都是十分恐怖的,所以说规律很重要;从大的方向下手,简化问题,利用递归不得不说是一种伟大的算法。


第三章 蛮力法





实例:选择排序、冒泡排序;顺序查找、蛮力匹配;最近对问题(n个点集合中,最近两点的距离)、

凸包问题:



以两点为线,若其余点均在此线的一边,则此线构成此凸包的一个边界;



旅行商问题(经n个城市回到原点)、背包问题(装不同质量不同价值物品)、分配问题(n个人分n个任务);

这一章的问题解法均基于穷举法,原理实现非常的明了就不一一具体代码实现了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: