
数据结构
vivian_ll
这个作者很懒,什么都没留下…
展开
-
五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较
一、贪心法贪心算法的定义:贪心算法(也叫贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到全局最优解,得到的是局部最优解,关键是贪心策略的选择,不同的贪婪策略会导致得到差异非常大的结果。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般...原创 2019-11-27 20:28:55 · 19348 阅读 · 0 评论 -
面试准备——排序算法归纳
1.快速排序排序的时间复杂度最坏情况:以大O记号形式表示的时间复杂度,给出了一个算法的最坏情况,即--对于规模为n的任意输入,算法的运行时间都不会超过O(f(n))最好情况 :大 Ω记号-->如果存在正的常数c和函数g(n),对任意n>>2,有T(n) > c * g(n),即认为:在n足够 大后,g(n)给出了T(n)的一个下界,记为:T(n) =Ω (g(n))...原创 2019-03-19 19:24:34 · 262 阅读 · 0 评论 -
面试准备——常问代码题
题目一:1.给定一个数组,升序数组,将他构建成一个BST思路:升序数组,这就类似于中序遍历二叉树得出的数组,那么根节点就是在数组中间位置,找到中间位置构建根节点,然后中间位置的左右两侧是根节点的左右子树,递归的对左右子树进行处理,得出一颗BST# Definition for a binary tree node.# class TreeNode(object):# def __...原创 2019-03-15 00:43:55 · 519 阅读 · 0 评论 -
面试准备——python 十大经典排序算法
本文转载自:python 十大经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度:平方阶 (O(n...转载 2019-03-05 16:42:39 · 595 阅读 · 0 评论 -
面试准备——栈和队列
栈的特点就是后进先出,需要O(N)的时间才能找到栈中的最值。队列和栈刚好相反,是先进先出,表面上和栈是一对矛盾体,但实际上,都可以利用对方来实现自己。1.用两个栈实现一个队列思路:入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的元素 pop 出来并 push 进栈B,再栈B出栈,如不为空则栈B直接出栈改进:入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的n-1个...原创 2019-03-05 16:14:01 · 236 阅读 · 0 评论 -
面试准备——链表
链表链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像数组,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为链表的内存不是一次性分配的,所以它没有闲置的内存,比起数组,空间效率更高。单向链表:class ListNode: def __init__(...原创 2019-03-05 15:52:10 · 217 阅读 · 0 评论 -
面试准备——二叉树
二叉树1.前序:根-左-右# 先序打印二叉树(递归)def preOrderTraverse(node): if node is None: return None print(node.val) preOrderTraverse(node.left) preOrderTraverse(node.right)# 先序打印二叉树(非递归)d...原创 2019-03-05 11:51:24 · 501 阅读 · 0 评论 -
python数据结构——树
一、树的定义及相关概念树的例子:生物学的分类树、文件系统、网页一个节点的所有子节点独立于另一个节点的子节点。每个叶节点是唯一的。树的概念节点、边、根、路径、子节点、父节点、兄弟节点、子树层数:节点 n 的层数为从根结点到该结点所经过的分支数目。 根节点的层数为零。高度:树的高度等于树中任何节点的最大层数。树的定义:树由一组节点和一组连接节点的边组成。树具有以下属性:树的一个节...原创 2018-10-24 21:35:05 · 2847 阅读 · 0 评论 -
python数据结构——二叉搜索树
一、二叉搜索树**二叉搜索树(BST binary search tree)**是一种比较特殊的二叉树,表现为任意节点的值都比左孩子的值要大,而且小于等于右孩子的值,采用中序遍历BST(Binary Search Tree)就可以的到排序好的元素集合,而且插入删除的时间消耗也比较合理,但是有一个缺点就是内存开销有点大。二叉搜索树的性质1,任意节点x,其左子树中的key不大于x.key,其右子...原创 2018-10-25 20:31:35 · 1672 阅读 · 0 评论 -
C++ 双链表
一、什么是双链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。二、双链表的基本操作创建、遍历、测长、插入、删除#include <iostream>#include <stdio.h>using name...原创 2018-10-23 11:16:43 · 470 阅读 · 0 评论 -
python数据结构——二叉堆
一、堆数据结构 堆(heap) 是一种优先队列。队列是一种先进先出的数据结构。队列的一个重要变种称为优先级队列。使用优先队列能够以任意顺序增加对象,并且能在任意的时间(可能在增加对象的同时)找到(也可能移除)最小的元素,也就是说它比python的min方法更加有效率。在优先级队列中,队列中的项的逻辑顺序由它们的优先级确定。最高优先级项在队列的前面,最低优先级的项在后面。因此,当你将项排入优先级...原创 2018-10-25 10:49:44 · 625 阅读 · 0 评论 -
C++ 单链表
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样将数组存储在一个连续的内存地址空间里,它们可以不是连续的因为他们每个节点保存着下一个节点的引用(地址),所以较之数组来说这是一个优势。...原创 2018-10-22 21:07:05 · 1908 阅读 · 1 评论 -
数据结构与算法分析——第三章 表、栈和队列1
3.1 抽象数据类型 抽象数据类型(ADT):一些操作的集合 理解:数学的抽象;模块化设计;没有实际的数据,只是一种结构,一种对于数据储存的思想。 3.2 表ADT 定义:空表、后继、前驱 操作:PrintList、MakeEmpty、Find、FindKth、Insert、Delete(Find是返回关键字首次出现的位置,FindKth是返回某个位置上的元素) 3.2.1 表的简单数组原创 2017-10-24 11:49:28 · 528 阅读 · 0 评论