数据结构和算法
通过python实现常用数据结构和算法,提高自己的内功本领
aJupyter
自然语言处理方向在读硕士生,CSDN人工智能领域优质创作者,语雀知识库构建者,欢迎大家交流~
https://github.com/aJupyter
展开
-
1.数据结构和算法
数据结构可以分为 「逻辑结构」 和 「物理结构」。逻辑结构可分为:集合结构、线性结构、树形结构、图形结构。物理结构可分为:顺序存储结构、链式存储结构。「逻辑结构」指的是数据之间的 关系,「物理结构」指的是这种关系 在计算机中的表现形式。例如:线性表中的「栈」,其数据元素之间的关系是一对一的,除头和尾结点之外的每个结点都有唯一的前驱和唯一的后继,这体现的是逻辑结构。原创 2024-04-04 11:08:04 · 1295 阅读 · 0 评论 -
三种方法筛质数,再学不会来打我 (朴素筛、埃式筛、线性筛)
发个爽文引流一下文章目录QuestionIdeasCodeQuestion给定一个正整数 n,请你求出 1∼n 中质数的个数。输入格式共一行,包含整数 n。输出格式共一行,包含一个整数,表示 1∼n 中质数的个数。数据范围1≤n≤106输入样例:8输出样例:4Ideas三种方法,再学不会来打我CodeN = int(1e6+10)primes = [0 for i in range(N)]st = [0 for i in range(N)] # 0代表未被筛过 1代.原创 2022-04-05 17:29:37 · 282 阅读 · 0 评论 -
动态规划从入门到精通—背包④讲
文章目录一、01背包问题二、完全背包问题三、多重背包问题四、分组背包一、01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0原创 2022-04-04 20:04:36 · 319 阅读 · 0 评论 -
数论基础及其代码实现
文章目录欧几里得最小公倍数筛法求质数(质数筛)算术基本定理多重集的排列数欧几里得# 欧几里得 求最大公约数# 内置函数a,b = 1,5import mathres = math.gcd(a,b)print(res)# 自己写def gcd(a,b): return gcd(b,a%b) if b else aprint(gcd(a,b))最小公倍数import mathmath.lcm(2,6)筛法求质数(质数筛)# 筛法求素数 O(N)# 可以得到2-n内的原创 2022-03-21 21:29:11 · 527 阅读 · 0 评论 -
冒泡排序(easy)
冒泡排序O(n^2)def buble(n): for i in range(n-1): for j in range(n-1): if lis[j] > lis[j+1]: lis[j],lis[j+1] = lis[j+1],lis[j]lis = [3,2,1]buble(3)print(lis)原创 2022-03-20 21:27:02 · 121 阅读 · 0 评论 -
归并排序(排序)
文章目录QuestionIdeasCodeQuestion给定你一个长度为 n 的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5Ideasstep1:确定分界点 mid = (l原创 2022-03-13 11:15:12 · 196 阅读 · 2 评论 -
Python内置方法的时间复杂度
最近刷数据结构和算法题,有些方法自己实现非常繁琐,用内置方法不知道时间复杂度,这篇blog供查询,实际上常用的也就那么几个本文中,’n’代表容器中元素的数量,’k’代表参数的值,或者参数的数量。列表(list)以完全随机的列表考虑平均情况。列表是以数组(Array)实现的。最大的开销发生在超过当前分配大小的增长,这种情况下所有元素都需要移动;或者是在起始位置附近插入或者删除元素,这种情况下所有在该位置后面的元素都需要移动。如果你需要在一个队列的两端进行增删的操作,应当使用collections..原创 2022-03-12 17:45:23 · 307 阅读 · 4 评论 -
python排列
def dfs(i,n): # 代表从第i个位置填到第n个位置 if i > n : for j in range(1,n+1): print(loca[j],end=' ') print() # 换行 return print('begin') for z in range(1,n+1): #看看哪个数可以填 if sta[z] != 1: sta[z] =原创 2022-03-02 00:35:54 · 456 阅读 · 0 评论 -
迭代遍历二叉树
需要画图理解,递归是好写,但是性能垃圾文章目录前序遍历中序遍历后序遍历前序遍历思路:用栈实现,先处理当前节点,右孩子先入栈,左孩子后入栈。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.rig.原创 2022-01-29 22:29:01 · 283 阅读 · 0 评论 -
二叉树理论基础
满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。二叉搜索树前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树。● 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;● 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;● 它的左、右子树也分别为二叉排序树平衡二叉搜索树平衡二原创 2022-01-29 21:49:15 · 139 阅读 · 0 评论 -
堆操作及堆排序
文章目录堆操作堆排序堆操作def heap_insert(lis,index): while lis[index] > lis[int((index-1) / 2)]: # 当前节点大于父节点 lis[index],lis[int((index-1) / 2)] = lis[int((index-1) / 2)], lis[index] index = int((index-1) / 2)def heapify(lis,index,size):原创 2022-01-07 21:18:14 · 236 阅读 · 0 评论 -
荷兰国旗问题&快排
文章目录问题一问题二快排问题一给定一-个数组arr,和一-个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度0(1),时间复杂度0 (N)def partion1(lis,num,l,r): i = l less = l # <=区右边界 while(i<=r): if lis[i] <= num: lis[i],lis[less] = lis[less],lis[i]原创 2022-01-04 21:33:45 · 243 阅读 · 0 评论 -
归并排序应用:小数之和
今天元旦,正儿八经写个面试题解文章目录QuestionIdeaCodeQuestion一个数组,从左到右比该数小的数的和就是该数的小组和,所有数的小数和就是数组的小数和。求小数和。例如:【1,2,4,1】1的左边没有比他小的 小数和 02的左边1比他小 小数和 14的左边 1 和 2 比他小 小数和 31的左边没有比他小的 小数和 0数组的小数和为0+1+3+0 = 4Idea数从左到右小的数,反过来就是数从右到左大的数1的右边有 2 4大 =》2 * 12的右边有 4 .原创 2022-01-01 23:05:15 · 237 阅读 · 0 评论 -
2021.12.30再肝算法(三)
# 归并排序def merge_sort(lis,left,right): if left == right: return lis middle = left + (right - left) // 2 # 左边归并 merge_sort(lis,left,middle) # 右边归并 merge_sort(lis,middle+1,right) merge(lis,left,middle,right) return原创 2021-12-30 19:30:51 · 200 阅读 · 0 评论 -
数组存储规律——针对于Python
数组数组是存放在连续内存空间上的相同类型数据的集合。数组的元素是不能删的,只能覆盖。python 二维数组元素也是连续的 相邻元素之间地址差1个int 4个字节lis = [[1,2],[3,4]]print(id(lis[0][0]),id(lis[0][1]))print(id(lis[1][0]),id(lis[1][1]))140730176112288 140730176112320140730176112352 140730176112384另外在python里面 全都是l原创 2021-12-24 22:16:57 · 655 阅读 · 0 评论 -
2021.12.7再肝算法(二)
文章目录一、顺序查找二、二分查找一、顺序查找def liner_search(lis:list,value:int)->int(): for i in range(len(lis)): if lis[i] == value: return i else: reutrn -1二、二分查找# 非递归def binary_search(lis:list,value:int)->int: left = 0 # 左原创 2021-12-07 23:57:02 · 156 阅读 · 0 评论 -
2021.12.5再肝算法(一)
def choose_sort(lis:list)->list: n = len(lis) for i in range(n-1): a = i # 最小元素指针 for j in range(i+1,n): # 从后面找一个最小的元素 if lis[j] < lis[a]: a = j if a != i: lis[i],lis原创 2021-12-05 22:32:15 · 366 阅读 · 2 评论 -
❤❤算法基础&递归&查找&十大排序算法,献给快要开学的你❤❤
算法入门系列原创 2021-08-20 13:15:50 · 307 阅读 · 7 评论 -
数据结构易错习题
原创 2021-07-24 12:21:08 · 209 阅读 · 4 评论 -
二、数据结构基础+栈+队列+迷宫问题
文章目录一、数据结构1.数据结构分类2.列表/数组二、栈1.栈的实现1.2小应用:括号匹配问题三、队列1.队列的实现2.双向队列四、迷宫问题1.栈——深度优先搜索2.队列——广度优先搜索一、数据结构数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中元素之间的关系组成。简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。N.Wirth: “程序=数据结构+算法”1.数据结构分类数据结构按照其逻辑结构可分为线性结构、树结构、原创 2021-01-08 18:10:18 · 1080 阅读 · 3 评论 -
一、算法基础+递归算法+查找算法
文章目录一、算法的重要性二、算法一、算法的重要性算法工程师锻炼代码思维,更高效写代码应聘面试(笔试/机试)二、算法原创 2021-01-02 23:21:31 · 750 阅读 · 1 评论