自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Python:小问题集锦

1. 重置Data.Frame的索引df = df.reset_index(drop=True)2. 第1列是否作为索引## 作为索引data = pd.read_csv('data.csv',index_col = 0)## 不作为索引data = pd.read_csv('data.csv',index_col = False)3. 取DataFrame指定的列...

2019-04-13 22:30:39 249

原创 python:json格式转化为dataframe格式

from pandas.io.json import json_normalizeimport pandas as pdimport json方法一:利用read_json进行转化data_str = open('movies.json').read()df = pd.read_json(data_str,orient = 'records')df.head()方法二: 利...

2019-03-07 10:43:33 12873 2

原创 python:sort() 与 sorted()

1、使用方法sort()对列表进行永久排序        python中的sort()方法,能够较为轻松地对列表进行排序。## 对汽车按字母顺序排序cars = ['bmw','audi','toyota','subaru']cars.sort()print(cars)['audi', 'bmw', 'subaru', 'toyota']      方法sort()永久性...

2019-01-31 17:36:02 286

原创 python:del、pop() 与 remove()

1、使用del语句删除元素          如果知道要删除的元素在列表中的位置,可以使用del语句。motorcycles = ["honda","yamaha","suzuki"]print(motorcycles)## 删除motorcycles中第一个元素del motorcycles[0]print(motorcycles)['honda', 'yamaha', ...

2019-01-31 17:13:30 303

原创 红黑树:一种平衡二叉查找树

        二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。但是,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于的情况,从而导致各个操作的复杂度降低。极端情况下,二叉树会退化为链表,时间复杂度会退化为O(n)。要解决时间复杂度退化问题,就需要设计一种平衡二叉查找树,而红黑树就是一种常见的平...

2019-01-29 16:00:50 324

翻译 二叉树基础(下):二叉查找树

     思考题:二叉查找树是一种特殊的二叉树,最大的特点是支持动态数据集合的快速插入、删除、查找操作。但是散列表也支持这些操作,并且散列表的时间复杂度是O(1),比二叉树更加的高效。那么,既然有了这么高效的散列表,使用二叉树的地方是不是都是可以换成散列表呢?有没有什么地方是散列表做不了,必须要使用二叉树呢? 一、二叉查找树       二叉查找树是二叉树中常见的一种类型,也叫二叉搜索树。...

2019-01-23 16:41:32 301

翻译 二叉树基础(上):什么样的二叉树适合用数组来存储?

思考题:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储?一、树        树的常用概念及其解释        父节点、子节点、兄弟结点、根节点、叶子结点;结点的高度、深度、层;树的高度。           上图中,A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点都是同一个节点A,所以它们之间是互称兄弟节点。没有父节点的结点叫做根节点,...

2019-01-23 13:28:37 1528

翻译 哈希算法:如何利用哈希算法解决实际问题?

1、什么是哈希算法?        哈希算法的定义和原理:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则,就是哈希算法。而通过原始数据映射之后得到的二进制值串就是哈希值。        设计一个优秀的哈希算法,需要满足下面几点要求: 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法) 对输入的数据比较敏感,原始数据即使修改一个字节,最后得到的哈希值也大不...

2019-01-21 12:13:29 2286 2

翻译 散列表(下):为什么散列表和链表经常会一起使用?

 【思考题】:散列表和链表都是如何组合起来使用的?散列表和链表为什么经常放在一起使用?1、LRU缓存淘汰策略        借助散列表,可以把LRU缓存淘汰算法的时间复杂度降为O(1)。但之前讲过使用链表来实现LRU缓存淘汰算法的时间复杂度是O(n)。维护一个按照访问时间从小到大有序排列的链表结构,因为缓存大小有限,当缓存空间不够,需要淘汰一个数据的时候,直接将链表头部的结点删除。  ...

2019-01-21 10:59:10 212

翻译 散列表(中):如何打造一个工业级水平的散列表?

思考题:        如何设计一个可以应对各种异常情况的工业级散列表,来避免在散列冲突的情况下,散列表性能的急剧下降,并且能够抵抗散列碰撞攻击?       散列碰撞攻击的原理是:由于散列表的性能很差,查询数据的时候需要消耗大量的CPU和线程资源,导致系统无法响应其他请求,从而无法达到拒绝服务器攻击(Dos)的目的。1、如何设计散列函数?散列函数的设计不能太复杂 散列函数的生成...

2019-01-20 23:08:12 270

原创 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

      【思考题】:在Word里面输入一个错误的英文单词,它会用标红的方式提示“拼写错误”。Word的这个单词拼写检查功能,虽然很小但是却非常实用。你有没有想过,这个功能是如何实现的?1. 散列的思想        散列表(Hash Table),也叫“哈希表”或者“Hash表”。      【举例1】:假设有89名运动员参加校运动会。每个运动选手都会有自己的参赛编号,假设参赛编号...

2019-01-17 11:29:47 836

原创 跳表:为什么Redis一定要用跳表来实现有序集合?

        对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表。它是一个各方面性能比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作。       Redis中的有序集合(Sorted Set)就是用跳表来实现的。Redis为什么会选择跳表来实现有序集合呢?为什么不用红黑树?1. 理解“跳表”      链表加上多级索引的结构,就是跳表。...

2019-01-16 12:17:20 1392 2

原创 二分查找(下):如何快速定位IP对应的省份地址?

思考:        假设我们有12万条IP区间与归属地的对应关系,如何快速定位出一个IP地址的归属地呢?二分查找的变形:              本次的分析要处理的数据是从小到大排序的。 变体一:查找第一个值等于给定值的元素       有序数据集合中存在重复的数据,我们希望找到第一个值等于给定值的数据,上一节的二分查找代码就不再适用了。       比如下面这个有...

2019-01-16 09:59:03 468 4

原创 二分查找(上):如何用最省内存的方式实现快速查找功能?

二分查找算法:一种针对有序数据集合的查找算法,也叫折半查找算法。思考题:       假设有1000万个整数数据,每个数据占8字节,如何设计数据结构和算法,快速判断某个整数是否出现在这1000万数据中?希望实现这个功能所需要的内存空间不超过100M。1. 理解二分查找思想         二分查找是非常简单易懂的快速查找算法,在生活中也是比较常见。举一个猜字游戏为例,进行说明。随机...

2019-01-15 11:38:26 238

原创 排序优化:如何实现一个通用的、高性能的排序函数?

  1.回顾几种排序算法              线性排序虽然时间复杂度比较低,但是对数据的要求也比较高,所以就不适合用来作为通用的排序函数的实现算法。对于小规模数据排序,可以选择时间复杂度是O()的排序算法;如果是大规模数据的排序,可以选择时间复杂度是O(nlogn)的排序算法。 2.为什么归并排序比快排使用的情况少?        快排在最坏的情况下,时间复杂度是O(),...

2019-01-15 09:45:49 256

原创 线性排序:如何根据年龄给100万用户数据排序?

思考题:如何根据年龄给100万用户数据排序?        三种时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序。由于这类排序算法的时间复杂度是线性的,所以称为:线性排序。1.桶排序1.1 桶排序的核心思想        桶排序,将要排序的数据分到几个有序的桶里,每个桶的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。 ...

2019-01-14 19:27:56 734

原创 排序(下):如何用快排思想在O(n)内查找第K大元素?

两种时间复杂度都是O(nlogn)的排序算法:归并排序和快速排序。1.归并排序1.1 归并排序的原理 归并排序的核心思想是:将一个要排序的数组,从中间分成前后两个部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起,这样整个数据就是有序的了。 归并排序用到的就是一个分治思想。分治就是一种将大问题分解成小的子问题来解决的...

2019-01-14 14:11:57 1945 3

翻译 排序(上):为什么插入排序比冒泡排序更加受欢迎?

        最经典、最常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计算排序、基数排序、桶排序等。按照时间复杂度,将其划分为三类:                  思考题:插入排序跟冒泡排序的时间复杂度都是O(),在实际的软件开发当中,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?1.如何评价分析一个“排序算法”?1.1 排序算法的执行效率...

2019-01-11 13:57:41 396

翻译 递归:如何用三行代码找到“最终推荐人”?

        用户A推荐用户B来注册,用户B推荐用户C来注册。用户C的最终推荐人是用户A,用户B的最终推荐人也是用户A。如何利用递归来实现最终推荐人的寻找呢?       在数据库表中,可以记录两行数据,其中actor_id表示用户id,referrer_id表示推荐id。基于这个背景,问题是:给定一个用户id,如何查找到这个用户的“最终推荐人”?      递归是一种应用非常广泛的...

2019-01-11 12:25:04 259

翻译 队列:队列在线程池等有限资源池中的应用

        当我们向一个固定大小的线程池中请求一个线程时,如果线程池中没有空闲的资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是如何实现的?1.如何理解“队列”?        可以把它想象成排队买票,先来的先买,后来的人只能站在末尾,且不允许插队。先进者先出,后进者后出,这就是典型的“队列”。栈只支持两个操作:入栈push()和出栈pop()。队列跟栈...

2019-01-09 17:02:28 321

翻译 栈:如何实现浏览器的前进和后退功能?

       浏览器的前进、后退功能,其实就是利用了栈的数据结构       当我们依次访问一串页面a-b-c,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是如果后退到b后,点击了新的页面d,那就无法通过前进、后退功能看到页面c了。1.如何理解“栈”?        先进者后出,后进者先出,这就是典型的“栈”结构。...

2019-01-09 16:41:19 800

翻译 链表(下):如何轻松写出正确的链表代码?

技巧一:理解指针或是引用的含义        不管是“指针”还是“引用”,实际上都是一个意思,表示的是存储所指对象的内存地址。将某个变量赋值给指针,实际就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了变量的内存地址,指向了这个变量,通过指针就可以找到这个变量。技巧二:警惕指针丢失和内存泄漏               如图,我们希望在a结点和相邻的结点b之间插入结点x,...

2019-01-09 16:16:59 161

翻译 链表(上):如何用链表来实现LRU缓存淘汰算法?

        缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有非常广泛的应用。比如CPU缓存、数据库缓存、浏览器缓存等。缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。常见的缓存淘汰策略有三种:先进先出策略FIFO(First In, First Out) 最少使用策略LFU(Least Frequently Used...

2019-01-06 20:50:35 223

空空如也

空空如也

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

TA关注的人

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