数据结构与算法【DS】
土豆洋芋山药蛋
理性的生存,诗意的栖居。
展开
-
【转】Python实现单向链表(图解)
原文链接 什么是链表 链表顾名思义就是~链 链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的。跟数组不同链表不用预先定义大小,而且硬件支持的话可以无限扩展。链表与数组的不同点:数组需要预先定义大小,无法适应数据动态地增减,数据小于定义的长度会浪费内存,数据超过预定义的长度无法插入。而链表是动态增删数据,可以转载 2017-11-09 21:06:18 · 755 阅读 · 0 评论 -
辗转相除法+更相减损法求最大公约数
怎么求两个数的最大公约数呢? 简单的想法就是直接暴力枚举,试出最大公约数暴力枚举#暴力枚举def GCD(numberA,numberB): gcd=1 for i in range(2,max(numberA,numberB)+1): if numberA%i == 0 and numberB%i == 0: gcd=i retu原创 2017-12-03 11:48:23 · 2545 阅读 · 0 评论 -
一张图一句话——弄懂KMP算法
用一句话说清楚KMP算法核心思想,用一张图展示KMP算法执行过程。一句话:为了避免子串不断回溯造成的浪费,KMP算法利用记录最大前后缀长度的方式(next数组)减少子串的回溯,从而达到节省时间的作用。一张图:如果对计算next数组有疑问,或者只想了解next数组怎么算的童鞋,这里有一份30秒计算next数组的方法:https://blog.csdn.net/qq_33414271/...原创 2018-11-06 16:24:02 · 4277 阅读 · 7 评论 -
KMP算法之简单求next数组
前言 1.next数组的计算只与模式串有关,与主串无关 2.next可能有不同的表示方法,但意义不变 3.前缀:除最后一个字母外,前面字母的从前往后组合情况。串abaaba的前缀={a,ab,aba,abaa,abaab} 4.后缀:除第一个字母外,后面字母的从前往后组合情况。串abaaba的后缀={baaba,aaba,aba,ba,a}next数组中存储...原创 2018-08-31 22:44:06 · 3867 阅读 · 3 评论 -
手写算法系列——斐波那契数列
感觉能够手写各种算法是一件很牛逼的事情,所以开始慢慢练习手写代码,刚开始先找一个容易理解的方式背一背,慢慢再看效果。斐波那契数列是一个很经典的算法,实现起来很容易,主要是要理解它的算法复杂度,以下用一张图总结以下手写要点: 那么斐波那契数列有咩有时间复杂度更低的实现方式呢?答案是有的,下面就介绍一种时间复杂度位O(log n)的思路:矩阵法。利用矩阵可以很好地将数列问题转...原创 2018-08-03 21:16:44 · 1945 阅读 · 0 评论 -
一句话+一张图理解——数据结构与算法
本文试图用图形化的方式展示数据结构与算法,也算是一个小总结,各位看官请轻点拍砖~一句话:相互之间存在关系的数据元素的集合就是数据结构,算法是解决特定问题的有限求解步骤。一张图:学习数据结构与算法有什么用呢?拿一个厨师的厨艺来比较的话,真正的大厨一般不是那种能做各种花样的菜式的人,而是能把普通的菜炒出不平凡的效果人。就像“酸辣土豆丝”,不同的人炒出来的效果就不一样,从一道...原创 2018-05-18 16:13:45 · 8283 阅读 · 21 评论 -
小白学数据结构——四、排序算法Python(桶、计数、基数排序)
在早些的文章中,我们讲过了常见的比较排序算法,详情请回顾: 小白学数据结构——四、排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)那么我们这次就来看一些不是基于比较的排序算法,包括了桶排序,计数排序,基数排序。1.桶排序说起桶排序,就先来介绍一下我们加下来要用的桶,说的就是下面这个桶(当然不是用来装垃圾的),桶盖表示游标index,桶身上表示该游标下的数据data,没错原创 2018-01-22 17:13:10 · 3551 阅读 · 0 评论 -
小白学数据结构——四、排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 内部排序的分类: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,快速排序,插入排序,希尔排序,归并排原创 2017-11-14 11:37:44 · 6735 阅读 · 21 评论 -
小白学数据结构——三、图(基本概念及python实现)
图的基本术语有向图:图中的每条边都有方向的图叫有向图。此时,边的两个顶点有次序关系,有向边 < u,v>成为从顶点u到顶点v的一条弧,u成为弧尾(始点),v成为弧头(终点),即有向图中弧 < u,v>和弧 < v,u> 表示不同的两条边。无向图:图中的每条边没有方向的图。边的两个顶点没有次序关系,无向图用边(u,v)表示对称弧< u,v>和< v,u>。权:图中的边或弧上有附加的数量信息,这种原创 2017-11-13 00:07:12 · 3546 阅读 · 1 评论 -
小白学数据结构——五、查找(哈希表&布隆过滤器)
哈希表 使用哈希表可以进行非常快速的查找操作,查找时间为常数,同时不需要元素排列有序 python的内建数据类型:字典,就是用哈希表实现的哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。定义存放数据的集合(原创 2017-11-10 21:23:51 · 1285 阅读 · 0 评论 -
小白学数据结构——二、树与堆(基本概念及二叉树、二叉堆的python实现)
树1.基本概念什么是树? 树是一种数据结构,可以表示层次关系。形状像一棵树。 最上面;树根 中间:树枝 最下:树叶树的定义 它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个原创 2017-11-11 15:11:19 · 3950 阅读 · 1 评论 -
小白学数据结构——一、线性结构(数组&链表)
数组数组是应用最广泛的一种数据结构,常常被植入到编程语言中,作为基本数据类型使用,因此,在一些教材中,数组并没有被当做一种数据结构单独拿出来讲解(其实数组就是一段连续的内存,即使在物理内存中不是连续的,在逻辑上肯定是连续的)。其实没必要在概念上做纠缠,数组可以当做学习数据结构的敲门砖,以此为基础,了解数据结构的基本概念以及构建方法 数据结构不仅是数据的容器,还要提供对数据的操作方法,比如检索、插入原创 2017-11-12 17:22:04 · 831 阅读 · 0 评论 -
小白学数据结构——零、算法初步(算法分类及最大子数组小试牛刀)
1. 为啥要学数据结构?应用:机器学习,数据挖掘,自然语言处理,密码学,计算机图形学研究:时空复杂度问题找工作常用:贪心,分治,动态规划,树,图2.什么是算法? 把大象装进冰箱分为几步?打开冰箱门,把大象放进去,关上冰箱门。没错,这是一个算法。算法的条件:又穷性(在人类毁灭前算完)确定性(你好漂亮,我有点喜欢你。计算机:这TM怎么衡量)可行性(人类能做的到的)输入&输出3.常原创 2017-11-08 11:09:47 · 1095 阅读 · 0 评论 -
并查集
并查集定义 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。存放数据的几何关系,如{1,2} {3,4} {5}支持操作 建立新集合查找某个元素属于哪个集合合并两个集合均摊时间复杂度原创 2017-11-12 16:39:50 · 440 阅读 · 0 评论 -
小白学数据结构——一、线性结构(栈和队列)
1. 栈和队列定义存放数据的线性表操作:入栈/队列,出栈/队列,判断满/空空间复杂度O(n)单次操作时间复杂度:O(1)区别: 栈:先进后出队列:先进先出 实现数组和链表都可以指针(辅助变量) 栈顶/底指针队头/尾指针关键:出入元素的同时移动指针 详细实现代码请查看 http://blog.csdn.net/wtfmonking/article/details/169891原创 2017-11-08 22:14:11 · 799 阅读 · 0 评论 -
【转】Python实现双向链表(图解)
原文作者 作者 [@小王] http://m.blog.csdn.net/qq490691606/article/details/49948263Python 实现双向链表(图解)双向链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。双向链表基本方法实现(Pytho转载 2017-11-09 16:11:29 · 777 阅读 · 0 评论 -
理解P问题和NP问题
最简单的解释:P:算起来很快的问题NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案对不对NP-hard:比所有的NP问题都难的问题NP-complete:满足两点:是NP hard的问题是NP问题最简单的例子:123,456,789,001是不是质数?对于这个问题,计算机科学家可以用现有算法快速得到答案——123,456,789,001不是质数。无论这个数字是否...原创 2019-08-14 00:13:57 · 982 阅读 · 0 评论