数据结构和算法的关系
数据(data)结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。
要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决.
程序 = 数据结构 + 算法
数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。
几个经典的面试题
字符串匹配问题
有一个字符串 str1= ““liliwfdxhqwertyuio””,和一个子串 str2=“qwertyuio”, 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1, 要求用最快的速度来完成匹配 你的思路是什么?
暴力匹配?
KMP算法《部分匹配表》?
汉诺塔游戏
请完成汉诺塔游戏的代码: 要求:将A塔的所有圆盘移动到C塔。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.
分治算法
八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。【92】
回溯算法
马踏棋盘算法也被称为骑士周游问题
将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格
会使用到图的深度优化遍历算法(DFS) + 贪心算法优化
那么,初学者该如何学好算法呢?
算法工程师的具体分支:
其次,算法工程师的必备技能:
▲ 至少熟悉一门编程语言 C/C++/java/python/R;
▲ 功底;熟练运用各种常用算法和数据结构,有独立的实现能力;
▲ 熟悉数据挖掘算法;
▲ 熟悉机器学习相关知识理论。
▲ 加分项:具有较为丰富的项目实践经验。
好奇的你看到这里,肯定带着大大的疑问:是不是要直接学习这些算法呢?
万丈高楼平地起,任何高深的算法都要从基础算法学起,不可能一口吃个胖子。
所以,初入门的你学习算法还是要从基础开始:
▲ 首先学习一门语言。
▲ 学数据结构。
数据结构书有很多,但是有些教材晦涩难懂,建议看图解多,通俗易懂的书,推荐《趣学数据结构》。
▲ 学算法。
不要直接看《算法导论》,大量证明会让你崩溃。推荐《数据结构与算法经典问题解析》,有问题分析,完美图解,维码详解,实战演练,适合初学者快速掌握经典算法。
接下来,让我们深入《数据结构与算法经典问题解析》,带你寻找学习算法与数据结构的窍门!
话不多说直接上图
如果还在上大学的同学可以先以排序和各种的基本数据结构开始入门。我花了一个星期将八大基础排序和链表/二叉树/栈/队列制作成一份精美的PDF。
下面简单介绍一下八大基础排序和基础的数据结构,每种排序的思想和基础的讲解和源码在PDF里边有,需要进行学习的小伙伴可以三连支持一下