数据结构算法
风可。
机器视觉、深度学习、数据挖掘
展开
-
数据结构从0开始3---线性结构(线性表)
之前最开始介绍了数据结构有逻辑结构和存储结构,而逻辑结构又分为四种,线性结构又是其中的一种。然后我们又说了逻辑结构只是逻辑的表示,而实现的时候可以有不同的方式。因此,线性表可以有两种不同存储结构表示,包括:顺序存储(表),线性表达 顺序存储又称顺序表,即内存上是连续的,所以插入和删除的时间复杂度很高,但按下标(index)索引很快。链式存储,用链表存储,用链表存储当然插入和删除的时间复杂度很低,但是按index索引会很慢。线性表所需要的基本操作...原创 2020-06-04 20:57:35 · 169 阅读 · 0 评论 -
数据结构从0开始2---时间复杂度&空间复杂度
时间复杂度&空间复杂度时间复杂度计算的时候忽略低阶的次数复杂度的大小比较空间复杂度变量带来内存增加函数调用带来内存开销引用这种复杂度的计算主要是来度量算法的效率。主要度量两种复杂度:时间复杂度,需要计算多少次空间复杂度,需要占用多少空间时间复杂度时间复杂度主要考虑的是计算的次数,而不是实际时间,因为计算机性能不一样需要用的时间也是不一样的。时间复杂度,用来事前预估算法时间开销和问题规模n的关系。这里的n就是指平时我们数据的量或者是输入的参数等。例如循环n次。时间复杂度其实包括三种原创 2020-06-04 20:42:22 · 233 阅读 · 0 评论 -
数据结构从0开始1---数据结构的基本概念
数据结构的基本概念1 什么是数据结构2 逻辑结构3 物理结构、存储结构存储结构会影响这些东西4 数据类型之前基础较差,现在从头开始系统的学一遍数据结构。1 什么是数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据对象是具有相同性质的数据元素的集合,是数据的一个子集。数据结构有三要素:逻辑结构物理结构(存储结构)数据运算2 逻辑结构逻辑结构就是数据元素之间的逻辑关系,而不关心他的实现。数据的逻辑结构主要有以下四种,所以其实不是很多:集合线性结构树形结构图原创 2020-06-04 19:56:24 · 447 阅读 · 0 评论 -
动态规划
动态规划的描述动态规划通常基于一个递推公式及一个或多个初始状态。当前子问题将由上一子问题的解推出。状态与状态转移方程“状态”用来描述该问题的子问题的解。 注意,大部分情况下,某个状态只与它前面出现的状态有关, 而独立于后面的状态。例题1一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。 让我们沿用“入门”一节里那道简单题的思路来一步步找到“状态”和“状态转移方程”。原创 2017-05-26 11:24:07 · 269 阅读 · 0 评论 -
算法学习笔记--排序之快速排序
算法学习笔记–排序之快速排序定义快速排序使用了分而治之的策略。使用分而治之解决问题的两个步骤?找出停止条件,这种条件尽可能简单。不断将问题分解(或者说缩小规模),直到符合停止条件。实现def quick_sort(array): if len(array) < 2: return array else: pivot = array[0]原创 2017-05-07 12:09:31 · 227 阅读 · 0 评论 -
算法学习笔记–递归(2)之栈
算法学习笔记–递归(2)之栈调用栈的概念计算机内部使用被称之为调用栈的栈,在执行每个函数的时候,计算机都会为函数分配一块内存,当执行到这个函数中的一个函数时,计算机会给函数中的函数分配一个新的内存,并且第二块内存位于第一个内存上面,当函数调用完后,栈顶的内存被弹出。然后继续执行外部的函数。递归是如何使用调用栈的?每次调用递归函数,将会把函数压入栈顶,等到到达停止调节的时候,依次从调用栈顶弹出。原创 2017-05-07 11:35:36 · 345 阅读 · 0 评论 -
算法学习笔记--递归(1)
算法学习笔记–递归定义自身调用自身。要实现一个递归函数,那么必须满足两个条件,停止条件和递归条件。递归条件是指函数调用自己,而停止条件是什么时候停止调用,停止无限循环。这两个条件使用if….else….语句来执行实现例如:倒计时程序def count_down(num): print num num -= 1 if num < 0: return el原创 2017-05-07 11:15:22 · 237 阅读 · 0 评论 -
算法学习笔记--排序之选择排序
算法学习笔记–排序之选择排序定义选择排序需要额外的存储空间,且排序的时间为O(N^2),其实为O(1/2(N^2))但是常数可以省略。 选择排序每次都遍历一遍剩下的数,然后选出最小的一个数放到排序好的存储空间中去。实现python中没有数组,所以用列表(List)代替。def find_smallest(array): smallest = array[0] for i in ra原创 2017-05-07 10:53:42 · 240 阅读 · 0 评论 -
算法学习笔记--动态规划(1)
算法学习笔记–动态规划学习目标学习动态规划,它将问题分成小问题,并先着手解决这些小问题。学习如何设计问题的动态规划解决方案动态规划解法画网格解可以解决的问题需要在给定约束条件下优化某种指标 问题可以分解为离散子问题时,背包问题–给定限制条件计算最优解 最长公共子串–例如比较两个文件的差异性总结每种动态规划解决方案都涉及网格 每个单元格都是一个子问题,因此要思考如何将问题分解为子问题 没原创 2017-05-06 23:09:17 · 289 阅读 · 0 评论 -
算法学习笔记--NP完全问题
算法学习笔记–NP完全问题什么是NP完全问题?简单来说就是非常难解的问题,无法找到一个快速解决的算法,如旅行商问题和集合覆盖问题。如何判断一个问题是NP问题?NP问题无处不在,如果能够判断一个问题是NP完全问题,那么我们就不需要去寻找完美的解决方案,而是寻找一个近似算法即可。往往有时候易于解决的问题和NP完全问题的差别很小。如何判断NP问题有一些点可参考:元素较少时算法的运算速度很快,当随着元素数原创 2017-05-06 21:57:25 · 1136 阅读 · 0 评论 -
算法学习笔记--贪婪算法
算法学习笔记–贪婪算法学习目标如何处理不可能完成的任务:没有快速算法的问题识别NP完全问题,以免浪费时间去寻找快速算法学习近似算法,可以快速找到NP完全问题的近似解学习贪婪策略,一种非常简单的问题解决策略什么是贪婪算法?贪婪算法就是每一步都采取最优的做法。 也可以说是每一步都是选择的局部最优解。背包问题幂集设有集合A,由A的所有子集(包括空集)组成的集合,称为A的幂集,记作2^A 。原创 2017-05-06 21:43:52 · 765 阅读 · 1 评论 -
算法学习笔记--广度优先搜索(1)
算法学习笔记–广度优先搜索(1)解决最短路径问题的步骤两个步骤 1. 使用图来建立问题模型 2. 使用广度优先搜索解决问题什么是图?图用于模拟一组连接。 图由节点和边组成。直接相连的节点称为邻居。当图是有向图的时候A–>B(A指向B)那么B是A的邻居,A不是B的邻居。当图是无向图的时候A—B,他们互为邻居。广度优先算法是什么?可以解决哪些问题?1)广度优先搜索是一种用于图的查找算法。2)第原创 2017-05-06 17:28:47 · 311 阅读 · 0 评论 -
算法学习笔记--狄克斯特拉算法
算法学习笔记–狄克斯特拉算法主要内容加权图:提高或降低某些边的权重介绍狄克斯特拉算法,能找出加权图中前往X的最短路径图中的环会导致狄克斯特拉算法不管用,如果有负权重也不适用 如果要处理负权重的图,可以使用贝尔曼-福德算法狄克斯特算法的四个步骤找出最便宜的节点,即可在最短时间内到达的节点对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。重复这个过程,直到对图中的每个原创 2017-05-06 20:52:29 · 1599 阅读 · 1 评论 -
算法学习笔记--散列表(1)
算法学习笔记–散列表(1)定义散列表可以由散列函数和数组组成,当我们查找一个变量对应的值得时候可以马上得到它的值时间将为O(1)。散列表的内部机制实现,冲突,散列函数散列函数散列函数是这样的一个函数,当我们无论输入什么数据,它输出的都是一个数字。 然后我们把这个数字作为数组的索引。 所以当我们使用散列表查找值得时候速度非常快。冲突理想的情况下我们希望散列函数总是将不同的键映射到数组的不同位置,但原创 2017-05-06 16:38:26 · 266 阅读 · 0 评论 -
解决问题的思想
研究一个新问题时,最好的方法是实现一个你现在能想到的最简单的程序,当它成为瓶颈的时候再继续改进他。原创 2017-04-10 10:46:46 · 298 阅读 · 0 评论 -
算法学习笔记--背包、队列、栈(1)
1. 引言背包、队列和栈其实就是一组对象的集合。他们的不同之处就在于删除、访问和顺序不同。在java中使用泛型和迭代可以方便的使用这些集合。2. 背包背包就相当于生活中的背包,目的就是收集元素并迭代便利所有收集到的元素,它没有顺序和删除。平时在一些与计算顺序和结果无关的场景下可以使用,在java中使用foreach便利所有元素。3.队列先进先出,就像生活中的排对,这是一种很公平原创 2017-04-07 22:05:19 · 289 阅读 · 0 评论