4 阿牧路泽

尚未进行身份认证

To life, like today is the end.

等级
TA的排名 2w+

geopy

一、geopy 简介及安装可以使用geopy库来查询地址,国家,城市,地标,geopy使用的是第三方的geo解析器(包括谷歌地图,必应地图,Nominatim等)和一些数据源来获取地理信息。安装 geopy:pip3 install geopy二、geopy 使用1、从地址字符串获取 Location 对象也就是将字符串转换为地理位置。# coding=utf-8from geo...

2019-12-31 11:40:13

shedule 和 apscheduler

一、schedule 模块schedule 是 Python 中一个轻量级的定时任务调度库,它可以完成每分钟、每小时、每天、每周几等特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。Schedule 是 Python3 的一个第三方模块,安装方式如下:pip3 install schedule示例:import scheduleimport time def job(...

2019-12-31 11:39:06

11、树状数组(binary_indexed_tree)

1、简介所谓的Binary Indexed Tree,首先需要明确它其实并不是一棵树。Binary Indexed Tree事实上是将根据数字的二进制表示来对数组中的元素进行逻辑上的分层存储。树状数组的核心思想:每个元素是原数组中一个或多个连续元素的和在进行连续求和操作 a[1]+...a[n] 时,只需求树状数组中某几个元素的和即可,时间复杂度为 O(logn)在进行修改某个元素 a...

2019-12-31 11:18:45

10、线段树(segment_tree)

1、简介线段树算法是一种快速查询一段区间内的信息的算法,由于其实现简单,所以广泛应用于程序设计竞赛中。线段树是一棵完美二叉树,即所有的叶子节点的深度均相同, 并且所有的非叶子节点都有两个子节点。每个节点维护一个区间,这个区间为父节点二分后的子区间,根节点维护整个区间,叶子节点维护单个元素,当元素个数为n时,对区间的操作都可以在O(log n)的时间内完成,因为此时树的深度为log2 n + 1...

2019-12-31 11:17:24

9、并查集(disjoint_set)

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。并查集有三种基本操作:获得根节点判断两节点是否连通将两不连通的节点相连(相当于将两节点各自的集合合并)用UnionFind类来表示一个并查集,在构造函数中,初始化一个数组parent,parent[i]表示的含义为:索引为i的节点,它的直接父节点为parent[i]。初始化时各个节点都不相连...

2019-12-31 11:16:31

8、哈希表(hashtable)

HashTable 是一种非常常见且用途十分广泛的数据结构,使用 HashTable 可以大大的提高数据的检索速度,是一种非常优秀的结构。1.Hash 算法散列(哈希)是一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表)。一个典型的 Hash 算法是将整数除以一个常量并且取...

2019-12-31 11:15:37

7、AVL 树

1、AVL 树AVL树的名字来源于它的发明作者 G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。定义:它或者是一颗空树,或者具有以下性质的二叉查找树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。...

2019-12-27 16:05:04

6、二叉搜索树(Binary search tree)

1、二叉树二叉树是指每个节点最多有两个子节点的树结构。注意事项:树的根节点是树的第 1 层。二叉树的性质:二叉树的第 i 层上的节点数最多为 2*(i- 1) (i > 1)深度为 k 的二叉树至多有 2*k - 1 个节点包含 n 个节点的二叉树的高度至少为 log2(n+1)在任意一颗二叉树中,若终端节点的个数为 n0, 度为 2 的节点数为 n2,则 n0 = n...

2019-12-26 13:53:54

5、链表(linked list)

1、单链表(Linked List)list是最常用的数据结构,但是list在中间增减元素的时候效率会很低,这时候linked list会更适合。链表的特点:非线性,非连续存储的数据存储在节点("Node")中,节点包含:数据 + 下一个节点的指针操作的时间复杂度:增删改查的时间复杂度都是 O(n),单在链表头的操作时间复杂度是O(1)带虚拟头结点的单链表的 Python 实...

2019-12-26 13:52:50

4、循环队列(circle queue)

1、简介普通队列的出队操作的时间复杂度为O(n)(因为要整体移动元素),而循环队列就可以完美解决这个问题,使得出队与入队操作均为O(1)的时间复杂度。两个关键索引:head:队首的索引tail:队尾的索引出队维护 head,入队维护 tail。两个关键状态:空队列:head == tail,因为 head 是闭区间,tail 是开区间,即[head, tail),当 head...

2019-12-24 17:45:55

3、队列(queue)

1、简介特点:队列也是一种线性数据结构队列只能从一端(队尾)添加元素,从另一端(队首)取出元素队列是一种先进先出(First In First Out)的数据结构队列的操作:enqueue:入队dequeue:出队get_front:查看队首元素的值get_size:获取队列长度is_empty:判断队列是否为空2、实现(1)使用 Python list 实现 qu...

2019-12-24 14:51:32

2、栈(stack)

1、简介栈(stack)和动态数组一样,是一种线性数据结果。特点:只能从一端添加元素,也只能从这一端取出元素。这一端称为栈顶。是一种先进后出(LIFO:Last In First Out)的数据结构。栈的操作:push:向栈中添加一个元素pop:删除栈顶元素peak:获取栈顶元素的值size:获取当前栈的大小is_empty:判断栈是否为空2、实现(1)使用 Pytho...

2019-12-24 14:37:36

1、动态数组(array)

1、数组(array vs list)array: 定长,操作有限,但是节省内存,可以用import array直接导入list: 会预先分配内存,操作丰富,但是耗费内存。list.append: 如果之前没有分配够内存,会重新开辟新区域,然后复制之前的数据,复杂度退化list.insert: 会移动被插入区域后所有元素,O(n)list.pop: pop不同位置需要的复杂度不同pop...

2019-12-24 14:27:59

23、状态模式

一、状态模式状态模式的定义如下:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。电梯控制器示例:电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计,把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运行、停止,那流程也是很复杂的。首先,开门状态不能开门、运行、停止;停止状态不能关门,停止;运行状态不能开门、关门、运行。...

2019-11-25 10:49:24

22、备忘录模式

一、备忘录模式备忘录模式定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。在备忘录模式中,如果要保存的状态多,可以创造一个备忘录管理者角色来管理备忘录。游戏进度保存:打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了。一般情况下,保存进度是要...

2019-11-19 10:56:34

21、解释器模式

一、解释器模式解释器模式定义如下:给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终含义。模拟吉他示例:要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果。除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了。分析其需求,整个过程大致上分可以分为两部分:根...

2019-11-19 10:55:40

20、观察者模式

一、观察者模式观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行接下来的操作;异步调用指被观察者发布消息后,即可进行接下来...

2019-11-19 10:54:34

19、访问者模式

一、访问者模式访问者模式的定义如下:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义于作用于这些元素的新操作。提到访问者模式,就不得不提一下双分派。分派分为静态分派和动态分派。首先解释下静态分派,静态分派即根据请求者的名称和接收到的参数,决定多态时处理的操作。比如在Java或者C++中,定义名称相同但参数不同的函数时,会根据最终输入的参数来决定调用哪个函数。药房...

2019-11-19 10:53:31

18、迭代器模式

一、迭代器模式迭代器模式的定义如下:它提供一种方法,访问一个容器对象中各个元素,而又不需要暴露对象的内部细节。在python中,迭代器并不用举太多的例子,因为python中的迭代器应用实在太多了(不管是python还是其它很多的编程语言中,实际上迭代器都已经纳入到了常用的库或者包中)。而且在当前,也几乎没有人专门去开发一个迭代器,而是直接去使用list、string、set、dict等pyth...

2019-11-19 10:51:44

17、模板模式

一、模板模式模板模式定义如下:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。子类实现的具体方法叫作基本方法,实现对基本方法高度的框架方法,叫作模板方法。股票查询客户端示例:根据股票代码来查询股价分为如下几个步骤:登录、设置股票代码、查询、展示。构造如下的虚拟股票查询器:class StockQueryDevice(...

2019-11-19 10:50:14

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周上午根据用户上周周三的博文发布情况由系统自动颁发。