
算法
文章平均质量分 64
伟伟哦
我只是一名小学生 能力一般 水平有限 一直抱着学习的态度
展开
-
跳表:为什么Redis一定要用跳表来实现有序集合?
跳表因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现如果数据存储在链表中,就真的没法用二分查找算法了吗?我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list)如何理解“跳表”?因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现如果数据存储在链表中,就真的没法用二分查找算法了吗?我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list)但是它确实是一种各方面原创 2020-12-22 17:28:22 · 228 阅读 · 0 评论 -
php 希尔排序
/*1、间隔为4,每间隔4个人,这些人排成一组2、在每一组的组内进行排序,数组交换,比大小 3、重新设置间隔分组,例如 黄色一组 ,黑色一组 、在进行组内排序交换(用的是插入法)重点、分组的间隔都会越来越小,最后变成1,如果变成1的时候,说明已变成了一组排序用的是插入排序 分组间隔不停的减少,不停的分组,不停做组内的排序最终变为1为止*/希尔排序算法的php实现2php实现希尔排序...原创 2020-08-31 16:54:43 · 189 阅读 · 0 评论 -
php 二分查找
所谓二分查找,它有一个重要前提,该数组本身已经是一个有序数组,如果该数组不是有序的,则必须先排序再查找#findVal查找这个数function binarySearch($arr,$findVal,$leftIndex,$rightIndex){ //当$rightIndex下标不能 > $leftIndex 说明没有数 if($rightIndex < $leftIn...原创 2020-03-22 14:00:06 · 76 阅读 · 0 评论 -
python 背包问题
一个小偷在某个商店发现有n个商品,第i个商品价值Vi元,中Wi千克。他希望拿走的价值尽量高,但他的背包最多只能容纳W千克的东西。他应该拿走拿些商品?0-1背包: 对于一个商品,小偷要么把它完整拿走,要么留下。不能只拿走一部分,或把一个商品拿走多次(商品为金条)分数背包: 对于一个商品,小偷可以拿走其中任意一部分(商品为金砂)...原创 2019-12-16 19:00:33 · 500 阅读 · 0 评论 -
Python 贪心算法
贪心算法(又称贪婪算法) 是指, 在对问题求解时,总是做出在当前看来时最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解贪心算法并不保证会得到最优解,但是在某些问题上贪心算法的解就是最优解。要会判断一个问题能否用贪心算法来计算假设商店老板需要找零n元钱,钱币的面额有:100元、50元、20元、5元、1元、如何找零使得所需钱币的数量最少?#! /usr/bin/...原创 2019-12-04 23:48:29 · 814 阅读 · 0 评论 -
python 基数排序
多关键字排序: 加入现在又一个员工表,要求按照薪资排序,年龄相同的员工按照年龄排序先按照年龄进行排序,再按照薪资进行稳定的排序原创 2019-12-03 23:39:25 · 121 阅读 · 0 评论 -
python 桶的排序
在技术排序中,如果元素的范围比较(比如 在1到1亿之间),如何改造算法桶排序(Bucket Sort): 首先将元素分在不同的桶中,在对每个桶中的元素排序原创 2019-12-03 20:46:11 · 202 阅读 · 0 评论 -
python 计数排序
对列表进行排序,已知列表中的数范围都在0到100之间,设计时间复杂度为O(n)的算法原创 2019-12-03 00:41:36 · 165 阅读 · 0 评论 -
python 希尔排序
希尔排序是一种分组插入排序算法首先取一个整数 d1d_1d1 = n/2, 将元素分为d1d_1d1个组,每组相邻量元素之间距离为 d1d_1d1,在各组内进行直接插入排序取第二个整数 d2d_2d2= d1d_1d1/2,重复上述分组排序过程,直到 d1d_1d1,即所有元素在同一组进行直接插入排序希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序;最后一趟排序使得...原创 2019-12-02 20:41:05 · 376 阅读 · 0 评论 -
python 归并排序
归并排序的实现分解: 将列表越分越小,直至分成一个元素终止条件: 一个元素是有序的 一个或者零个合并: 将两个有序列表归并,列表越来越大def merge_sort_test(li,low,high): if low < high: #至少有两个元素,递归 mid = (low + high) //2 ...原创 2019-11-18 14:51:53 · 162 阅读 · 0 评论 -
python 堆排序--topk实现
现在又n个数,设计算法得到前k大的数 (k<n)解决思路排序后切片O(nlogn)排序LowB三人组 O(mn) m取10个1取列表前k个元素建立一个小根堆。堆顶就是目前第k大的数依次向后遍历原列表,对于列表中的元素,如果小于堆顶,则忽略该元素;如果大于堆顶,则将堆顶更换为该元素,并且 对堆进行一次调整遍历列表所有元素后,倒序弹出堆顶...原创 2019-11-18 14:04:17 · 1219 阅读 · 1 评论 -
python 堆排序
树是一种数据结构 比如 目录结构树是一种可以递归定义的数据结构树是由n个节点组成的集合:如果 n=0, 那这是一颗空树如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树根节点、叶子节点树的深度(高度)树的度孩子节点/父节点子树E是I的父节点,I是E的子节点二叉树二叉树: 度不超过2的树每个节点最多由两个孩子...原创 2019-11-09 13:24:06 · 142 阅读 · 0 评论 -
python 快速排序
快速排序的时间复杂度: O(nlogn)快速排序: 快快速排序思路:取一个元素p (第一个元素), 使元素p归位:列表被p分成两部分,左边都比p小,右边都比p大递归完成排序刚开始把5的元素存起来找比5的大的数放到这个空位上7比5大就放到上图的空位了这样一次类推def partition(li,left,right): #刚开始初始把元素存在来,不能写零...原创 2019-11-02 17:30:15 · 121 阅读 · 0 评论 -
python 插入排序
初始时手里(有序区)只有一张牌每次(从无序区)摸一张牌,插入到手里已有的正确位置def insert_sort(li): for i in range(1, len(li)): #i 表示摸到的牌的下标 tmp = li[i] j = i -1 #j指的是手里的牌的下标 #大的牌进入 小的牌退出 while j ...原创 2019-11-02 15:22:11 · 100 阅读 · 0 评论 -
python 选择排序
一趟排序记录最小的数,放到第一个位置 再一趟排序记录列表无序区最小的数,放到第二个位置无序区最小数的位置遍历一遍找到最小的数min 都是O(n)removeO(n)def select_sort(li): for i in range(len(li)-1): #大循环 #记录最小出现的位置,假设第一个值是最小 min_loc = i ...原创 2019-11-02 14:51:22 · 96 阅读 · 0 评论 -
python 冒泡
列表每两个相邻的数,如果前面比后面大,则交换这个两个数一趟排序完成后,则无序区减少一个数,有序区增加一个数大循环是要循环几次,小循环是里边的元素交换位置 ,小循环箭头要和下一个元素比较大小import randomdef bubble_sort(li): for i in range(len(li)-1): for j in range(len(li)-i-1)...原创 2019-11-02 14:31:04 · 184 阅读 · 0 评论 -
python 二分查找
二分查找: 又叫做折半查找,从有序列表的初始候选区li[o:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半n就是列表的长度left:0right:n-12指向的就是3 ,因为列表是从0开始的def binary_search(li,val): left = 0 right = len(li)-1 #说明候选区有值...原创 2019-10-29 20:32:27 · 267 阅读 · 0 评论 -
python 顺序查找
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。def linear_search(li,val): for ind, v in enumerate(li): if v = val: retu...原创 2019-10-28 15:11:09 · 838 阅读 · 0 评论