开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十二天,点击查看活动详情 整体框架:
算法 先简单 ==》做复杂,把复杂算法拆分成简单的问题 ==》解决问题
经典算法
1 字符串匹配
str1 = "nihdisoadisaoidhi" str2="aoi"
str1 是否包含有 str2
- 暴力破解
- KMP算法
2 汉诺塔游戏
将A塔的所有圆盘移动到C塔。并且规定小盘上不能有大盘,三根柱子之间一次只能移动一个圆盘
- 分治算法
3 八皇后问题(92种)
在一个8 × 8 的国际象棋摆放 8个皇后,使其不能互相攻击
任意两个皇后都不能处于同一列、同一行或者同一斜线上,问有多少种摆法
- 回溯算法
4 马踏棋盘算法(骑士周游)
马放在 8 × 8 的国际象棋的棋盘中,board[0
7] [07] 某一个格中,马走日,要求每个格子只进入一次,走完64个格子
- 使用图的深度优化遍历算法 (DFS) + 贪心算法优化
数据结构与算法简介
- 算法是程序的灵魂
- 程序使用内存计算框架(Spark)和缓存技术(Redis)优化程序
数据结构与算法的关系
- 数据结构(Data Structure):研究组织数据方式的学科
- 程序 = 算法 + 数据结构
- 结合实际生活问题
实际编程遇到的问题
- 约瑟夫问题(丢手帕问题):单向环形链表【数据结构】
- 修路问题:最小生成树(普利姆算法)
- 最短路径问题:弗洛伊德算法
- 汉诺塔:分治算法
- 八皇后问题:回溯算法
数据结构
数据结构:线性结构和非线性结构
线性结构
-
元素之间存在一对一的线性关系
-
存储结构
- 顺序存储结构:顺序存储的线性表为顺序表,存储元素是连续的
- 链式存储结构:链式存储的线性表为链表,链表中元素不一定连续,元素节点中存放数据元素以及相邻元素的地址信息
-
常见的线性结构:数据、队列、链表、栈
非线性结构
- 非线性结构:二维数组、多维数组、广义表、树结构、图结构