算法与数据结构

目前,计算机已深入到社会生活的各个领域,由其是Web前端应用,其应用已不再仅仅局限于科学计算,而更多的是用于控制,管理及数据处理等非数值计算领域。计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理。

信息的表示和组织又直接关系到处理信息的程序的效率。随着Web应用问题的不断复杂,前端页面功能的丰富,导致信息剧增与信息范围的拓宽,使许多WEB应用的规模很大,结构又相当复杂。因此,必须分析待处理问题中的对象的特征及各对象之间存在的关系,这就是数据结构。

编写解决实际问题的程序的一般过程:

l 如何用数据形式描述问题?--即由问题抽象出一个适当的数学模型

l 问题所涉及的数据量大小及数据之间的关系

l 如何在计算机中存储数据及体现数据之间的关系

l 处理问题时需要对数据作何种运算?

l 所编写的程序的性能是否良好?

上面所列举的问题基本上由我们今天学习的数据结构来解决。

千锋“HTML5程序员”训练营是全国最好的全栈工程师和架构师的培训基地,“算法与数据结构”是目前课程体系(V6.5)第二阶段的核心课程之一。

全栈工程师需要懂算法和数据结构,无论是哪一门计算机语言,只要是程序员,那么算法和数据结构就是你必修的核心部分,更是前端开发人员的基石。在精通前端的基础上深入掌握算法与数据结构,能够更好的站在全栈角度去设计和研发,提高web性能,获得更多用户的访问和体验。

算法与数据结构如何讲授呢?主要突出以下几点:

第一,循序渐进。注重概念、作用、用法,以学生为主,教师为辅的教学理念,引导学生自主解决问题的思维,快速提升并应用算法及掌握数据存储和数据处理的方法。

第二,项目驱动。以项目驱动教学法,从真实项目出发,激发学生的学习兴趣,以兴趣为导向,帮助学生掌握项目开发流程和项目的运行原理,提高项目的运行效率。

第三,注重实战。让学生不断的在解决项目问题中得到提高和升华,总结出优秀算法,培养独立开发和解决问题的能力。

算法与数据包含两部分,具体内容如下:

第一部分:算法 。本部分常见算法有:

递归算法。内容主要包含递归思想、递归的作用、递归的实现。

排序算法。内容主要包含Array.prototype.sort(),插入排序,冒泡排序,选择排序,快速排序,堆排序,归并排序,希尔排序等排序算法。

既然说到前端排序,自然首先会想到JavaScript的原生接口Array.prototype.sort.

这个接口自ECMAScript 1st Edition起就存在。

Array.prototype.sort规范

The elements of this array are sorted. The sort is not necessarily stable (that is, elements that compare equal do not necessarily remain in their original order). If comparefn is not undefined, it should be a function that accepts two arguments x and y and returns a negative value if x < y, zero if x = y, or a positive value if x > y.

显然,规范并没有限定sort内部实现的排序算法是什么。甚至接口的实现都不需要是稳定排序

在这样的背景下,前端排序这件事其实取决于各家浏览器的具体实现。

插入排序

思想:将一个记录插入到已排序好的有序表中,从而得到一个新的记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。

最优复杂度:当输入数组就是排好序的时候,复杂度为0(n)

最差复杂度:当输入数组为倒序时,复杂度为0(n^2)

插入排序比较适合用于“少量元素的数组”

冒泡排序

思想:通过两两交换,像水中的泡泡一样,小的先冒出来,大的后冒出来。

最坏运行时间:0(n^2)

最佳运行时间:0(n^2)

选择排序

思想:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

最好运行时间:0(n^2)

最坏运行时间:0(n^2)

快速排序

算法步骤:

1 从数列中挑出一个元素,称为 “基准”,

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。

3 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。

最坏运行时间:当输入数组已排序时,时间0(n^2)

最佳运行时间:0(nlgn)

堆排序

最优时间:0(nlgn)

最差时间:0(nlgn)

思想:运用了最小堆、最大堆这个数据结构,而堆还能用于构建优先队列。

归并排序

思想:运用分治法思想解决排序问题

最坏情况运行时间:0(nlgn)

最佳运行时间:0(nlgn)

分治法:就是将原问题分解为多个独立的子问题,且这些子问题的形式和原问题相似,只是规模上减少了,求解完子问题后合并结果构成原问题的解。

希尔排序

思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。

第二部分:数据结构。常见数据结构。

链表:

链式存储:用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。

存储链表中结点的一级任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。

链表中结点的逻辑顺序和物理顺序不一定相同。

为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称为指针或链,这两部分组成了链表中的结点结构。

链表是通过每个结点的指针域将线性表的n个结点按其逻辑次序链接在一起的。

每一个结只包含一个指针域的链表,称为单链表。

栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表。

栈在计算机中的实现有多种方式:

硬堆栈:利用CPU中的某些寄存器组或类似的硬件使用内存的特殊区域来实现。这类堆栈容量有限,但速度很快

软堆栈:这类堆栈主要在内存中实现。堆栈容量可以达到很大。在实现方式上,又有动态方式和静态方式两种。

栈:是限制在表的一端进行插入和删除操作的线性表。又称为后进先出或先进后出线性表。

队列:也是运算受限的线性表。是一种先进先出的线性表。只允许在表的一端进行插入,而在另一端进行删除。

三角函数:

(一) 三角函数的本质是任意角的集合与一个比值的集合的变量之间的映射。

(二) 六种基本函数:正弦、余弦、正切、余切、正割、余割。

(三) 在平面直角坐标系中,从点0引出一条射线0p,设旋转角为θ,p点的坐标为(x,y)有:(斜边c,对边为a,邻边为b)

1. 正弦函数 sinθ = a/c 正弦(sin):角a的对边比斜边

2. 余弦函数 cosθ = b / c 余弦(cos):角a的邻边比斜边

3. 正切函数 tanθ = a / b 正切(tan):角a的对边比邻边

4. 余切函数 cotθ = b / a 余切(cot):角a的邻边比对边

5. 正割函数 secθ = c / b 正割(sec) : 角a的斜边比邻边

6. 余割函数 cscθ = c /a 余割(csc):角a的斜边比对边

勾股定理

直角三角形中,两直边的平方和等于斜边的平方。 即令直角三角形ABC中,其中角C=90°,直边BC的长度为a,AC的长度为b,斜边AB的长度为c,则有a2+b2=c2

实现案例:抛物线运动、圆周运动

时间: 2024-10-29 05:28:41

算法与数据结构的相关文章

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

【算法与数据结构】哈希表-链地址法

哈希表的链地址法来解决冲突问题 将所有关键字为同义词的记录存储在同一个线性链表中,假设某哈希函数产生的哈希地址在区间[0, m - 1]上,则设立一个至振兴向量 Chain  ChainHash[m]; 数据结构 //链表结点 typedef struct _tagNode { int data; //元素值(关键字) struct _tagNode* next; //下一个结点 }Node, *PNode; //哈希表结点 typedef struct _tagHashTable { //这里

《 常见算法与数据结构》平衡查找树(2)——红黑树(附动画)

本系列文章主要介绍常用的算法和数据结构的知识,记录的是<Algorithms I/II>课程的内容,采用的是"算法(第4版)"这本红宝书作为学习教材的,语言是java.这本书的名气我不用多说吧?豆瓣评分9.4,我自己也认为是极好的学习算法的书籍. 通过这系列文章,可以加深对数据结构和基本算法的理解(个人认为比学校讲的清晰多了),并加深对java的理解. 红黑树介绍 红黑树是一种简单的实现2-3树的数据结构,它方便的把我们之前实现的二叉搜索树改造成了一棵2-3树.它的核心思想

如何学好算法和数据结构之我见——51CTO名家访谈实录

最近受邀参加"51CTO名家访谈"就算法与数据结构话题论道做答,希望这些问题能够解答各位读者朋友的心中疑惑. 活动网址如下: http://book.51cto.com/act/exp/zuofei 下面是活动中Q&A环节我的一些作答,希望可以作为正在学习算法的朋友们的一些经验参考. 算法到底是什么? 非形式地说,算法是为实现某个任务而构造的简单指令集.以日常用语来说,算法又称为 过程或者方法.算法在数学中也起着非常重要的作用.古代数学文献中就包含有执行各种各样计算任务的算法描

【转载】浅谈算法和数据结构: 一 栈和队列

作者:yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 最近晚上在家里看Algorithms,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开

算法与数据结构基础1:动态数组

恶补算法与数据结构,从很基础的开始,先看动态数组的实现. // array.h #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Array { public: // ************************************************************************** // 类的四大函数:构造函数.拷贝构

浅谈算法和数据结构: 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

算法与数据结构基础10:C++实现——拓扑排序

一 定义 拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序, 它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面. 二 先决条件 能够进行拓扑排序图有两个先决条件:有向.无环,即有向无环图. 三 偏序全序 连通图:任意两点之间都存在至少一条边 偏序:非连通图(有向无环图满足偏序关系) 全序:单连通图 四 结果唯一性 对于仅满足偏序关系的有向无环图中,因为有两个点之间的关系是不确定的,所以导致排序的结果是不唯一的. 满足全序关系的有

【算法与数据结构】图 -- 邻接表

/************************************************************************ 边(弧)结点 -------------------------- |adjvex | info | nextarc | -------------------------- adjvex:邻接点域,该点在图中的位置 info :相关信息,比如可以保存从某顶点到该点的权值 nextac:指向下一个与该点有相同邻接点的顶点 顶点结点 ---------