- 博客(30)
- 收藏
- 关注
原创 17.跳表
17.跳表:为什么Redis一定要用跳表来实现有序集合?markdown文件已上传至github因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list)。跳表:是一种各方面性能都比较优秀的动态数据结构,可以支持快速地插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树(Red-black tree)。1.如何理解“跳表”?单链表中即使存储的数据有序,
2020-08-11 17:30:09 385
原创 16.二分查找(下):二分查找的变体
16.二分查找(下):如何快速定位IP对应的省份地址?markdown文件已上传至github打开百度,在搜索框里随便输一个 IP 地址,就会看到它的归属地。它是通过维护一个很大的 IP 地址库来实现的。地址库中包括 IP 地址范围和归属地的对应关系。当我们想要查询 $202.102.133.13 这个IP地址的归属地时,我们就在地址库中搜索,发现这个IP地址落在这个 IP 地址的归属地时,我们就在地址库中搜索,发现这个 IP 地址落在这个IP地址的归属地时,我们就在地址库中搜索,发现这个IP地址落
2020-08-11 00:31:50 252
原创 15.二分查找(上)
15.二分查找(上):如何用最省内存的方式实现快速查找功能?markdown文件已上传至github假设我们有 1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中? 我们希望这个功能不要占用太多的内存空间,最多不要超过 100MB,你会怎么做呢?1.二分查找二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。二分
2020-08-10 15:32:44 567
原创 14.排序优化
14.排序优化:如何实现一个通用的、高性能的排序函数?markdown文件已上传至github1.如何选择合适的排序算法线性排序算法的时间复杂度比较低,使用场景比较特殊,所以实现通用的排序算法不能选择线性排序算法。对小规模数据可以选择时间复杂度为O(n2)O(n^2)O(n2)的算法,对大规模数据进行排序选择O(nlogn)O(nlogn)O(nlogn)的排序算法。所以为了兼顾任意规模数据的排序一般都会首选时间复杂度为O(nlogn)O(nlogn)O(nlogn)的算法来实现排序函数。时间复
2020-08-10 10:58:41 211
原创 13.线性排序
13.线性排序:如何根据年龄给100万用户数据排序?markdown文件已上传至github桶排序、计数排序、基数排序的时间复杂度都为O(n),所以称为线性排序。之所以能做到线性的时间复杂度,主要原因是这三个算法都不是基于比较的排序算法,都不涉及元素之间的比较操作。思考:如何根据年龄给100万用户排序?归并、快排能够解决这个问题,最快时间复杂度也是O(nlogn),有没有更快的排序方法呢?1.桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每
2020-08-09 23:27:39 227
原创 12.排序(下)
12.排序(下):如何用快排思想在O(n)内查找第K大元素?markdown文件已上传至github冒泡排序、选择排序、插入排序的时间复杂度都是O(n^2),适合小规模数据的排序。这一节介绍两种时间复杂度为O(nlogn)O(nlogn)O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,更常用,它们都用了分治的思想,可以借鉴这个思想来解决排序的问题,比如:如何在O(n)O(n)O(n)的时间复杂度内查找一个无序数组中第K大元素?1.归并排序的原理核心思想:先把数组从
2020-08-06 11:42:49 185
原创 11.排序(上)
11.排序(上):为什么插入排序比冒泡排序更受欢迎?markdown文件已上传至github按照时间复杂度将排序分三节课来讲。带着问题去学习,是最有效的学习方法。所以,先给出一个思考题:插入排序和冒泡排序的时间复杂度相同,都是O(n2)O(n^2)O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序,而不是冒泡排序?1.如何分析一个排序算法?从以下几个方面入手:1.1 排序算法的执行效率。对于排序算法的执行效率,我们一般从这几个方面来衡量:1.1.1 最好情况、最坏情况、平均情
2020-08-02 17:00:49 248
原创 10.如何写递归代码
10.递归:如何用三行代码找到“最终推荐人”?markdown文件已上传至github推荐注册佣金这个功能大家应该都不陌生吧。用户A推荐用户B来注册,B推荐C注册。这里,用户B和用户C的最终“推荐人”都为用户A,用户A没有最终“最终推荐人”。可以用数据库来记录这种推荐关系。在数据库表中,我们可以记录两行数据,actor_id表示用户ID,referrer_id表示推荐人ID。**给定一个用户ID,如何查找这个用户的“最终推荐人”?解决这个问题,可以用递归。1.如何理解递归?周末带着女朋友去看
2020-07-31 14:41:38 3496
原创 09.队列
09.队列:队列在线程池等有限资源池中的应用markdown文件已上传至githubCPU资源是有限的,任务的处理速度与线程个数并不是线性正相关的。过多的线程反而会导致CPU频繁切换,处理性能下降。所以线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的?这个问题就要用带队列。1.如何理解“队列”?可以想象成排队买票,先来的先买,
2020-07-30 00:50:48 156
原创 08.栈
08.栈:如何实现浏览器的前进和后退功能?markdown文件已上传至github浏览器的前进后退功能:当你访问完一系列页面a-b-c,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a.当你后退到a页面,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b,点击了新页面d后,就无法再通过前进、后退功能查看页面c了。那么如何实现这个功能呢?这就要用到”栈“这种数据结构了。1.如何理解“栈”?可以把栈比喻成一叠盘子,放盘子的时候从下往上放,取盘子的时候从上往下取。特点:先进后出,后
2020-07-29 21:39:52 826
原创 07.链表(下)
07.链表(下):如何轻松写出正确的链表代码?markdown文件已上传至github1.理解指针或引用的含义有些语言有“指针”的概念,如C语言;有些语言没有指针的概念,取而代之的是’'引用“,如Java、Python;不管是“指针”还是“引用”,它们的意思都是一样的,都是存储所指对象的内存地址。将某个遍历赋值给指针,实际上就是将这个变量的地址复制给指针。指针中存储了这个变量的内存地址,通过指针就能找到这个变量。p–>next =q,指p结点中的next指针存储了q结点的内存地址。p–
2020-07-26 14:56:43 180
原创 06.链表(上)
06.链表(上)markdown文件已上传至github缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比较常见的有CPU缓存、数据库缓存、浏览器缓存等等。当缓存被用满时哪些数据应该被清理出去,哪些数据应该被保留,是由缓存淘汰策略来决定的,常见策略有三种:先进先出策略FIFO(First In,First Out)、最少使用策略LFU(Least Frequently Used)、最近最少使用策略LRU(Least Recently Used)。1.五花八门的链表结构
2020-07-25 23:58:41 192
原创 05.数组是什么
05.数组:为什么很多很多编程语言中数组都从0开始编号?markdown文件已上传至github1.什么是数组数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。2.理解数组理解以下几个关键词,就能彻底掌握数组的概念了。2.1 线性表**线性表(Linear List)????*线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。除了数组,链表、队列、栈等也是线性结构。与之相对立的概念是非线性表,比如二叉树、堆、图等。在非
2020-07-25 00:11:23 240
原创 XGBoost(extreme gradient boosting)的使用例子
梯度提升模型(gradient boosting):它是目前在结构化数据中表现最好的模型。和随机森林类似,都是集成学习的方法。随机森林是将多个决策树的预测值取平均。梯度提升梯度是一种通过循环迭代将模型添加到集合中集成的方法。它首先用单个模型初始化集合,其预测可能非常稚拙的。(即使它的预测非常不准确,随后对集合的添加也会解决这些错误。)迭代过程:首先,我们使用当前模型集合为数据集中的每个观测生成...
2020-02-18 17:43:35 1338
原创 模型评估:交叉验证(cross-validation)的使用
为什么要使用交叉验证?如果我们有一个数据集,我们通保留20%作为验证集,其余作为训练集。但是我们训练的模型可能在这个验证集表现很好,在其他数据上表现不好。通常情况下,验证集越大,我们的模型质量度量中的随机性(也就是“噪声”)就越小,它就越可靠。不幸的是,我们只能通过从我们的训练数据中删除行来获得一个大的验证集,而更小的训练数据集意味着更糟糕的模型!交叉验证:例如,我们将数据等分成五份,实验...
2020-02-18 13:50:13 1755 1
原创 Pipeline的使用例子
Pipelines:组织数据预处理和建模的方法,他捆绑了预处理和建模的步骤,使用Pipeline可以是你的代码更加简洁、直观、不容易出BUG、简单部署、有更多的模型验证选项。假设你有训练数据验证数据:X_train, X_valid, y_train, and y_valid.这些数据包含有缺失值的变量和类别变量。下面的代码是使用Pipeline进行预处理和建模的例子。定义预处理步骤1.对...
2020-02-17 20:50:45 769
原创 机器学习数据中类别变量(categorical variable)的处理方法
类别变量(categorical variable):只有有限个值得变量,如性别就是一个类别变量,类似于这种。如果不对这些变量做预处理,训练出来的模型可能是错误的。主要有三种方法来处理这个变量。如何从数据中找到类别变量?我们可以对每一列检查它的数据类型,某列的数据类型为”object",表明该列有文本(也可能是其他的,但对我们的目标来说不重要),某列是数据是文本,则该列表示类别变量。代码...
2020-02-16 00:28:47 11849 3
原创 机器学习数据中缺失值的处理方法
查看每一列有多少缺失值:# Shape of training data (num_rows, num_columns)print(X_train.shape)# Number of missing values in each column of training datamissing_val_count_by_column = (X_train.isnull().sum())pr...
2020-02-14 13:10:27 473 2
原创 sklearn决策树和随机森林房价预测代码
import pandas as pdfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.metrics import mean_absolute_errorfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import Dec...
2020-02-13 19:29:02 1723 2
原创 模式识别单层感知器二分类算法的一个例子
用感知器算法求模式分类的解向量wimport numpy as npX=[[0,0,0,1],[1,0,0,1],[1,0,1,1],[1,1,0,1],[0,0,-1,-1],[0,-1,-1,-1],[0,-1,0,-1],[-1,-1,-1,-1]]x=np.array(X)xarray([[ 0, 0, 0, 1], [ 1, 0, 0, 1], ...
2019-10-02 19:23:52 748
原创 pandas库入门之数据特征分析 北理工嵩天老师python数据分析与展示 单元8随堂笔记
pandas库入门之数据特征分析 北理工嵩天老师python数据分析与展示 单元8随堂笔记1. 数据的排序1.1 对一组数据的理解一组数据表达一个或多个含义摘要:在数据形成过程中一些结果。即有损地提取数据特诊的过程通过摘要我们能获得数据的:* 基本统计(含排序)* 分布/累计统计* 数据特征(相关性,周期性等)* 数据挖掘(形成知识)1.2 Pandas库的数据排序.sor...
2019-09-09 12:13:07 449
原创 pandas库入门 北理工嵩天老师python数据分析与展示 单元7随堂笔记
pandas库入门 北理工嵩天老师python数据分析与展示 单元7随堂笔记Pandas是Python第三方库,提供高性能易用数据类型和分析工具。import pandas as pdPandas基于NumPy实现,常与Numpy和Matplotlib一同使用。d = pd.Series(range(20)) d #第一列是索引,第二列是值0 01 1...
2019-09-08 15:17:41 568
原创 Matplotlib基础绘图函数 北理工嵩天老师python数据分析与展示 单元5随堂笔记
Matplotlib基础绘图函数 北理工嵩天老师python数据分析与展示 单元5随堂笔记pyplot的基础图标函数pyplot饼图的绘制import numpy as npimport matplotlib.pyplot as pltlabels='Frogs','Hogs','Dogs','Logs'sizes=[15,30,45,10] #每一块占的百分比explo...
2019-09-06 08:01:44 412
原创 Matplotlib入门 北理工嵩天老师python数据分析与展示 单元4随堂笔记
Matplotlib入门 北理工嵩天老师python数据分析与展示 单元4随堂笔记Matplotlib库的使用Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。import numpy as npimport matplotlib.pyplot as plt #引入模块p...
2019-09-04 08:59:11 4635
原创 Numpy实例 图像处理 图像的手绘效果 北理工嵩天老师python数据分析与展示 单元3随堂笔记
Numpy入门实例 图像的手绘效果 北理工嵩天老师python数据分析与展示 单元3随堂笔记1.图像的数组表示图像一般采用RGB色彩模式,即每个像素点的颜色由红(R),绿(G),蓝(B)组成。RGB三个颜色通道的变化和叠加得到各种颜色,其中:R红色,取值范围,0-255.G绿色,取值范围,0-255.B蓝色,取值范围,0-255.RGB形成的颜色包括了人类视力所能感知的所有颜色。图...
2019-09-02 17:22:53 932
原创 Numpy数据存取与函数 北理工嵩天老师python数据分析与展示 单元2随堂笔记
Numpy数据存取与函数 北理工嵩天老师python数据分析与展示 单元2随堂笔记数据的csv文件存取csv文件CSV文件(Comma-Separated Value,逗号分隔值)CSV是一种常见的文件格式,用来存储批量数据。将文件写入CSV文件:np.savetxt(frame,array,fmt="%.18e",delimiter=None)参数:frame:文件(如:a.c...
2019-09-02 08:30:50 472 1
原创 NumPy库入门 北理工嵩天老师python数据分析与展示随堂笔记 (1)
NumPy库入门 北理工嵩天老师python数据分析与展示随堂笔记列表和数组的区别列表:列表中每一个元素的数据类型是可以不同的数组:要求每一个元素的数据类型是相同的多维数据二维数据:由多个一维数据构成,是一维数据组合形式高维数据:高维数据仅利用最基本的二元关系展示数据间的复杂结构数据维度的python表示一维数据:列表和集合类型[3.1398,3.1349,3.1376] 有序...
2019-09-01 09:50:46 1605
原创 《python从入门到实践》图书配套资源下载方式 飞船图像下载
近在网上看到好多人不知道怎么下载蛇书的配套资源,所以我写了个教程,记得点赞*_*下载方式:1.打开链接: http://www.ituring.com.cn/book/1861,右下方下载。2.以项目一中的飞船图像为例;点击下载——《Python编程》源代码文件-更新zip解压,打开文件夹《chapter_12》(第十二章)飞船图像就存在image文件夹下**飞船图像类型不支持上...
2019-07-22 12:33:40 10519 2
原创 pycharm安装第三方库;ModuleNotFoundError: 错误解决方案
我们在使用pycharm进行编程时常遇到下图这种错误:这种错误有几种可能:1.如果该模块是自己编写的一个文件,很大概率是因为存放在了错误的路径下,这时将该模块移至与要调用该模块的文件同一级目录下即可。2.因为没有安装所依赖的第三方库。pycharm安装第三方库步骤:**1.**File–>setting**2.**点右边 ‘+’号**3.**搜索安装即可...
2019-07-22 10:29:30 2413
原创 pycharm建立虚拟工作环境
为项目建立虚拟工作环境是非常有必要的欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:...
2019-07-22 09:50:48 398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人