数据结构和算法
西檬饭
这个作者很懒,什么都没留下…
展开
-
14 种算法面试模式
在知乎上看到一篇介绍编程模式的文章,觉得挺不错就学习一下。原文译文在这里 https://www.jiqizhixin.com/articles/2019-06-12-11英文原文没有找到,像是给一门课程《Grokking the Coding Interview: Patterns for Coding Questions》打广告。如果上过刘宇波的算法课、看过剑指offer那么对上面说到的...原创 2019-06-17 18:07:34 · 2111 阅读 · 0 评论 -
Python使用list和单向链表实现栈
1. 代码实现class ArrStack: """ 使用list实现栈,第一个元素为栈底,最后一个元素为栈顶 """ def __init__(self): """ 初始化为空list """ self.items = [] def stackin(self, value): ...原创 2019-06-23 17:31:01 · 280 阅读 · 0 评论 -
Python使用list和单向链表实现队列
1. 代码实现class ArrQueue: """ 使用list实现队列 """ def __init__(self): self.items = [] def enque(self, val): """ 入队,list的尾为队首 :param val: :return: ...原创 2019-06-23 17:43:58 · 393 阅读 · 0 评论 -
Python linkedlist及链表的反转
# -*- coding: utf-8 -*-# @Time : 2019/5/20 20:41# @Author : shaocanfan# @File : reverse_linklist.pyclass Node: def __init__(self, data=None, next=None): self.data = data ...原创 2019-05-20 22:43:03 · 514 阅读 · 0 评论 -
Python 哈希表
参考翻译自:《复杂性思考》 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity004.html使用哈希表可以进行非常快速的查找操作,查找时间为常数,同时不需要元素排列有序 python数据结构与算法——哈希表 哈希表 学习笔记参考翻译自:《复杂性思考》 及对应的online版本:http://...转载 2019-05-23 22:35:57 · 2670 阅读 · 0 评论 -
Python 哈希查找及哈希表的实现
python中lis和array是常见的线性结构,创建数组的时候,内存开辟一块连续的,大小确定的空间用于存放数据。再说说链表,由于链表包含了一个数据域和指针域,链表在内存中不需要连续,无论下一个节点在哪里,上一个节点总是携带下一个节点的位置。原创 2019-05-30 23:15:41 · 6406 阅读 · 0 评论 -
数据结构-堆(heap)与堆的Python实现
1.什么是堆数据结构-树介绍了什么是树,以及二叉树的实现。还记得树的三种特殊结构吗?完美二叉树,满二叉树和完全二叉树。这里介绍的堆结构就是一种完全二叉树。堆可分为最大堆和最小堆,区别就是父节点是否大于所有子节点。最大堆的父节点大于它的子节点,而最小堆中子节点大于父节点。看图有个清晰的认识:2. 堆的表示堆可以使用list实现,就是按照层序遍历顺序将每个节点上的值存放在数组中...原创 2018-09-17 20:46:49 · 16899 阅读 · 3 评论 -
数据结构-树
1. 什么是树树结构是一种包括节点(nodes)和边(edges)的拥有层级关系的一种结构2. 树中的概念根节点(root): 树的最上层的节点,任何非空的树都有一个节点 路径(path): 从起始节点到终止节点经历过的边父亲(parent):除了根节点,每个节点的上一层边连接的节点就是它的父亲(节点) 孩子(children): 每个节点由边指向的下一层节点 兄弟(si...原创 2018-09-17 11:35:30 · 2596 阅读 · 0 评论 -
O(n^2)时间复杂度的排序算法——选择排序
选择排序的想法通俗版又到了一年中秋佳节,满街的柚子引得老王直流口水。然而从街头到街尾这么多的水果摊,哪个摊位的柚子性价比最高呢?老王不知道,但是他想到了一个法子能够选出性价比最高的水果摊。他先假定街头的第一个水果摊的柚子性价比最高,然后他从街头到结尾,挨个水果摊走访一遍,每次遇到性价比比之前认定的性价比高,就拿笔记下这个水果摊的位置,并以把水果摊作为比对的对象,继续走访。等他走访完街尾...原创 2018-09-15 00:53:50 · 1157 阅读 · 0 评论 -
O(n^2)时间复杂度的排序算法——插入排序
插入排序的想法通俗版:从名字说起,想象我们在排队,你想插入到队伍中靠前的位置。 插入规定:保证你相邻的前面一个人同意,你才能队伍的前一个位置挪。 在往队伍前面挪之前你得先从现在在队伍中的位置让出来,让前面的那个人可以往后移腾出一个位置给你,你才能向前。 当前面的一个人同意跟你换了,那么这个人就往后移动到你之前所在的位置; 那它的位置上就空了之后,你在队伍中的位置就向前移了一个,...原创 2018-09-14 12:22:54 · 332 阅读 · 0 评论 -
O(nlogn)时间复杂度的排序算法——归并排序
1. 分治的思想:先把问题分解为一个个小问题,然后再逐个求解这些小问题,最后再重建原问题的解。2.归并排序所谓的归并就是将已经解决的各个小问题的解合并起来得到原问题的解。归并排序利用分治的思想,将待排序的n个元素分成n/2个子序列,然后将每个子序列排好序,再两两合并再排序,直到最后变成有序序列。3. 实现方式在排序算法的实现中,常用的实现方式有两种:(1)自顶向下的递归法使用递...原创 2018-09-19 16:22:27 · 2326 阅读 · 0 评论 -
鸡尾酒排序
鸡尾酒排序的流程先对数组从左到右进行升序的冒泡排序; 再对数组进行从右到左的降序的冒泡排序; 以此类推,持续的、依次的改变冒泡的方向,并不断缩小没有排序的数组范围;一个动图(来自hujingshuang): python实现def cocktail_sort(seq): length = len(seq) i = 0 while i &lt...原创 2018-08-20 22:47:44 · 559 阅读 · 0 评论 -
桶排序/基数排序
基数排序不用比较每个数的大小而是通过将每个数不同位数上的值放到桶里对应的位置,先排完个位再排十位以此类推。排序过程比如输入一个无序数列:res = [95, 45, 15, 78, 814, 51, 24, 12] 先求出每个数个位上的数,然后把这个数放到对应的桶的位置上。如上图第一个数是95,个位是5,我们新建一个长度与数列长度相同的桶bucket,将这个数放到第,5个位置上...原创 2018-08-20 16:36:23 · 501 阅读 · 0 评论 -
Python算法-排序
1. 冒泡排序def bubble_sort(seq): n = len(seq) for i in range(n-1): for j in range(n-1-i): # compare with the left if seq[j]>seq[j+1]: seq[j],seq[j+1] = seq...转载 2018-08-07 09:35:27 · 244 阅读 · 0 评论 -
window下使用MinGW,Cmake和CLion配置C++开发环境
之前没有使用过C++,琢磨着哪一个IDE开发C++比较好,正好上一门数据结构的和算法的课,老师使用的CLion,于是就入坑了。学生版的免费,不用破解。至于为什么要使用MinGW而不使用Visual Studio,因为环境选择Visual Studio, 不支持CLion的debug功能。于是果断改用MinGW。主要参考这篇文章https://blog.csdn.net/u012005313...原创 2019-03-09 20:31:17 · 5480 阅读 · 2 评论 -
O(n^2)时间复杂度的算法 学习笔记一
刘宇波《算法与数据结构》 学习笔记为什么要学O(n^2)时间复杂度的算法?基础, 可由简单衍生出复杂的算法简单场景下易于实现特殊情况下,可能更优作为的子过程,对复杂排序算法优化准备工作为了方便排序算法的测试,先创建一个随机数产生方法和一个打印方法。新建一个头文件 SortTestHelper.h // // Created by BMElab on 9/3/2019....原创 2019-03-09 22:24:07 · 813 阅读 · 0 评论 -
O(n^2)时间复杂度的算法 学习笔记二
冒泡排序的实现#include <iostream>#include "SortTestHelper.h"#include "InsertSionSort.h"#include "SelectionSort.h"void原创 2019-03-13 14:17:53 · 1000 阅读 · 0 评论 -
O(n^2)时间复杂度的算法 学习笔记三 希尔排序
希尔排序的实现希尔排序是插入排序的一个变种,利用了插入排序在近乎有序时能高效排序的特性。思路:将一个数组分成多个小数组,对一个数组进行插入排序,最后对近乎有序的整个数组进行最后一趟排序。其中分成多少个小数组即gap取多少对排序效率有影响。比如4632151061291115131820按照gap=3划分, 得到第一组索引为0,4,8的值第...原创 2019-03-15 09:46:31 · 1668 阅读 · 0 评论 -
linked list C++实现
Youtube上很好一个讲解视频:How to Create a Linked List C++ Introduction to Linked Lists插入第一个元素:void insertAsFistElement(node *&head, node *&last, int data){ node *tmp = new node; tmp->data...原创 2019-03-13 22:41:26 · 5277 阅读 · 0 评论 -
牛客网 链表 错题集
2019年6月23日概念不清单向链表队列使用链表作为底层数据结构实现的队列适用于压缩存储稀疏矩阵的两种存储结构是三元组表的结点存储了行row、列col、值value三种信息,是主要用来存储稀疏矩阵的一种数据结构。十字链表将行单链表和列单链表结合起来存储稀疏矩阵。邻接矩阵空间复杂度达O(n2),不适于存储稀疏矩阵。二叉链表又名左孩子右兄弟表示法,可用于表示树或森林。广义...原创 2019-06-23 13:38:28 · 271 阅读 · 0 评论