- 博客(114)
- 收藏
- 关注
原创 深入解析基数排序(Radix sort)——线性时间排序算法
简介众所周知,常见的排序算法例如快速排序,归并排序等都是基于比较的排序算法。正是因为它们基于比较的特性,这些算法在时间复杂度方面无法做到比O(n*logn)更好。关于这些排序算法的细节在本文中不做讨论,请参考作者之前的一篇文章搜索和排序算法总结。早在1887年,基数排序算法就已经由Herman Hollerith提出,用来解决编表机上的数字排序问题。它实际上是最早被提出的排序算法。基数排序是...
2019-07-02 08:25:04
2008
原创 Java中取得数组中最大(小)元素的几种实现方法
简介本篇文章将主要介绍获取数组中最大(小)元素的基本方法,以及其在Java中的几种实现方法。算法取得数组中最大(小)元素的基本算法一般都类似于如下所示:SET MAX to array[0]FOR i = 1 to array.length - 1 IF array[i] > MAX THEN SET MAX to array[i] ENDIFE...
2019-06-30 09:14:20
2187
翻译 Python装饰器(Decorator)完全指南-基础篇
Python中decorator事实上即是一个接受函数作为输入变量并返回另一个函数对象的函数。
2019-06-01 16:19:18
666
原创 什么是闭包及Python中的闭包
什么是闭包Objects are data with methods attached. Closures are functions with data attached.一般来说,我们都非常熟悉面向对象(OOD)语言中的对象的概念。所谓对象(Object),指的是附带相应方法的__数据__。那么相对而言,闭包(closure)指的则是附带相应数据的__函数__。换句话说,闭包函数能够引...
2019-05-29 15:11:31
1238
1
原创 Next Permutation Algorithm,取得全排列中当前排列的下一个排列
Next Permutation算法给定一个整数数组,数组中的每一个元素均为0~9之间的整数,如下算法能够高效取得在该数组按数字从小到大排列的全排列中的下一个排列。给定一个任意整数数字,该算法亦可以用来找到仅使用该整数中的数字重构能够得到的 最小的 比当前数字大的数字。假定输入数组为nums。找出当前数组中的 第一个 满足nums[k] < nums[k + 1]条件的索引k。如果满...
2019-03-21 16:59:56
418
原创 深入解析Bellman Ford's Algorithm,高效解决含有负权重图中的最短路径问题
概述Bellman Ford算法可以用来解决加权图中的最短路径问题。其与Dijkstra算法的区别在于Belllman Ford算法的应用范围更广,例如其可以用来处理带有负权重的加权图中的最短路径问题。由于Dijkstra算法本质上是一种贪心算法,因而当图中存在路径权值之和为负的环时,Dijkstra算法会给出错误的结果因为其总是偏向于选择当前情况下的局部最优路径。Bellman Ford算法的...
2019-03-18 16:48:39
2165
1
原创 React中Component与PureComponent的区别
Component是React App的基本构建的单位,也是React中的基本代码复用单位。PureComponent与Component在除了其shouldComponentUpdate方法的实现之外几乎完全相同。PureComponent已经替我们实现了shouldComponentUpdate方法。对于PureComponent而言,当其props或者state改变之时,新旧props与s...
2019-03-17 13:30:37
2852
原创 Python私有属性(private attributes)及其调用
Python中的私有属性在面向对象(Object Oriented Design)的情景下,所谓私有属性(private attributes),包括私有方法和私有变量,指的是只供一个类或者实例内部使用的方法和变量。这些方法和变量不应当被在类和实例的外部调用。然而,在Python的设计下并没有对类或者实例属性真正的访问限制(例如像Java中的关键字private)。由于在面向对象设计中,这是一...
2019-01-05 00:17:07
4411
原创 ssh端口转发(ssh隧道)详解
摘要ssh端口转发(或称ssh隧道)在本机和远程主机之间建立一个加密的通信隧道。这一隧道可以被其他非加密(例如IMAP,VNC,IRC等)或者加密传输的协议用来作为代理转播链接。本文将探讨ssh端口转发的三种类型,分别说明每一种的配置及使用方法并给出相应的ssh命令。背景知识需求本文假设读者已经熟悉基本的ssh原理以及ssh操作,了解一定的网络基础知识例如网络协议、网络通信以及端口号等,并...
2019-01-04 14:11:31
5438
原创 手把手教你打包Python库并创建自己的PyPI项目
摘要本文将以py3PortScanner为例,带大家了解如何将已经完成的python package打包,在README中添加travis-ci的__build passing__图标,并将package整体上传至PyPI(Python Package Index)从而使得其他用户可以通过pip命令来直接安装这个package。背景知识需求本文需要读者拥有一定的python编程经验和开源软件...
2019-01-02 17:45:59
3813
1
原创 利用mysqldump进行mysql数据库的数据备份/迁移
利用mysqldump将数据库中的数据存储在文件中mysqldump -u username -p db_name table1 table2 -r db_backup.dump在这条命令中,username是mysql数据库的用户名,db_name是需要备份的数据库。table1 table2是一个可选的参数,用一系列空格分割的表名指定备份该数据库下面的哪几个表。如果不指定的话,则默认将该...
2018-12-22 12:37:38
1011
原创 如何检查数据库各个Database和Table的大小?
如下命令会显示各Database大小(以MB计算)。SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema结果如下:| Database ...
2018-09-26 02:45:55
1249
原创 Python Unicode问题,看这一篇就够了
引言在使用Python的时候,最令人崩溃,同时也是最常见的错误信息之一,就是处理字符串时出现的UnicodeError,包括两个子异常类型UnicodeEncodeError和UnicodeDecodeError。遇到这一类问题时,包括我在内的大多数人的第一解决方案大概就是Google一下错误信息,然后逐个试一试Stackoverflow中给出的各个方法。往往是这里加了一些encode和deco...
2018-09-23 16:54:02
27057
5
原创 如何从ps aux的结果中提取pid?
首先我们需要使用grep来取出我们想要查看的进程。例如如果我们想要查看所有含有关键字process的进程,则执行如下命令ps aux | grep process之后会显示为如下格式:USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND我们如果想要取出其中的P...
2018-08-30 01:34:53
6843
1
原创 如何使用Apache部署基于Python-Flask的后端服务器?
FlaskFlask是非常简单易用的一个python后端框架,非常适合用来快速开发小规模的后端程序。然而在对Flask开发的后端进行部署时,虽然Flask本身支持使用app.runthreaded=True, host='0.0.0.0',)实现多线程运行,但依然无法实现较高的性能表现。这种时候我们就需要将Flask应用部署到专业的后端服务器,例如使用MOD_WSGI将该应用部署至Apache...
2018-08-03 10:22:37
6125
原创 SQLAlchemy与数据库连接的QueuePool问题详解
从常见的一种连接错误说起有关SQLAlchemy与数据库的连接(Connection),最常见的一种runtime error如下所示:QueuePool limit of size <x> overflow <y> reached, connection timed out, timeout <z>这个异常的含义是当前系统所需并发数据库连接(对...
2018-07-08 11:46:58
12696
3
原创 解决LINUX系统sudo下PYTHONPATH或PATH配置失效的问题
有时候我们需要使用root权限来执行某些python程序。同时即使我们自己在.bashrc或其他类似的配置文件中定义了PYTHONPATH或者PATH路径的话,也会出现import路径不存在的错误。这是因为在使用sudo模式执行程序的时候,系统会自动重置PATH环境变量。我们可以查看/etc/sudoers文件,如果其中存在如下所示的这行:Defaults env_reset则说明su...
2018-05-25 10:25:59
4716
2
原创 在无GUI环境下(headless模式)配置并使用Python+selenium+chromium/firefox的流程
SeleniumSelenium封装了能够进行浏览器自动化的一系列工具和库的一款自动化工具。Selenium提供了遵守W3C WebDriver specification的一个平台,并且该平台提供了能与当前市面上几乎所有浏览器兼容的接口。如果需要使用SeleniumAPI控制浏览器,只需要定义 Selenium WebDriver并下载相应浏览器的驱动程序(executable)即...
2018-04-27 07:25:14
7423
原创 深入解析Dijkstra's Algorithm —— 高效解决有向图中的单点出发最短路径问题
什么是Dijkstra算法?Dijkstra算法是用来寻找最短路径最著名的算法之一。具体来说,Dijkstra算法主要用来寻找一个边的权值不为负的有向图中的任意一点到其他任意结点(在两点相互联通的情况下)之间的最小路径。如果利用Dijkstra算法找出从一点出发,到图中其他所有点的最短路径,事实上我们就构造出了一个最短路径树(shortest-path tree)。Dijkstra最短路径...
2018-04-10 11:14:50
5300
原创 浅析Merkle Tree——分布式系统数据校验的基石
什么是Merkle TreeMerkle Tree是一种基于哈希的数据结构。Merkle Tree是一种树状数据结构,该树中的每一个叶子结点都是一个数据块,而每一个非叶子结点都是其子结点组合的哈希。普遍性况下Merkle Tree是二叉树,也就是说Merkle Tree中的每一个结点有两个子结点。当然,Merkle Tree可以是多叉树,例如Ethereum平台所采用的。简单起见,本文我们仅讨...
2018-04-07 13:21:16
1931
原创 深入理解拓扑排序(Topological sort)
什么是拓扑排序?维基百科对于拓扑排序有如下定义: a topological sort or topological ordering of a directed graph is a linear ordering of its vertices such that for every directed edge uv from vertex u to vertex v, u com...
2018-03-28 08:31:20
2968
原创 线段树(segment tree),看这一篇就够了
定义线段树(segment tree),顾名思义, 是用来存放给定区间(segment, or interval)内对应信息的一种数据结构。与树状数组(binary indexed tree)相似,线段树也用来处理数组相应的区间查询(range query)和元素更新(update)操作。与树状数组不同的是,线段树不止可以适用于区间求和的查询,也可以进行区间最大值,区间最小值(Range Mi...
2018-03-18 13:10:49
53494
6
原创 树状数组(Binary Indexed Tree),看这一篇就够了
定义根据维基百科的定义: A Fenwick tree or binary indexed tree is a data structure that can efficiently update elements and calculate prefix sums in a table of numbers.也就是说,所谓树状数组,或称Binary Indexed Tree,...
2018-03-09 07:17:35
53531
6
原创 并查集(Union-Find Algorithm),看这一篇就够了
动态连接(Dynamic connectivity)的问题所谓的动态连接问题是指在一组可能相互连接也可能相互没有连接的对象中,判断给定的两个对象是否联通的一类问题。这类问题可以有如下抽象:有一组构成不相交集合的对象 union: 联通两个对象 find: 返回两个对象之间是否存在一条联通的通路 ˇ 在使用union-find处理动态连接的问题时,我们一般将这一组对象抽象...
2017-12-25 07:30:07
33278
4
原创 LeetCode238. Product of Array Except Self
238. Product of Array Except Self
2017-10-25 15:49:23
329
原创 LeetCode689. Maximum Sum of 3 Non-Overlapping Subarrays
LeetCode689. Maximum Sum of 3 Non-Overlapping Subarrays
2017-10-16 13:27:00
2024
原创 LeetCode636. Exclusive Time of Functions
636. Exclusive Time of Functions
2017-10-13 16:37:25
458
原创 LeetCode341. Flatten Nested List Iterator
LeetCode341. Flatten Nested List Iterator
2017-10-10 16:10:18
584
原创 LeetCode543. Diameter of Binary Tree
Leetcode543. Diameter of Binary Tree
2017-10-09 15:34:10
456
原创 LeetCode653. Two Sum IV - Input is a BST
Leetcode 653. Two Sum IV - Input is a BST
2017-10-04 15:43:54
513
原创 LeetCode673. Number of Longest Increasing Subsequence
673. Number of Longest Increasing Subsequence
2017-10-02 05:01:53
708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人