简介
本文会介绍十大常用算法,二分查找(非递归)、分治、动态规划、贪心、KMP、马踏棋盘等
先看几个经典算法面试题
- 字符串匹配问题
1)有一个字符串 str1="“硅硅谷尚硅谷你尚硅尚硅谷你尚硅谷你尚硅你好”",和一个子串 str2=“尚硅谷你尚硅你”
2)现在要判断str1是否含有str2,如果存在,就返回第一次出现的位置,如果没有,则
返回-1
3)要求用最快的速度来完成匹配
4)你的思路是什么?
思路一:暴力匹配,简单、效率低
思路二:KMP算法,部分匹配表 - 汉诺塔游戏
请完成汉诺塔游戏的代码:
要求:
1)将A塔的所有圆盘移动到C塔。并且规定,
2)在小圆盘上不能放大圆盘,
3)在三根柱子之间一次只能移动一个圆盘 - 思路:分治算法,
- 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 - 思路:回溯算法。高斯认为有76种,图论的方法有92种。
- 马踏棋盘算法介绍和游戏演示
1)马踏棋盘算法也被称为骑士周游问题
2)将马随机放在国际象棋的8×8棋盘
Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格
3)游戏演示: http://www.4399.com/flash/146267_2.htm
思路:图的深度优化遍历算法(DFS) +贪心算法优化
在学习算法之前,搞定数据结构!
数据结构分两大类,线性结构(栈、队列、链表)和非线性结构(图和树)。
接下来要学习的内容如下表所示:
学习内容 | 案例 |
数据结构和算法介绍 | 一个五子棋程序介绍 |
稀疏sparsearray数组 | 数组压缩和解压 |
队列 | 场景展示及数组模拟 |
链表 | 单、双链表及应用实例 |
栈 | 栈应用场景及实例 |
递归 | 递归场景 |
排序 | 八大排序算法 |
算法复杂度 | 时间与空间复杂度 |
查找算法 | 线性、二分、插值、斐波那契 |
哈希表 | 原理、实践 |
树 | 二叉树、顺序存储、线索化 |
树实际应用 | 堆排序、赫夫曼树及编码、二叉排序树、平衡二叉 |
多路查找 | 二叉树与B树、分治算法 |
图 | 深度优先 |
程序员10大算法 | 二叉、分治、动态规划、KMP、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德、马踏棋盘 |
学习步骤:应用场景->数据结构或算法->剖析原理->分析实现步骤(图解)->代码实现
接下来会陆续更新学习笔记~~~