
数据结构与算法
python_tty
努力成为python大牛
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python 实现双链表,栈,队列
1.双链表 class Node(object): def __init__(self, value=None): self._prev = None self.data = value self._next = None def __str__(self): return "Node(%s)"%self.data原创 2017-02-24 17:07:35 · 1449 阅读 · 0 评论 -
求二叉树的所有路径
二叉树的路径:从根结点到叶子结点 15 / 20 6 / \ 8 10 40 / \ \ / 22 23 18 9 12 思路:初始化2个列表,一个存储到达本节点之前的节点,另一个存储所有的路径 # 构造一棵树 class Node(object): """ 节点 """ def __i..原创 2019-02-15 11:53:11 · 1146 阅读 · 1 评论 -
背包算法
问题:有n件物品,每件物品的重量是Wi(i=1,2,…n),物品的价值是Pi(i=1,2,…n),背包能承受的最大重量的T,问如何放置物品,可以使背包中的物品的价值最大? 想法: 最原始的想法:先找到物品的所有组合,共有2n -1个,然后遍历所有的组合,判断物品的质量是否<=T,这种算法的时间复杂度是O(2n+1),空间复杂度是O(2n).不管是时间复杂度还是空间复杂度都比较高,这种算法的可...原创 2019-02-15 14:20:10 · 2006 阅读 · 0 评论 -
插入排序
插入排序相对比较简单,它是原址排序,平均时间复杂度为O(n2),最优时间复杂度为O(n),当数组是正序时达到最优的情况。逆序的时候,时间复杂度最坏,为O(n2)。 思路:插入排序的基本想法就是把数组分为2部分,前一部分是排好序的,后面是待排序的。每一次从待排序的数组中拿出一个数,如果这个数大于已经排好序的数组的最后一个数,那么这个数就插入到排好序的数组的末尾,如果这个数小于排好序的数组的最后一数,...原创 2019-02-15 15:00:00 · 124 阅读 · 0 评论 -
leetcode2-两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4) 输出:7 -&gt; 0 -&gt; ...原创 2019-02-15 18:16:02 · 197 阅读 · 0 评论 -
字符串全排列
求字符串‘abcd’的全排列 思路:递归。 1.固定a, 求bcd的全排列 2.固定b,求cd的全排列 3.固定c,求d的全排列 4.固定b, 求acd的全排列 5.同2 6.同3 rest = [] def CalcAllPermutation(alist, begin, to): if begin == to: rest.append(alist[:]) #...原创 2019-02-18 17:37:31 · 424 阅读 · 0 评论 -
数据结构(一) 线性表
(一)线性表的定义 线性结构的特点是:在数据元素的非空有限集中,(1) 存在唯一的一个被成为”第一个”的数据元素;(2)存在唯一的一个被成为”最后一个”的数据元素;(3)除了第一个之外,其他的元素均只有一个前驱,除了最后一个以外,其他的元素均只有一个后继 线性表是最常用且最简单的一种数据结构,一个线性表是n个数据元素的有限序列。线性表中的数据元素可以是各种各样的,但是同一个线性表中的元素必定具...原创 2018-09-15 19:14:59 · 351 阅读 · 0 评论 -
堆
堆是一个数组,它可以看作一个完全二叉树,树中的节点满足:parent(i) >= left(2i), parent(i) >=right(2i+1)或者parent(i) <= left(2i), parent(i) <=right(2i+1), 前者被成为大顶堆,后者被称为小顶堆。 维护堆的性质: 假设A的左子树和右子树满足堆的性质,但是插入结点i之后,有可能会破坏堆的性...原创 2019-06-12 11:03:13 · 156 阅读 · 0 评论 -
堆排序
堆排序是原址排序,时间复杂度是0(nlgn). 思路:先把待排序的数组A构建成一个堆,那么堆顶是数组中元素的最大值,A[0]和A[n]交换,剩余的n-1个元素继续构建成堆,然后A[0] 和A[n-1]交换,剩余的n-2个元素继续构建成堆,重复上述步骤,直到剩下1个元素结束。 import random def max_heapify(alist, i, heap_size): lc = 2...原创 2019-06-12 14:06:03 · 136 阅读 · 0 评论