带你走进Java数据结构与算法

123 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十二天,点击查看活动详情 整体框架:

image-20220904224759881

算法 先简单 ==》做复杂,把复杂算法拆分成简单的问题 ==》解决问题

经典算法

1 字符串匹配

str1 = "nihdisoadisaoidhi" str2="aoi"

str1 是否包含有 str2

  • 暴力破解
  • KMP算法

2 汉诺塔游戏

将A塔的所有圆盘移动到C塔。并且规定小盘上不能有大盘,三根柱子之间一次只能移动一个圆盘

  • 分治算法

3 八皇后问题(92种)

在一个8 × 8 的国际象棋摆放 8个皇后,使其不能互相攻击

任意两个皇后都不能处于同一列、同一行或者同一斜线上,问有多少种摆法

  • 回溯算法

4 马踏棋盘算法(骑士周游)

马放在 8 × 8 的国际象棋的棋盘中,board[07] [07] 某一个格中,马走日,要求每个格子只进入一次,走完64个格子

  • 使用图的深度优化遍历算法 (DFS) + 贪心算法优化

数据结构与算法简介

  • 算法是程序的灵魂
  • 程序使用内存计算框架(Spark)和缓存技术(Redis)优化程序

数据结构与算法的关系

  • 数据结构(Data Structure):研究组织数据方式的学科
  • 程序 = 算法 + 数据结构
  • 结合实际生活问题

实际编程遇到的问题

  • 约瑟夫问题(丢手帕问题):单向环形链表【数据结构】
  • 修路问题:最小生成树(普利姆算法)
  • 最短路径问题:弗洛伊德算法
  • 汉诺塔:分治算法
  • 八皇后问题:回溯算法

数据结构

数据结构:线性结构和非线性结构

线性结构

  1. 元素之间存在一对一的线性关系

  2. 存储结构

    1. 顺序存储结构:顺序存储的线性表为顺序表,存储元素是连续的
    2. 链式存储结构:链式存储的线性表为链表,链表中元素不一定连续,元素节点中存放数据元素以及相邻元素的地址信息
  3. 常见的线性结构:数据、队列、链表、栈

非线性结构

  • 非线性结构:二维数组、多维数组、广义表、树结构、图结构