- 博客(60)
- 收藏
- 关注
原创 数据结构与算法之美(十三)字符串匹配算法
目录字符串匹配算法介绍字符串匹配算法分类BF算法RK算法思考题BM算法坏字符规则好后缀规则KMP算法Trie树AC自动机字符串匹配算法介绍字符串匹配算法就是将从一个字符串(主串,长度为n)中匹配出指定的字符串(模式串,长度为m)。字符串查找函数比如Python中的find()函数、word里的查找替换等,底层依赖的就是字符串匹配算法。字符串匹配算法分类单模式串匹配:在一个字符串中查找一个字符串简单、低效:BF算法、RK算法难理解、高效:BM算法、KMP算法多模式串匹配:在一个字符串中同
2022-03-31 22:57:43
1112
原创 数据结构与算法之美(十二)图、深度优先搜索、广度优先搜索
目录图(Graph)图的存储1.邻接矩阵(Adjacency Matrix)2. 邻接表(Adjacency List)图的搜索算法广度优先搜索(BFS)深度优先搜索A*IDA*图(Graph)图(Graph):一种比树更复杂的非线性表结构顶点(vertex):图中的元素边(edge):顶点之间的连接关系无向图:边没有方向的图度(degree):跟顶点相连的边的条数有向图:边有方向的图入度(In-degree):在有向图中,有多少条边指向这个顶点,例如微博用户的粉丝数出度(Out-degr
2022-03-26 23:35:34
1218
原创 数据结构与算法之美(十一)堆和堆排序
这里写目录标题堆(Heap)堆的实现堆的存储堆的操作1. 插入一个元素:自下而上的堆化2. 删除堆顶元素:自上而下的堆化时间复杂度堆排序步骤一:建堆步骤二:排序堆的三种应用1. 优先级队列2. Top K3. 中位数堆(Heap)堆是一种特殊的树,需要满足两点:是一个完全二叉树(除了最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列);每一个节点的值都大于等于(或小于等于)其子树中每个节点的值,叫大顶堆(小顶堆)堆的实现堆的存储堆适合用数组来存储。因为堆是完全二叉树,用数组来存储
2022-03-25 23:04:35
1444
原创 数据结构与算法之美(九)哈希算法
哈希算法介绍哈希算法的应用安全加密:难以反向推导唯一标识:图片重复比对数据校验:下载文件后校验散列函数:散列表设计负载均衡数据分片例子1: 统计“搜索关键词”出现的次数例子2: 图片数量很多时如何快速判断图片是否在图库中分布式存储介绍哈希算法:将任意长度的二进制值串映射为**固定长度的二进制值串(哈希值)**的映射规则要求:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同;散列冲突的概率要很小,对于
2022-03-07 22:47:52
471
原创 数据结构与算法之美(八)散列表
散列表介绍散列函数基本要求设计方法好的散列函数散列冲突装载因子解决办法1. 开放寻址法(open addressing)探测方法(1)线性探测(linear probing)(2)二次探测(Quadratic probing)(3)双重散列(Double hashing)2. 链表法(chaining)延伸介绍散列表(Hash Table,Hash表,哈希表)包含key(键值)、hash function(散列函数)、table(以散列值为下标的数组)三部分,优点是可O(1)O(1)O(1)查找元素(前
2022-03-03 23:34:19
767
1
原创 数据结构与算法之美(七)跳表:链表的二分查找
跳表介绍复杂度分析时间复杂度1.查找的时间复杂度推导2.插入的时间复杂度推导3.删除的时间复杂度推导空间复杂度跳表的动态更新介绍跳表是一种链表加多级索引的动态数据结构,具体来说是每两个结点提取一个结点到上一级作为索引,如下图所示:所以跳表相对于普通单链表,查找一个结点所需要遍历的结点个数减少了,也即查找效率提高了。跳表是一种支持二分查找的链表,可以快速地插入、删除、查找,甚至可以替代红黑树。Redis里的有序集合就是用跳表来实现的。复杂度分析时间复杂度在跳表中查找、插入、删除的时间复杂度都是O
2022-03-01 23:12:34
1904
原创 数据结构与算法之美(六)二分查找
二分查找(Binary Search)算法原理复杂度代码实现1. 普通二分查找:有序数组中不存在重复元素(1)迭代实现(2)递归实现例子:实现开平方2. 二分查找的变体:有序数组中有多个满足条件的元素2.1 查找第一个值等于给定值的元素2.2 查找最后一个值等于给定值的元素2.3 查找第一个大于等于给定值的元素2.4 查找最后一个小于等于给定值的元素例子1:快速定位出一个IP地址的归属地例子2:对于循环有序数组的查找算法原理针对一个有序!数组!查找!某个元素(不能是链表,因为链表按下标随机访问的时间复
2022-02-28 22:44:44
776
原创 数据结构与算法之美(四)递归和迭代
递归和迭代递归:Recursive例子1:电影院第几排例子2:n阶台阶有几种走法递归的问题迭代(Iterative)递归:Recursive写出递推公式找到终止条件例子1:电影院第几排周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办?别忘了你是程序员,这个可难不倒你,递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排
2022-02-23 21:35:03
818
原创 数据结构与算法之美(三)线性表数据结构:数组、链表、栈、队列
线性表上的数据最多只有前和后两个方向。线性表数据结构数组链表1. 链表分类(1)单链表(2)双向链表(3)循环列表2. 链表代码注意点栈队列1. 队列分类(1)顺序队列(2)链式队列(3)循环队列2. 队列的业务应用(1)阻塞队列(2)并发队列数组数组用一组连续的内存空间,来存储一组具有相同类型的数据。优点:支持随机访问,根据下标随机访问的时间复杂度为O(1)缺点:插入、删除低效,平均时间复杂度为O(n)使用注意点:警惕访问越界业务开发中可以使用容器代替数组,如果是底层开发有性能优化需
2022-02-22 23:01:06
747
原创 数据结构与算法之美(二)复杂度分析
算法的复杂度包括时间复杂度和空间复杂度。一、时间复杂度时间复杂度叫作渐进时间复杂度,并不表示代码真正的执行时间,而是表示代码执行时间随数据规模n增长的变化趋势,通常记为大O时间复杂度。1. 大O时间复杂度通常会忽略公式中的低阶、常数、系数三部分,因为当数据规模n很大时变化趋势主要由最高阶的量级决定。例如对于以下代码,假设每行执行时间都是unit_time: int cal(int n) { int sum = 0; //1 int i = 1; //1 int j = 1;
2022-02-21 22:19:48
439
原创 数据结构与算法之美(一)思维导图
10个常见数据结构数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树10个常见算法递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法整体思维导图...
2022-02-21 21:14:21
668
1
原创 算法刷题总结(六)搜索算法
算法解释搜索算法:在图或树等数据结构中,通过搜索策略遍历节点,寻找可行解或最优解。其中图多是二维矩阵的形式,也可以是自己抽象出的节点和关系。常见题型深度优先算法(DFS,deep-first search):向深处去遍历,常用于检测环路、求最大面积等问题。可以通过栈或递归来实现(递归的好处是写起来快,缺点是实际工程应用中不好理解、容易产生栈溢出)。步骤是“修改当前节点状态(是否visited)、递归子节点”等问题。回溯法(backtracking):一种特殊的DFS算法,常用于排列、组合、选择类
2021-07-04 17:41:31
414
原创 算法刷题总结(五)排序
常见的排序算法下面介绍各排序算法的思路和代码,其中快速排序和归并排序的代码可以在 leetcode. 912 排序数组 里进行测试。快速排序(QuickSort)快速排序从数组中随机挑一个数(叫做pivot),把比它小的数放到它左侧,把比它大的数放到它右侧,再对它左侧和右侧的子数组分别重复这个操作。快排分三步:(1)停止条件;(2)partition函数找到pivot应该在的位置;(3)对pivot左右part分别递归。快排最关键的是partition函数,它将pivot放到该在的位置并返回这个位
2021-06-20 20:56:10
326
1
原创 算法刷题总结(四)二分查找
算法解释二分查找:每次查找将待查找区间分成两部分,并只查其中一部分,减少复杂度。注意点搜索区间左右端点的开闭常见题型开平方有序数组中查找区间、查找数字题目69. x 的平方根34. 在排序数组中查找元素的第一个和最后一个位置81. 搜索旋转排序数组 II...
2021-06-17 13:19:36
279
原创 算法刷题总结(三)双指针
算法解释双指针:用两个指针来同时遍历,协同完成任务。常见题型两个指针分别指向两个数组:归并两个有序数组两个指针指向同一个数组:同方向:快慢指针、滑动窗口反方向:对有序数组进行搜索题目leetcode 167. 两数之和 II - 输入有序数组class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { // 双指针、指向同一有序
2021-06-14 22:33:12
193
原创 算法刷题总结(二)贪心算法
算法解释贪心算法:每次都选择局部最优的。当局部结果互不相干时,这样就是全局最优的。常见题型分配问题区间问题题目leetcode 455. 分发饼干class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { //贪心算法:优先用较小的饼干去满足较小胃口的孩子 sort(g.begin(), g.end());
2021-06-14 20:13:39
148
原创 算法刷题总结(一)当你下定决心刷题,你可以从这里开始
为什么开始刷题本人在校招时没有好好刷过题,误打误撞进了某大厂。目前担任算法工程师已快两年,不会leetcode算法题已经成为我的心理障碍,在为公司面试新同学时和自己想去看看新机会时总是信心不足,遂下定决心补上偏科、还上校招时欠下的债。之前一直觉得leetcode和剑指offer是程序员届的八股文,只是在面试时用来筛人的一道门槛,平时工作中没什么用。自从我下定决心开始刷题,到现在有三个月,确实体会到自己在编程语言的掌握和数据结构与算法的理解上更进一步了,并且只有内化了的知识才能在工作里学以致用。所以开了这
2021-06-14 17:40:59
744
原创 文本分类-PyTorch
文本分类步骤一、文本预处理读取文本with open(os.path.join(folder_name, file), 'rb') as f: review = f.read().decode('utf-8').replace('\n', '').lower() data.append([review, 1 if label...
2020-02-26 22:06:50
621
原创 多层感知机
应用场景多层感知机(multilayer perceptron,MLP)是多层神经网络。模型每一层相当于一个softmax回归,所以对于多样本,Hidden层和Output层的表达式分别是:H=XWh+bh,O=HWo+bo, \begin{aligned} \boldsymbol{H} &= \boldsymbol{X} \boldsymbol{W}_h + \boldsym...
2020-02-18 21:25:01
350
原创 Softmax回归
应用场景Softmax回归虽然名字叫回归,但它在多个线性回归输出基础上,经过了softmax operator,且最小化的是交叉熵损失,被用作多分类。Softmax回归应用于多分类场景,也即给定多个特征,预测各类别的概率,比如图片多类别分类。类似的,Logistics回归是在单个线性回归输出的基础上,经过了sigmoid operator,且最小化的是交叉熵损失,被用作二分类。模型特...
2020-02-18 00:42:48
232
原创 线性回归
理论模型单样本y^=w⊤x+b,\hat{y} = \mathbf{w}^\top \mathbf{x} + b,y^=w⊤x+b,输入:特征向量x\mathbf{x}x输出:预测值y^\hat{y}y^参数:向量w\mathbf{w}w、标量bbb多样本y^=w⊤X+b.\mathbf{\hat{y}} = \mathbf{w}^\top \mathbf{X} + b...
2020-02-13 23:24:20
215
原创 数据竞赛(四)模型及调优
一、模型1. GBDTGBoost = GradientBoostingRegressor(n_estimators=3000, learning_rate=0.04, max_depth=6, max_features='sqrt', min_sa...
2019-08-02 01:13:00
632
原创 数据竞赛(三)特征构造与特征选择
"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。" 特征构造与特征选择十分重要,本文学习了一些特征构造和选择方法。一、特征构造 # 合并车站 data['bus_sub_num'] = data['subwayStationNum']+data['busStationNum'] # 合并学校 data['school_num'] = da...
2019-07-30 01:47:11
489
原创 数据竞赛(二)数据清洗
一、缺失值分析#找出有缺失值的列: pv uv 在训练集和测试集中均有缺失train = pd.read_csv('train_data.csv')test = pd.read_csv('test_a.csv')train.info()test.info()输出:<class 'pandas.core.frame.DataFrame'>RangeIndex: ...
2019-07-26 21:49:05
346
原创 数据竞赛实践(一)2019未来杯高校AI挑战赛 > 城市-房产租金预测
一、赛题分析1. 认识数据(赛题说明)2. 了解比赛的背景分类问题还是回归问题,以及评分函数3. 对比赛数据做EDA数据分析 缺失值分析 特征值分析 是否有单调特征列(单调的特征列很大可能是时间) 特征nunique分布 出现在测试集中的community,但是在训练集中数量较少 统计特征值出现频次大于100的特征 Label分布 不同...
2019-07-24 00:18:31
543
原创 SQL学习(二)过滤
目录一、单语句简单过滤二、复合语句高级过滤1. AND2. OR3. 组合顺序三、使用通配符进行模式模糊过滤一、单语句简单过滤SELECT 列名1,列名2FROM 表名WHERE 过滤条件;WHERE子句紧跟在FROM表名之后,ORDER BY子句一定是在最后 WHERE子句的操作符包括: 操作符 说明 = 等于(注意字符串...
2019-07-16 16:01:37
381
原创 SQL学习(一)基础
目录一、数据库基础1. 数据库术语2. SQL二、检索数据1. 检索单个列2. 检索多个列3. 检索所有列4. 检索一列或多列中的可能值(值不重复)5. 限制输出的数量6. 注释方法三、对输出数据进行排序1. 按一个列进行排序2. 按多个列进行排序3. 降序排序一、数据库基础1. 数据库术语数据库(Database,DB):保存有...
2019-07-16 00:12:34
146
原创 机器学习(一)概述
目录前言一、机器学习的定义二、机器学习的用处三、机器学习系统的类别四、机器学习面临的挑战及解决办法前言想要在入职前将机器学习的理论和代码系统地学习一遍,所以从今天起打算日更一篇博文,以记录每天的学习成果和进步。今天是第一天,从机器学习概述讲起,主要包括机器学习的四个方面:定义、用处、类别、挑战及解决办法。一、机器学习的定义机器学习(ML, Machine Lea...
2019-05-25 21:07:13
1059
原创 Python语言基础学习(六)
前言本文介绍如何用Python里的turtle模块,并给出绘制小猪佩奇的代码说明。Turtle介绍海龟绘图(Turtle Graphics)是1966年被开发出来的,专门给儿童学习编程语言,后来被移植到各种高级语言中,Python内置了turtle库,可以通过from turtle import *来导入,详细的官方文档见:https://docs.python.org/3.3/lib...
2019-04-11 21:40:20
611
原创 Python语言基础学习(五)
1.文件IOa.读写文件IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input和Output是针对内存来讲的,Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口函数从这个...
2019-04-09 21:57:22
880
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人