什么是算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令的集合。
//此外算法有五大特性
- 输入:一个算法必须有零个或以上输入量。
- 输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
- 明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地匹配要求或期望,通常要求实际运行结果是确定的。
- 有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
- 有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
世界上的算法大致分几类:
- 分治法:把一个问题分区成互相独立的多个部分分别求解的思路。这种求解思路带来的好处之一是便于进行并行计算。//就像秦始皇全国设置县,治理国家,层层管理
- 动态规划法:当问题的整体最优解就是由局部最优解组成的时候,经常采用的一种方法。/就像走过一片麦田,找出最大的那穗,每走一段路就比较一下,找出一个目前最大的,直到走出麦田就找到整个麦田最大的了
- 贪婪算法:常见的近似求解思路。当问题的整体最优解不是(或无法证明是)由局部最优解组成,且对解的最优性没有要求的时候,可以采用的一种方法。/短时算法~~~类似于动态规划法,同样走麦田,每走一段路,就选一穗大概最大的,不一定必须是最大的,大概就行,最终的结果肯定只是相对大的,不一定是最大
- 线性规划法:见词条。
- 简并法:把一个问题通过逻辑或数学推理,简化成与之等价或者近似的、相对简单的模型,进而求解的方法。/用数学模型来解决物理问题,就是一个简并法,模型之间不断转换的一个算法~~
//前端最主要用到的就是分治法~~~~@@@!!!!前端用的最多的就是排序算法
排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排序,堆排序,选择排序,归并排序和快速排序,冒泡排序都是比较排序,它们通过对数组中的元素进行比较来实现排序,其他排序算法则是利用非比较的其他方法来获得有关输入数组的排序信息。
什么是数据结构~~~/就是数据的结构啊0.0//
- 数据的结构常见的有:哈希,堆,栈,链表,树...
- 数组无法直接删除中间的一项,链表可以
- 用哈希实现链表
一般来说是酱紫的:
1.我们解决一个跟数据相关的问题
2.我们分析问题,想出对应的数据结构
3.分析数据结构,再想算法
//也就是说,先想数据结构再想算法
排序算法有哪些,大概思路是怎样的
1.插入排序:任意选一个数,排好序;再插入一个数比较原来已经排好序的数组比较,根据大小分别找到对应位置,由于很像扑克牌整理,也叫扑克牌发牌算法~
2.冒泡排序:将一组无序的数组,两两比较,左小右大如果不是就交换位置,一轮比较下来就可以确定一个最大值,把最大值固定,再进行一次两两比较;以此类推,每一轮的比较就找出一个最大值,直到没有数可以比较,就排序完毕,就可以得到一组从小到大的数组了
//这种排序算法的难点在于交换位置的代码~~
3.选择排序:和冒泡排序类似,不同在于,冒泡排序每一次比较都要交换位置;而选择排序不急于交换位置,一轮比较下来,找出最大或者最小的,然后和最靠边的直接交换位置,也就是说,减少了交换位置的次数,本质上和冒泡排序差不多,也是属于比较类型的排序算法
4.快速排序:任意选一个数,其他数小的左边,大的右边,然后再让左边的任意一个数做同样的动作,以此类推就可以排好序,优点在于,比较的次数进一步减少,是表较快的算法
5.通排序/基数排序:这是最快的,不用比较,直接用已经排序的桶子来装,因为用到了桶,数组小的时候合适!! 如果排序的数组很大,比如是几十万个数,就用计数排序
可视化排序网站:https://visualgo.net/bn/sorting
JavaScript常见排序实现代码http://bubkoo.com/2014/01/17/sort-algorithm/archives/
数据结构
- hash(哈希)//是什么? 哈希就是键值对的集合