python数据结构
python数据结构笔记
Twish
这个作者很懒,什么都没留下…
展开
-
[数据结构][Python]用两个栈实现队列与用两个队列实现栈
题目用栈模拟一个队列,实现入队、出队解决方案让元素1入队栈A1栈B让元素2入队栈A12栈B让元素3入队栈A123栈B这个时候,希望最先入队的1出队。让栈A中的所有元素按顺序出栈,再按照出栈顺序压入栈B栈A栈B321让1出队...原创 2019-07-02 10:50:11 · 165 阅读 · 0 评论 -
[数据结构][Python][经典题目]无序数组排序后的最大相邻差
题目:有一个无序整型数组,如何求出数组排序后的任意两个相邻元素的最大差值?解决方案:1.循环数组,找到最小值和最大值。2.若有N个数,就创建N+1个桶来装数,分别为 0号桶,1号桶,2号桶…N号桶 。3.定义三个大小为N+1的数组。4.循环原数组, 确定每个数被装入哪个桶。如何确定?–>which = (num-min)*N/(max-min),每个桶内只能存放进入该桶的最大...原创 2019-06-21 23:45:33 · 687 阅读 · 0 评论 -
[数据结构][Python][经典题目]判断一个数是否为2的整数次幂
十进制二进制是否是2的整数次幂81000B是1610000B是32100000B是641000000B是1001100100B否十进制二进制原数值-1是否是2的整数次幂8111B是1611111B是3211111B是64111111B是100110001...原创 2019-06-21 00:01:06 · 864 阅读 · 0 评论 -
[数据结构][Python][经典题目]最大公约数
方案1辗转相除法,又名欧几里得算法。定理:两个正整数a和b(a>b),他们的最大公约数等于a除以b 的余数c和b之间的最大公约数。def get_great_division(a,b): if a>b: big = a smal = b else: big = b smal = a if bi...原创 2019-06-20 00:24:31 · 415 阅读 · 0 评论 -
[数据结构][Python][经典题目]最小栈实现
题目实现一个栈,该栈带有出栈pop、入栈push、取最小元素3个方法。要保证这3个方法的时间复杂度都是O(1)栈低栈顶497385调用getMin方法,返回最小值3解题步骤1、设原有的栈叫做栈A,此时创建一个额外的“备胎”栈B,用于辅助栈A栈A栈B2、当第一个元素入栈A时,让新元素也进入栈B。这个唯一...原创 2019-06-19 00:10:35 · 318 阅读 · 0 评论 -
[数据结构][Python][经典题目]链表问题
题目有一个单项链表,链表有可能出环,如下方案1首先从头开始,依次遍历链表中的每一个节点。每遍历一个新节点,就从头检查新节点之前的所有节点,用新节点和此节点之前所有节点一次做比较。如果发现新节点和之前的某个节点相同,则说明改节点被遍历过两次,链表有环;如果之前的所有节点中不存在相同节点,就继续遍历下一个节点,继续重复刚才的操作。假设该链表节点数为n,则该算法时间复杂度为O(n^2),空间复...原创 2019-06-17 00:43:49 · 337 阅读 · 0 评论 -
[数据结构][Python]鸡尾酒排序、桶排序
鸡尾酒排序:#!/usr/bin/pythondef _cocktail_sort(the_list): the_len = len(the_list) if the_len <2:#0和1 print("无需排序") return the_list else: while 1: flag =...原创 2019-06-06 23:43:28 · 212 阅读 · 0 评论 -
[数据结构][Python]实现二叉堆
class BinaryHeap(object): def __init__(self): self.item_list = [0] def insert(self,new_item): self.item_list.append(new_item) self.item_list[0]+=1 self.upward_...原创 2019-06-06 00:06:24 · 242 阅读 · 0 评论 -
[数据结构][Python]实现遍历二叉树(递归和非递归)
class Node(object): def __init__(self,value=None,left=None,right=None): self.value = value self.left = left self.right = rightdef pre_traverse(root): """ 前序遍历 ...原创 2019-06-04 23:54:10 · 1785 阅读 · 0 评论 -
[数据结构][Python]python实现散列表
散列表的实现常常叫做散列(hashing)。散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的。需要元素间任何排序信息的操作将不会得到有效的支持。散列表是普通数组概念的推广。如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术。当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效。在散列表中,不是直接把关键...原创 2019-06-03 23:51:23 · 2551 阅读 · 0 评论 -
[数据结构][Python]实现stack和queue
栈:class Stack(object): def __init__(self,size): self.size=size self.stack = [] self.top = -1 def push(self,item): if self.is_full(): raise Excepti...原创 2019-06-03 23:11:20 · 221 阅读 · 0 评论 -
[数据结构][Python]实现单链表操作(增删改)
class Node(object): def __init__(self, val, p=0): self.data = val self.next = pclass LinkList(object): def __init__(self): self.head = 0 def __getitem__(self, it...原创 2019-06-02 18:08:27 · 661 阅读 · 0 评论 -
[数据结构][Python][经典题目]找出重复的整数
无优化版本,两个for循环,遍历做判断def repeatNum(A): for i in range(len(A)): for j in range(len(A)): if A[i]==A[j]: return A[i]rec_repeat = repeatNum(A)print("case2: repeat ...原创 2019-06-02 16:32:58 · 546 阅读 · 0 评论 -
[数据结构][Python][经典题目]Prim算法
from heapq import heappop,heappushdef prim(G,s): P,Q = {},[(0,None,s)] while Q: _, p,u = heappop(Q) if u in P:continue P[u] = p for v,w in G[u].items(): ...原创 2019-06-02 15:18:12 · 358 阅读 · 0 评论 -
[数据结构][Python][经典题目]kruskal算法
def find(C,u): if C[u]!=u: C[u] = find(C,C[u]) return C[u]def union(C,R,u,v): u,v =find(C,u),find(C,v) if R[u]>R[v]: C[v] = u else: C[u]=v if R[u]==...原创 2019-06-01 22:59:52 · 284 阅读 · 0 评论 -
[数据结构][Python][经典题目]哈夫曼算法
from heapq import heapify,heappush,heappopfrom itertools import countdef huffman(seq,frq): num = count() trees = list(zip(frq,num,seq)) heapify(trees) while len(trees) > 1: ...原创 2019-06-01 22:22:57 · 193 阅读 · 0 评论 -
[数据结构][Python][经典题目]用AA树结构实现再平衡的二分搜索树
class Node: lft =None rgt = None lvl = 1 def __init__(self,key,val): self.key = key self.val = valdef skew(node): if None in [node,node.lft]:return node if node....原创 2019-06-01 18:15:28 · 234 阅读 · 0 评论 -
[数据结构][Python][经典题目]无序序列中第k大的数引申快排
def partition(seq): pi, seq, = seq[0],seq[1:] lo = [x for x in seq if x <= pi] hi = [x for x in seq if x > pi] return lo,pi,hidef select(seq,k): lo,pi,hi = partition(seq) ...原创 2019-06-01 17:11:34 · 217 阅读 · 0 评论 -
[数据结构][Python][经典题目]二叉搜索树
class Node: lft = None rgt = None def __init__(self,key,val): self.key = key self.val = valdef insert(node,key,val): if node is None: return Node(key,val) if node....原创 2019-06-01 16:12:52 · 125 阅读 · 0 评论 -
[数据结构][Python]DAG有向无环图和拓扑排序
def topsort(G): count = dict((u,0) for u in G) for u in G: for v in G[u]: count[v] +=1 Q = [u for u in G if count[u] == 0] S = [] while Q: u = Q.pop() ...原创 2019-05-28 00:02:07 · 783 阅读 · 0 评论 -
[数据结构][Python][经典题目]明星问题
在人群中找出以为明星人士。该明星不认识其他人群中的其他人,但是人人都认识这位明星。暴力求解方案:def naive_celeb(G): n = len(G) for u in range(n): for v in range(n): if u ==v:continue if G[u][v]: break ...原创 2019-05-26 23:38:03 · 407 阅读 · 0 评论 -
[数据结构][Python]计数排序算法
from collections import defaultdictdef counting_sort(A,key=lambda x:x): B,C = [],defaultdict(list) for x in A: C[key(x)].append(x) for k in range(min(C),max(C)+1): B.exten...原创 2019-05-26 22:01:49 · 270 阅读 · 0 评论 -
[数据结构][Python][经典题目]寻找最大排列问题
递归:def naive_max_perm(M,A=None): if A is None: A = set(range(len(M))) if len(A)==1:return A B = set(M[i] for i in A) C = A-B if C: A.remove(C.pop()) return...原创 2019-05-26 18:22:50 · 499 阅读 · 0 评论 -
[数据结构][Python]递归版插入排序和选择排序
插入排序递归版:def ins_sort_rec(seq,i): if i==0:return ins_sort_rec(seq,i-1) j=i while j>0 and seq[j-1]>seq[j]: seq[j-1], seq[j]= seq[j],seq[j-1] j-=1插入排序非递归版:def in...原创 2019-05-26 16:12:55 · 1666 阅读 · 0 评论 -
[数据结构][Python][经典题目]拼盘问题
经典智力问题:如图所示图中有一块角上缺一块方格的国际象棋棋盘,现在我们想用L型砖块拼出这样一块棋盘。def cover(board,lab=1,top=0,left=0,side=None): if side is None: side=len(board) s = side//2 offsets = (0,-1),(side-1,0) for dy_oute...原创 2019-05-26 15:11:18 · 269 阅读 · 0 评论 -
[数据结构][Python]一些基本递归式的解决方案和应用案例
最近在看关于python算法的书,做一下笔记递归式解决方案应用案例T(n)=T(n-1)+1Θ(n)序列化处理问题,归简操作T(n)=T(n-1)+nΘ(n^2)握手问题T(n)=2T(n-1)+1Θ(2^n)汉诺塔问题T(n)=2T(n-1)+nΘ(2^n)T(n)=T(n/2)+1Θ(lgn)二分搜索问题T(n)=T(n...原创 2019-05-25 22:22:03 · 180 阅读 · 0 评论 -
[数据结构][Python][经典题目]变位字符
题目:请找出一种方法,是我们能够查出两个字符串之间是否存在着字符变位。比如“debit card”和"bad credit"def anagram(a,b): a = list(a) b = list(b) a.sort() b.sort() if a==b: return True else: return F...原创 2019-05-22 00:21:26 · 201 阅读 · 0 评论 -
[数据结构][Python][经典题目]寻找全排列下一个数
题目:给出一个正整数,找出这个正整数的所有数字全排列的下一个数思路:以12345为例,为了和原数接近,需要尽量保持高位不变,低位在最小的范围内变换顺序。至于变换的范围大小取决于当前整数的逆序列区域。逆序区域逆序区域12354如上图所示,12354的逆序区域是最后两位,仅看这两位已经是最大的组合。若要最接近原数,又比原数大,必须从第三位开始改变。12...原创 2019-09-22 23:46:24 · 428 阅读 · 0 评论 -
[数据结构][Python][经典题目][贪心算法]删除K个数字获得删除后的最小值
题目:给出一个整数,从该整数中去掉K个数字,要求剩下的数字形成的新整数尽可能小假设给出一个整数1593212,删除三个数字,新整数的最小情况是121230200,删去一个数字,新整数的最小情况是200解题思路:这个题目要求我们删除K个数字,我们不妨把问题简化一下,如果只删除一个数字,如何让新整数的值变得最小?这时我们可能会想到优先删除这组数字中最大的数字,但是这是不对的,举例说明:35...原创 2019-09-23 23:34:15 · 1014 阅读 · 0 评论 -
[数据结构][Python][经典题目]大数求和
题目LeetCode上的算法第415题题目描述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。LeetCode地址:https://le...原创 2019-09-23 23:53:19 · 320 阅读 · 0 评论 -
[数据结构][Python][经典题目][动态规划][经典01背包]求解金矿问题
题目:有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?金矿编号黄金储量需要人数1500522003330044350354005思路:1、首...原创 2019-09-27 00:23:42 · 787 阅读 · 0 评论