自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 红黑树的删除(二):自顶向下

自顶向下的删除

2020-07-25 13:57:38 253

原创 红黑树的删除(一):自底向上

RBTree  红黑树的添加操作较为简单,网上有许多详细代码与解释,本文不再赘述。本文将详细介绍红黑树的删除操作。定义概念3-节点:由一个红节点连接一个黑节点组成。例:(2-7),(7.2-7.3)。为便于描述,将位于3-节点中的节点直接称为3-节点。例:节点2是3-节点。对于不是叶节点的3-节点,有左、中、右三个子节点。例:节点1,节点3,节点(7.2-7.3) 分别为节点(2-7)的左子节点、中子节点、右子节点。2-节点:由一个左子节点不为红节点的黑节点组成。例:节点1,节点9叶节点:没

2020-06-22 16:52:57 190

原创 接雨水:双指针法

  以列表的形式给定nnn个非负整数表示每个宽度为111的柱子的高度图,列表的索引表示对应柱子左边界所处坐标。计算按此排列的柱子,下雨之后能接多少雨水。如:[0,1,0,2,1,0,1,3,2,1,2,1][0,1,0,2,1,0,1,3,2,1,2,1][0,1,0,2,1,0,1,3,2,1,2,1]可以接666个单位的雨水。  容易想到双指针法,关键在于确定跟新指针的法则。  水最多可以...

2020-04-04 14:36:55 180

原创 梯度下降算法进行线性回归

原理和思路都很简单,不多说,上代码。import numpy as npclass GradientDescent(object): def __init__(self, data_file, learning_rate=0.0001, iterations=1000): self.learning_rate = learning_rate self...

2020-04-02 13:41:40 123

原创 破解bilibili滑块验证码

  其实我并没有成功,想要模拟人工滑动轨迹骗过验证太难了,我试了好多参数,每次都被拒绝了。我琢磨着是不是要考虑用微积分去设计运动轨迹。。。  思路其实很简单,分别获取完整图片和不完整图片,比较图片的缺口,再将滑块滑到缺口处即可。若要说存在难度的地方,或许就是中间执行了一步js。  如果有哪位大神成功模拟滑动轨迹,烦请赐教。。。  不多说了,上代码。import timefrom PIL ...

2020-04-01 13:16:20 417

原创 圆圈中最后剩下的数字

  0,1,,n−10,1,,n-10,1,,n−1共nnn个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。  题目并不难,若用数组lll表示圆圈,关键在于当前索引加上步数(index+m−1index+m-1index+m−1)若超出数组范围应该如何处理。  不难发现,从任意索引移动m−1m-1m−1步时会回到原索引位置,因此当index+...

2020-03-30 23:30:00 134

原创 多线程多进程爬取房天下

  房天下的爬取本身没有技术难点,不做过多讲解。只讲一讲在爬取过程中遇到的反扒问题。  房天下设置了页面的跳转作为反扒措施,即:在访问网页时会进行多次跳转才会进入到真正的目标页面。因此我编写了find_real_url来解决这个问题。在编写程序时,通过观察跳转页面的网页源码,可以比较容易的观察到跳转网页的源码中存在新的url,因此在爬取时通过正则表达式获取新的url并访问,直到目标页面中的目标元...

2020-03-17 20:02:45 406

原创 动态规划专题(二):解决0-1背包问题并找到所有最优方案

  小明有一个容量为w的背包,现在有n件物品,给定这些物品的价值与重量,求小明应如何选择物品使背包中的物品价值最大。  本文解法并不能严格称为动态规划,只是使用了动态规划的思想对递归进行了优化。将每次递归所得结果记录下来,下次达到相同的状态时直接查询即可,不需再次计算。实际上,这种思想可以相对显著的优化递归的性能。获取最大值  我在做这个题目的时候走了一些弯路,这里我把我的错误代码也放出来,...

2020-03-11 15:26:01 820

原创 动态规划专题(一):求最大子矩阵和并找到所有最优子矩阵

最大子序列和  在开始求解最大子矩阵和之前,先来看最大子序列和。  使用动态规划求解最大子序列和并不难,其最关键的状态转移方程比较容易理解:result[index]={result[index−1]+array[index]result[index−1]>0array[index]result[index−1]≤0result[index] = \begin{cases} res...

2020-03-07 02:23:46 959

原创 Trie

  Trie,又叫前缀树,字典树等,通常用于保存字符串。为了正确区分拥有相同前缀的字符串,将每一个字符串的最后一个字符进行标记,记为键。在Trie中,每个节点只有一个字符,但可以被多个键使用。使用trie存储信息即保证了效率,由于所有相同前缀的单词都可以得到重复使用,因此也大大节省了内存。如:‘tea’,‘teach’,'teacher’三个单词只需要用7个节点存储。由于Trie的优良性能,在实际...

2020-03-04 13:55:21 178

原创 爬取快代理免费代理是否可用

  判断代理是否可用的核心在于requests的proxies与timeout两个参数。from pyquery import PyQuery as pqimport requestsheaders = {'User_Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, lik...

2020-02-29 23:39:45 284

原创 堆结构

  首先介绍树的完整性定义。一棵树满足以下条件时,则称树是完整的:* 所有的非叶节点都是满的。* 若底层没有满,则底层的所有节点尽可能靠左。  以二叉最小堆为例讲解以下内容。一棵二叉树满足以下条件时称为二叉最小堆:* 树是完整的。* 所有的子节点不小于父节点。  对于最小堆结构,remove_smallest与add是两个最常见的操作。remove_smallest  拿掉堆最顶部...

2020-02-29 23:26:15 79

原创 树结构(二)

树的遍历深度优先遍历  深度优先遍历分为前序遍历,中序遍历,后序遍历。顾名思义,三者的不同在于输出顺序不同。二叉树的遍历代码如下:def preorder(tree, height=0): if tree is None: return print(tree.get_label()) preorder(tree.get_left(), height +...

2020-02-29 16:22:27 125

原创 哈希表

哈希表原理  哈希表初始使用MMM个buckets存储数据,将数据对应的哈希值除以MMM取余,根据余数存入对应的buckets中。当所有buckets中存储的数据总数NNN超过一定限度时(如:NM≥1.5\frac{N}{M}\geq 1.5MN​≥1.5),将哈希表的buckets数量翻倍(M=2MM=2MM=2M),并将之前存储的数据按相同的方法重新分配。用链表存储的哈希表代码如下:cla...

2020-02-29 14:28:18 107

原创 树结构(一)

二叉搜索树  二叉搜索树是树结构中最基础的一种。class BST(object): def __init__(self, key, left=None, right=None): self.__label = key self.__right = right self.__left = left self.__heigh...

2020-02-28 22:37:25 127 1

原创 异步爬取豆瓣读书

异步爬取豆瓣读书并存储于mysql中from bs4 import BeautifulSoupimport aiohttpimport asyncioimport requestsfrom sqlalchemy import create_engine, Column, String, Integer, ForeignKey, Tablefrom sqlalchemy.orm impo...

2020-02-28 19:07:09 238

原创 盛水最多的容器:双指针法

  给定nnn个非负整数[a1,a2,...,an][a_1,a_2,...,a_n][a1​,a2​,...,an​],每个整数代表坐标中的一个点(i,ai)(i,a_i)(i,ai​)。在坐标系内画nnn条垂线,点(i,ai)(i,a_i)(i,ai​)与点(i,0)(i,0)(i,0)分别代表垂直线iii的两个端点。找出两条线使它们与x轴共同构成的容器可以容纳最多的水。  当索引的差值相同...

2020-02-28 19:05:14 95

原创 QuickUnion

QuickUnion  QuickUnion的原理较简单,每次连接两元素时找到两元素对应根节点,连接根节点即可。class QuickUnion(object): def __init__(self, n): self.__parent = list(range(n)) def get_root(self, p): p_parent = sel...

2020-02-28 19:00:51 161

原创 回文数:反转一半

  判断一个整数是否是回文数,满足:不允许把整数转换为字符;对于特别大的整数,运算时不可超出环境中整数允许的最大值。def is_palinedrome(integer): if integer < 0 or (integer % 10 == 0 and integer != 0): return False temp = 0 while temp ...

2020-02-28 14:55:36 148

原创 加法实现原理

  给出两个非空链表用来表示两个非负整数。其中,它们各自的位数按照逆序方式存储,并且每个节点只能存储一位数字。如’1 -> 2 -> 3’表示’321’。以链表形式返回两数之和。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val =...

2020-02-28 12:28:01 227

原创 无重复字符的最长子串

  给定一个字符串,找出其中不含有重复字符的最长子串的长度。  生成一个队列,将队列中的字符存于字典中。若下一个字符在字典中已经存在,则从队列中与字典中同时依次删除队尾字符,直至下一个字符不存在于字典中,将该字符添于队首,进行下一次循环。def get_longest(s): strings, current_string = {}, '' max_length, curren...

2020-02-28 11:59:38 79

原创 排序算法

快速排序  快速排序在大多情况下的表现优异,其核心思想为分而治之。  具体操作:对于一个长度为nnn的数组AAA,根据改变元素x=A[i]x=A[i]x=A[i]的位置,使得数组AAA满足:* xxx左边的元素都不大于xxx。* xxx右边的元素都不小于xxx。  此时xxx就位于数组排序完成后其应所在位置。然后对xxx左右两侧进行递归操作即可完成排序。值得注意的是,通常将xxx选定为数...

2020-02-28 11:56:20 64

原创 最长回文子串

  给定一个字符串sss,找到sss中最长的回文子串。例:‘bababd’的最长的回文子串为’babab’。记字符串sss长度为nnn。暴力算法def is_palinedrome(string): for s in range(len(string) // 2): if string[s] != string[len(string) - s - 1]: ...

2020-02-28 11:52:51 98

原创 寻找有序数组中位数:二分查找

  给定两个长度分别为mmm与nnn的有序数组AAA与BBB。找出这两个有序数组的中位数,并且要求算法的时间复杂度为Θ(log⁡(m+n))\Theta(\log (m + n))Θ(log(m+n))。假设AAA与BBB不会同时为空。  解题思路:  将两个原数组分为两个新数组A与B,若A与B满足以下条件,则根据 m+nm+nm+n 的奇偶性易求得中位数。length(C)=length(...

2020-02-28 11:48:23 210

原创 拓扑排序

  若图为有向无环图,则可进行拓扑排序。拓扑排序的结果为DFS后序遍历的倒序。选课是拓扑排序的经典应用场景之一,即:选修一门课程之前须先修完该课程的前置课程。class Graph(object): def __init__(self, points_nums, is_directed): self.__points_nums = points_nums ...

2020-02-28 11:45:53 157

原创 深度优先搜索

  无论是深度优先搜索还是广度优先搜索,搜索的关键在于建立两个数组,一个数组记录节点路径——输出结果;另一个数组记录已走过的节点——不走回头路。class Graph(object): def __init__(self, points_nums, is_directed): self.__points_nums = points_nums self.__...

2020-02-28 11:34:30 189

原创 图的存储方式

  对于一个有VVV个点,EEE条边的图:存储方法add_edge(v,w)get_adj(v)遍历has_edge(v,w)空间复杂度邻接矩阵Θ(1)\Theta(1)Θ(1)Θ(V)\Theta(V)Θ(V)Θ(V2)\Theta(V^2)Θ(V2)Θ(1)\Theta(1)Θ(1)Θ(V2)\Theta(V^2)Θ(V2)边的集合Θ(1)\Th...

2020-02-28 11:20:56 141

原创 最省力的路径

  给定一张mmm行nnn列的地图由0和1表示,0表示可以走,1表示不能走。起点坐标与终点坐标分别为(x1,y1)(x_1,y_1)(x1​,y1​)与(x2,y2)(x_2,y_2)(x2​,y2​)。以地图左上角为原点,坐标为(0,0)(0,0)(0,0)。求从起点到终点最少需要转几次弯及所对应的路径。class Point(object): def __init__(self, x...

2020-02-28 02:13:21 111

原创 平分酒水

  在一个容量为v1v_1v1​的瓶中装满一瓶酒,还有两个容量分别为v2v_2v2​与v3v_3v3​的空瓶,问将容量为v1v_1v1​的瓶中的酒平分最少需要几次,以及如何倒水。当v1v_1v1​为奇数时,平分向下取整。(b1>b2>b12>b3b_1>b_2>\frac{b_1}{2}>b_3b1​>b2​>2b1​​>b3​)class ...

2020-02-28 01:49:30 197

原创 Dijkstra最短路径算法

  Dijkstra最短路径算法本质上也是广度优先搜索。  考虑到算法的remove_smallest操作,使用最小堆提升效率。class Point(object): def __init__(self, index, value): self.index = index self.value = value def __lt__(self,...

2020-02-28 01:22:59 105

原创 链表翻转

  翻转指定区间内的链表连接方向(不改变节点的值),以’1->2->3’的形式输出翻转后的链表。class IntNode(object): def __init__(self, value, next_node, previous_node): self.value = value self.next = next_node ...

2020-02-28 01:10:47 104

梯度下降算法线性回归数据

梯度下降算法线性回归数据

2020-04-02

0-1背包问题算例.txt

0-1背包问题算例

2020-03-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除