![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
Twish
这个作者很懒,什么都没留下…
展开
-
[数据结构][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 · 193 阅读 · 0 评论 -
[数据结构][Python][经典题目]Prim算法
from heapq import heappop,heappush def 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 · 349 阅读 · 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 · 533 阅读 · 0 评论 -
[数据结构][Python]实现单链表操作(增删改)
class Node(object): def __init__(self, val, p=0): self.data = val self.next = p class LinkList(object): def __init__(self): self.head = 0 def __getitem__(self, it...原创 2019-06-02 18:08:27 · 625 阅读 · 0 评论 -
[数据结构][Python][经典题目]最小栈实现
题目 实现一个栈,该栈带有出栈pop、入栈push、取最小元素3个方法。要保证这3个方法的时间复杂度都是O(1) 栈低 栈顶 4 9 7 3 8 5 调用getMin方法,返回最小值3 解题步骤 1、设原有的栈叫做栈A,此时创建一个额外的“备胎”栈B,用于辅助栈A 栈A 栈B 2、当第一个元素入栈A时,让新元素也进入栈B。这个唯一...原创 2019-06-19 00:10:35 · 304 阅读 · 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 · 216 阅读 · 0 评论 -
[数据结构][Python]python实现散列表
散列表的实现常常叫做散列(hashing)。散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的。需要元素间任何排序信息的操作将不会得到有效的支持。 散列表是普通数组概念的推广。如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术。 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效。在散列表中,不是直接把关键...原创 2019-06-03 23:51:23 · 2536 阅读 · 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 · 408 阅读 · 0 评论 -
[数据结构][Python]实现遍历二叉树(递归和非递归)
class Node(object): def __init__(self,value=None,left=None,right=None): self.value = value self.left = left self.right = right def pre_traverse(root): """ 前序遍历 ...原创 2019-06-04 23:54:10 · 1732 阅读 · 0 评论 -
[数据结构][Python][经典题目]链表问题
题目 有一个单项链表,链表有可能出环,如下 方案1 首先从头开始,依次遍历链表中的每一个节点。每遍历一个新节点,就从头检查新节点之前的所有节点,用新节点和此节点之前所有节点一次做比较。如果发现新节点和之前的某个节点相同,则说明改节点被遍历过两次,链表有环;如果之前的所有节点中不存在相同节点,就继续遍历下一个节点,继续重复刚才的操作。 假设该链表节点数为n,则该算法时间复杂度为O(n^2),空间复...原创 2019-06-17 00:43:49 · 327 阅读 · 0 评论 -
[数据结构][Python][经典题目]判断一个数是否为2的整数次幂
十进制 二进制 是否是2的整数次幂 8 1000B 是 16 10000B 是 32 100000B 是 64 1000000B 是 100 1100100B 否 十进制 二进制 原数值-1 是否是2的整数次幂 8 111B 是 16 11111B 是 32 11111B 是 64 111111B 是 100 110001...原创 2019-06-21 00:01:06 · 850 阅读 · 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 · 672 阅读 · 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 · 277 阅读 · 0 评论 -
[数据结构][Python][经典题目]哈夫曼算法
from heapq import heapify,heappush,heappop from itertools import count def huffman(seq,frq): num = count() trees = list(zip(frq,num,seq)) heapify(trees) while len(trees) > 1: ...原创 2019-06-01 22:22:57 · 184 阅读 · 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 · 175 阅读 · 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 · 254 阅读 · 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 · 1657 阅读 · 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 · 493 阅读 · 0 评论 -
[数据结构][Python]计数排序算法
from collections import defaultdict def 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 · 258 阅读 · 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 · 390 阅读 · 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 · 765 阅读 · 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 · 234 阅读 · 0 评论 -
[数据结构][Python][经典题目]二叉搜索树
class Node: lft = None rgt = None def __init__(self,key,val): self.key = key self.val = val def insert(node,key,val): if node is None: return Node(key,val) if node....原创 2019-06-01 16:12:52 · 117 阅读 · 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,hi def select(seq,k): lo,pi,hi = partition(seq) ...原创 2019-06-01 17:11:34 · 207 阅读 · 0 评论 -
[数据结构][Python][经典题目]用AA树结构实现再平衡的二分搜索树
class Node: lft =None rgt = None lvl = 1 def __init__(self,key,val): self.key = key self.val = val def skew(node): if None in [node,node.lft]:return node if node....原创 2019-06-01 18:15:28 · 227 阅读 · 0 评论 -
[数据结构][Python]鸡尾酒排序、桶排序
鸡尾酒排序: #!/usr/bin/python def _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 · 204 阅读 · 0 评论 -
[数据结构][Python]用两个栈实现队列与用两个队列实现栈
题目 用栈模拟一个队列,实现入队、出队 解决方案 让元素1入队 栈A 1 栈B 让元素2入队 栈A 1 2 栈B 让元素3入队 栈A 1 2 3 栈B 这个时候,希望最先入队的1出队。让栈A中的所有元素按顺序出栈,再按照出栈顺序压入栈B 栈A 栈B 3 2 1 让1出队 ...原创 2019-07-02 10:50:11 · 152 阅读 · 0 评论