自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员的自我修养

积跬步 积小流

  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

转载 字符编码笔记:ASCII,Unicode和UTF-8

字符编码笔记:ASCII,Unicode和UTF-8作者: 阮一峰         今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。        结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。        下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编

2015-06-15 14:00:08 357

翻译 Python深入:super函数

新式类中最酷的,或者也是最不平常的特性之一,可能就是编写“cooperative类”。‘cooperative类’通过多继承,使用我称之为‘cooperative super call’的模式。        先来看一下传统的,非cooperative super call的特点:当类C继承了基类B时,C希望覆盖定义在B中的一个方法m,当在C中定义的方法m中,调用了B中定义的m方法时,一个su

2015-06-12 14:41:10 719

原创 Python基础:常用函数

1:enumerateenumerate(sequence, start=0)       该函数返回一个enumerate对象(一个迭代器)。其中的sequence参数可以是序列、迭代器或者支持迭代的其他对象。该函数返回一个迭代器,其中的next方法返回一个元组,该元组包含从sequence获取的值,以及一个计数值(从start参数开始,该参数默认为0)。该函数的实现类似下面的代码:

2015-06-12 14:37:14 774

转载 25最小操作数问题

题目描述:    给定一个单词集合Dict,其中每个单词的长度都相同。现从此单词集合Dict中抽取两个单词A、B。希望通过若干次操作把单词A变成单词B,每次操作可以改变单词的一个字母,同时,每次操作后,新产生的单词必须是在给定的单词集合Dict中。求所有行得通步数最少的修改方法。   举个例子如下:Given:   A ="hit"   B ="cog"   Dict =[

2015-06-12 10:09:31 1439

转载 24字符串最短编辑距离

题目描述:给定一个源串和目标串,能够对源串进行如下操作:    1.在给定位置上插入一个字符    2.替换任意字符    3.删除任意字符    写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。    提醒:上文前言中已经说过了,此题反复出现,最近考的最多的是百度和Google的笔试面试经常考察。     分析:

2015-06-12 09:41:20 752

转载 23最大乘积子串

题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。也就是说,上述数组中,3 0.5 8这3个数的乘积3*0.5*8=12是最大的,而且是连续的。    提醒:子串子序列不同,子串要求连续,子序列不要求连续。     分析:这个问题与“最大子数组”问题极为相似,最大子数组是求和的最大子串,该题是求积

2015-06-12 09:32:19 542

转载 22倒排索引简介

正排索引与倒排索引    搜索引擎的关键步骤就是建立倒排索引,所谓倒排索引一般表示为一个关键词,然后是它的频度(出现的次数),位置(出现在哪一篇文章或网页中,及有关的日期,作者等信息),它相当于为互联网上几千亿页网页做了一个索引,好比一本书的目录、标签一般。读者想看哪一个主题相关的章节,直接根据目录即可找到相关的页面。不必再从书的第一页到最后一页,一页一页的查找。     我们知道:为

2015-06-12 09:14:32 755

转载 21Hash算法以及暴雪Hash

一:哈希表简介    哈希表是一种查找效率极高的数据结构,理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内定位到一个桶(术语bucket,表示哈希表中的一个位置)。当然这是理想情况下,因为任何哈希表的长度都是有限的,所以一定存在不同的数据项具有相同哈希值的情况,此时不同数据项被定为到同一个桶,称

2015-06-12 09:08:03 3672

转载 20杨氏矩阵查找

问题描述:在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。    例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字6,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。    解法    定位法,时间复杂度O(m

2015-06-12 08:51:39 435

转载 19最短摘要问题

问题描述:给定一段产品的英文描述,包含N个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定M个英文单词关键字,请说明思路并编程实现方法extractSummary,目标是找出此产品描述中包含M个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。      编程之美有最短摘要生成的问题,与此问题类似。下面介绍这种方法。首先,可以在百度或谷歌中搜索本博客名称的前4

2015-06-12 08:49:59 750

转载 18数组中出现次数超过一半的数

题目描述:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。(出自编程之美)     分析:一个数组中有很多数,现在我们要找出这个数组中那个超过出现次数一半的数字,怎么找呢?       大凡当我们碰到某一个杂乱无序的东西时,考虑是否能够通过排序来解决问题:    如果数组无序,可以先把数组中所有这些数字先进行排序,至于选取什么排序方法则不在话下,最常用的快速排序O(N

2015-06-12 08:39:12 512

转载 17一致性哈希算法

问题描述:假如QQ有n个服务器,为了方便用户的访问会在服务器上缓存据,因此用户每次访问的时候最好能保持同一台服务器。现有的做法是根据[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。       但是如果一台服务器死掉了,那么n就变为了n-1,那么[QQNUM%n]与[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器,这样会发生大量访

2015-06-12 08:01:34 470

转载 16全排列以及跳台阶问题

一:全排列问题    题目:输入一个字符串,打印出该字符串中字符的所有排列。    例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串:abc、acb、bac、bca、cab 和cba。     1:递归算法    从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。    代码:vo

2015-06-11 16:38:59 670

转载 15回文相关问题

回文指一个顺着读和反过来读都一样的字符串,比如 madam、我爱我。回文判断是一类典型的问题,尤其是与字符串结合后呈现出多姿多彩。 一、回文判断    如何判断一个字串是否是回文,最直接的方法显然是将字符串逆转,存入另外一个字符串,然后比较原字符串和逆转后的字符串是否一样,一样就是回文,这个方法的时空复杂度都是 O(n)。    很容易想到只要从两头开始同时向中间扫描字串,如果直到

2015-06-11 16:04:02 521

转载 14海量日志提取出现次数最多的IP

问题描述:现有某网站海量日志数据,提取出某日访问该网站次数最多的那个IP。     分析:IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址, 如果将每个IP地址看做是数组的索引的话,那么需要创建一个unsigned count[N]的数组,即可统计出每个IP的访问次数,但是这个数组的大小是4G*4=16G, 远远超过了32位计算机所支持的内存大小,因此不能直接创建

2015-06-11 15:58:11 1067

转载 13概率问题

题目描述:一个文件中含有多个元素,只能遍历一遍,要求等概率随机取出其中之一。     先讲一个例子,5个人抽5个签,只有一个签意味着“中签”,轮流抽签,那么这种情况,每个人中签的概率分别是多大呢?    第一个人中签的概率是1/5,    第二个人中签的情况只能在第一个人未中时才有可能,所以他中的概率是4/5 * 1/4 = 1/5(4/5表示第一个人未中,1/4表示在剩下的4个签

2015-06-11 15:41:19 2904

转载 12胜者树和败者树

一:胜者树(http://www.haogongju.net/art/2266943)        问题描述:给出一个长度是N的数组,现在要找出最小的两个元素,最少要多少次比较。        分析: 如果找出1个最小的,比较次数无疑是n-1;如果用选择排序,再取选择第二个最小的又得比较n-2次。这种寻找的办法其实是可以优化的,在第一次寻找最小元素过程中,其实我们已经比较了很多元素了,那

2015-06-11 15:28:38 3165 1

转载 11如何给1千万个数据量的磁盘文件排序

问题描述:输入:给定一个文件,里面含有多个不重复的正整数,其中每个数都小于等于n,并且正整数的总个数小于n,n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5分钟以下,10秒为最佳结果。 一:位图法    因为所有整数均不重复,所以,考虑位图法。位图法就是当且仅当整数i在文件中存在时

2015-06-11 14:56:12 1049

转载 10链表追赶问题

一:求链表倒数第k个结点   题目描述:输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针(NULL)。    思路:设置两个指针p1,p2,首先p1和p2都指向head,然后p2向前走k步,这样p1和p2之间就间隔k个节点,最后p1和p2同时向前移动,直至p2走到链表末尾。    代码:         ListNode* fun(ListNode

2015-06-11 11:06:43 588

转载 09求500万以内的亲合数

题目描述:求500万以内的亲合数       一:亲合数概念       如果两个数a和b, a的所有真因子之和等于b,b的所有真因子之和等于a,则称a,b是一对亲和数。       例如220和284:220的真因子是:1、2、4、5、10、11、20、22、44、55、110;284的真因子是:1、2、4、71、142。       以sum[i]表示i的所有真因子

2015-06-11 10:54:43 1856

转载 08查找满足条件的n个数

第一节、寻找和为定值的两个数        题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。        例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。     思路如下:    1:直接穷举,从数组中任意选取两个数,判定

2015-06-11 10:26:12 852

转载 07库函数编写

1:字符串查找        给定一个字符串A,要求在A中查找一个子串B。如A="ABCDF",要你在A中查找子串B=“CD”。         初步代码如下:int  strstr(char *string, char *substring)     {         if (string == NULL|| substring == NULL)       

2015-06-11 08:24:23 562

原创 Python基础:27执行环境

一:可调用对象        可调用对象,是任何能通过函数操作符“()”来调用的对象。Python 有4种可调用对象:函数,方法,类,以及一些类的实例。        1:函数        python 有 3 种不同类型的函数对象。        a:内建函数(BIFs),是用c/c++写的,编译过后放入python 解释器,然后把它们作为内建名字空间的一部分加载进系统。这

2015-06-10 22:21:04 1197

原创 Python基础:26模块

一:模块和文件        1:模块是逻辑上组织 Python 代码的方法,文件是物理层上组织模块的方法。因此,一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。 模块的文件名就是模块的名字加上扩展名 .py。         2:从基本概念来说,一个名称空间就是一个从名称到对象的关系映射集合。每个模块都定义了它自己的唯一的名称空间。所以,即使有两个模块中,有相同名称

2015-06-10 21:42:24 604

原创 Python基础:25文件

一:文件对象        文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普通文件一样。 二:内建函数        1:打开        open() 内建函数成功打开文件后时候会返回一个文件对象, 否则引发一个 IOError 异常。open(

2015-06-10 18:51:21 646

原创 Python基础:24with语句

一:with语句        在Python 2.6 中正式引入的with语句,是用来简化代码的。这与用try-except 和try-finally所想达到的目的前后呼应。try-except 和try-finally 的一种特定的配合用法是保证共享的资源的唯一分配,并在任务结束的时候释放它。比如文件(数据,日志,数据库等等),线程资源,简单同步,数据库连接,等等。 with 语句的目

2015-06-10 18:01:31 550

原创 Python基础:23异常

一:概述        1:错误        错误有语法和逻辑上的区别。语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。这些错误必须在程序执行前纠正。逻辑错误可能是由于不完整或是不合法的输入所致,还可能是逻辑上无法生成,计算,或是输出结果需要的过程无法执行。        当Python 检测到一个错误时,解释器就会指出当前流已经无法继续执行下去。这时候就出现了

2015-06-10 17:36:29 1982

原创 Python深入:02浅拷贝深拷贝

对象赋值实际上是简单的对象引用。也就是说当你创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。        假设想创建一对小夫妻的通用档案,名为person。然后你分别为他俩拷贝一份。        在下面的例子中,我们展示了两种拷贝对象的方式,一种使用了切片操作,另一种用了工厂方法,为了区分出三个不同的对象,我们使用id()内建函数

2015-06-10 11:08:37 489

原创 Python基础:22新式类

1:工厂函数        由于类型和类的统一,因而可以子类化Python数据类型。但是所有的Python 内建的转换函数现在都是工厂函数。当这些函数被调用时,你实际上是对相应的类型进行实例化。比如下面的函数都已经成为工厂函数:int(), long(), float(), complex(), str(), unicode(), list(), tuple(), type()。 

2015-06-10 10:58:34 537

转载 06多次查询某区间内topk问题

题目描述:给定一个数组,需要多次查找不同区间内的,第k大或者第k小的元素。            考虑题目是多次查找,如果采用只对查询区间内的元素进行排序的思路,然后输出第k大的数的策略,那么下一次进行查询时,还需要对另外一个区间进行排序,再次查找。而且,如果两次查询的区间有重叠区域的话,第一次排序时已经破坏了数组,使得第二次查询无法进行。         针对这种问题,思路之一是

2015-06-09 22:05:50 671

原创 Python基础:21包装

“包装”在Python 编程中经常会被提到的一个术语。意思是对一个已存在的对象进行包装,可以是对一个已存在的对象,增加,删除,或者修改功能。        可以包装任何类型(type)作为一个类(class)的核心成员,以使新对象的行为模仿你想要的数据类型中已存在的行为,并且去掉你不希望存在的行为。         授权是包装的一个特性,实现授权的关键点就是覆盖__getattr__(

2015-06-09 21:50:30 2628 2

原创 Python基础:20类的定制

类中有一些可自定义的特殊方法,它们中的一些有预定义的默认行为,而其它一些则没有,留到需要的时候去实现。这些特殊方法是Python中用来扩充类的强有力的方式。它们可以实现模拟标准类型和重载操作符等。比如__init__()和__del__()就分别充当了构造器和析够器的功能。        这些特殊这些方法都是以双下划线(__)开始及结尾的。下表进行了总结:基本定制型C.

2015-06-09 21:29:18 768

转载 05快速排序

快速排序是实践中已知的最快的排序算法,他的平均运行时间为O(n logn), 最坏情形的性能为O(n^2)。 一:选取枢纽元的几种方法        1:糟糕的方法:通常的做法是选择数组中第一个元素作为枢纽元,如果输入是随机的,那么这是可以接受的。但是,如果输入序列是预排序的或者是反序的,那么依据这样的枢纽元进行划分则会出现相当糟糕的情况,因为可能所有的元素不是被划入S1,就是都被划入

2015-06-09 17:41:46 473

转载 04Top K算法问题

本章阐述寻找最小的k个数的反面,即寻找最大的k个数,尽管寻找最大的k个树和寻找最小的k个数,本质上是一样的。但这个寻找最大的k个数的问题的实用范围更广,因为它牵扯到了一个Top K算法问题,以及有关搜索引擎,海量数据处理等广泛的问题,所以本文特意对这个Top K算法问题,进行阐述以及实现。 一:寻找最大的k个数        把之前第三章的问题,改几个字,即成为寻找最大的k个数的问

2015-06-09 11:13:13 636

转载 03寻找最小的k个数

题目描述:查找最小的k个元素        题目:输入n个整数,输出其中最小的k个。        例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。         1:最简单直白的思路是,要求一个序列中最小的k个数,按照惯有的思维方式,很简单,先对这个序列从小到大排序,然后输出前面的最小的k个数即可。        至于选取什么的排序方法,

2015-06-09 10:16:34 467

转载 02字符串包含及相关问题

题目描述:        假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出所有小字符串B里的字母在大字符串A里都有?        比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPO        答案是true,所有在string2里的字母string1

2015-06-09 09:56:22 505

原创 Python深入:01内存管理

在Python中,一切都是指针。 一:对象三特性        所有的Python对象都有三个特性:身份,类型和值。        身份:每一个对象都有一个唯一的身份标识,任何对象的身份标识可以使用内建函数id()来得到。它可以被认为是该对象的内存地址。        类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以用内建函数t

2015-06-09 08:14:43 754

原创 Python基础:19类和实例的内建函数

1:issubclass()        issubclass()布尔函数,判断一个类是否是另一个类的子类或子孙类。它有如下语法:issubclass(sub,sup)        这个函数也允许“不严格”的子类,意味着,一个类可视为其自身的子类,所以,这个函数如果当sub 就是sup,或者从sup 派生而来,则返回True。        从Python 2.3 开始,issub

2015-06-08 22:39:50 728

原创 Python基础:18类和实例之二

1:绑定和非绑定        当存在一个实例时,方法才被认为是绑定到那个实例了。没有实例时方法就是未绑定的。在很多情况下,调用的都是一个绑定的方法。         调用非绑定方法并不经常用到,其中一个主要的场景是:派生一个子类,而且要覆盖父类的方法,这时需要调用那个父类中被覆盖掉的构造方法:class  EmplAddrBookEntry(AddrBookEntry):

2015-06-08 20:25:39 622

原创 Python基础:17类和实例之一

1:类通常在一个模块的顶层进行定义。对于Python来说,声明与定义类是同时进行的。          2:类属性仅与其类相绑定,类数据属性仅当需要有更加“静态”数据类型时才变得有用,这种属性是静态变量。它们表示这些数据是与它们所属的类绑定的,不依赖于任何类实例。类似于Java或C++中在一个变量声明前加上static 关键字。          3:方法,比如下面,类MyCl

2015-06-08 17:57:29 531

柔性数组成员

C99中引入了柔性数组成员的概念。C99 中,结构体中的最后一个元素允许是未知大小的数组,称为柔性数组成员(flexible array member),柔性数组成员前面必须至少还有一个其他成员,而且柔性数组成员必须是结构体的最后一个成员。一个包含柔性数组成员的结构体或(递归的)包含这样结构体的联合体,不能成为一个结构体的成员或数组的元素。

2018-09-26

空空如也

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

TA关注的人

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