Stay Hungry, Stay Foolish. ——Steve Jobs
一、 算法
- 大O表示法
算法的运行时间用大O表示法表示。谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
- ❑ O(log n),也叫对数时间,这样的算法包括二分查找。
- ❑ O(n),也叫线性时间,这样的算法包括简单查找。
- ❑ O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
- ❑ O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
- ❑ O(n! ),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。
- 二分搜索 Binary Search
在一个有序的元素列表中想要快速查到一个元素可以使用二分查找法。猜测中间的数字,这样每次都能排除一半的错误答案。二分查找需要的步数为log2n。(对数概念,越是大的数字,使用二分搜索越是能提高效率。)
- 递归 recursion
比起循环(while)是一种更清晰、好理解的算法。调用自己的函数,接受一个参数,返回一个值;
-
基线条件 base case
if -
递归条件 recursive case
else
- 分治 Divide and Conquer
是一种找到最大公约数(Greatest Common Divisor,GCD)的方法,化繁为简。 简称D&C,先找出简单的基线条件。然后一步步缩小问题的规模,使其符合基线条件。
- 欧几里得算法 Euclidean Algorithm
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
- 狄克斯特拉算法 Dijkstra Algorithm
要计算非加权图中的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。(也被称为最短路径算法。)
- 宽(广)度优先搜索 Breadth First Search(BFS)
当我们需要确定一个最短路径问题(shorterst-pathproblem)时,就要先(1) 使用图来建立问题模型。(2) 使用广度优先搜索解决问题。。 搜索范围从起点开始逐渐向外延伸,即先检查一度关系,再检查二度关系。
————6/18————
- 深度优先搜索 Depth First Search
- 回溯法 Backtracking
- 双指针 Two Pointers
- 动态规划 Dynamic Programming
- 扫描线 Scan-line algorithm
- 快速排序 Quick Sort(重要的D&C算法)
首先,从数组中选择一个元素,这个元素被称为基准值(pivot)。
二、数据结构
- 调用栈 Call Stack
压入和弹出; 用于存放子程序的返回地址
-
队列 Queue
-
链表 Linked List
每一个元素都存储了下一个元素的地址,类似于寻宝地图,也像是朋友们愿意在电影院分开坐。链表如果按照顺序读取元素会效率很高,因为前一个元素总是会包含下一个元素的地址信息。但如果需要随机地访问一些元素,数组才是更为一目了然的方法。
- 数组 Array
类似电影院选座位,你不知道会有多少个朋友来,但要保证你们坐在同一排。当朋友很多时,容易出现没有这么多人连在一起的座位的情况,这样就需要转移。所以为了避免麻烦,计算机要预留足够的座位(即内存),但这样会面临来的朋友不够多,导致作为浪费的风险。
综上,插入和删除元素链表更快,读取元素则是数组更快。
- 哈希表 Hash Table
- 二叉树 Binary Tree
- 堆 Heap
- 并查集 Union Find
- 字典树 Trie
三、HTML
- div
四、CSS
五. JavaScript
JavaScript 是属于 HTML 和 Web 的编程语言。 HTML 定义网页的内容;CSS 规定网页的布局;JavaScript 对网页行为进行编程。