A sentence A picture A day!

排列组合

随笔记录

返回组合数C(n,r)

`for(i=1;i<=r;i++)

sum = sum * (n-r+1)/i`

返回排列数A(n,r)

`for(i=0;i<r;i++)

sum=sum * (n-r)`

重复排列 允许重复地选取r个物体,把这r个物体排列成一行 重复组合 允许重复地取,不考虑物体间的次序 不全相异的全排列 n1个物体是相同的,n2个物体是相同的……n个物体中不相同的种类是k,即n=n1+n2+n3+……+nk 圆周排列 每种排列重复了r次 Q(n,r)=A(n,r)/r Q(n,n)=(n-1)!

排列的生成算法: 序数法、字典序法、邻位互换法

Github&&SVN

About Github 将现有机器上得项目上传到github上 First 在网站上create new repository

到自己本机项目的文件夹中执行 —git init —git add . —git commit -m “” —git remote add origin https://github.com/yimmyzf/findAlias.git —git push -u origin master 其中origin为一个别名

若在本地机器上添加了文件a 或者文件夹di 再使用 —git add a或者 —git add di —git commit -m “” —git push -u origin master

Translation:re Module

用了一阵的python的re模块,自己总结过几次常用的方法,回头再看官方文档决定—-翻译一遍!

https://docs.python.org/2/library/re.html

regular expression operations 正则表达式相关操作

这个模块提供了与Perl相似的正则匹配操作。查询的模式与字符串可以是Unicode以及8比特串。

正则表达式使用反斜杠表示特殊字符的一般形式。比如要匹配反斜线\ 表达式为‘\’,其中头尾的为这则表达式所需的格式。

使用Python直接处理原始字符创;若字符串前缀以‘r’开头,反斜线将不被特殊处理。例如 r”\n”代表两个元素包含’\‘和’n’

Regular Expression Syntax句法 正则表达式是对能匹配的字符串的一种表达方式。

正则表达式包括普通字符与特殊字符。 特殊字符不仅有普通字符的功能,还具有正则表达式的解释方式。 特殊字符有:

‘.’

    在默认情况下,它能匹配除新的一行以外的字符。当[DOTALL](https://docs.python.org/2/library/re.html#re.DOTALL)被设置时也可以表示新的一行

‘^’

    匹配字符串开始>      

‘$’

    匹配字符串结束>      

‘*’

    匹配0或更多重复的字符,**尽可能的**匹配重复的

English Words Record: backslash反斜线 caret 脱字号^ indicate指示,暗示 collide 碰撞,冲突 specify具体说明

Python Challenge(2)

zipfile模块

用途:python压缩和解压缩

help(zipfile)一下,看该模块的介绍

可以去https://docs.python.org/2/library/zipfile.html去看doc

模块源码http://hg.python.org/cpython/file/2.7/Lib/zipfile.py

主要有以下几个类:ZipFile,PyZipFile,ZipInfo;异常类BadZipFile,LargeZipFile

zipfile里两个重要的类:ZipFileZipInefo。一个创建和读取zip文件,一个存储zip文件的每个文件的信息.

class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

z=zipfile.zipfile(filename,'r')

for i in z.namelist()---压缩包内文件名

for j in z.infolist()---返回一个zipinfo的列表,一个 zipinfo对象中包含压缩包内一个文件的信息,常用的filename,  file_size,date_time,header_offerset

ZipFile.infolist()返回一个列表;ZipFile.getinfo(name)返回一个ZipInfo

ZipFile.open(name[, mode[, password]]) 打开压缩文档中名为name的文档

对文件的基本操作 read()、write()、close()

pickle模块

在一个文件中储存任何python对象,之后能够将其完整取出——持久地储存对象。

还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多

obj = {"a": 1, "b": 2, "c": 3} 
\# 将 obj 持久化保存到文件 tmp.txt 中>    
pickle.dump(obj, open("tmp.txt", "w"))
\# do something else ...
\# 从 tmp.txt 中读取并恢复 obj 对象
obj2 = pickle.load(open("tmp.txt", "r"))
print obj2

level5

m=urllib.urlopen('http://www.pythonchallenge.com/pc/def/banner.p').read() p=pickle.load(m)

后来把.read()去掉就能看出端倪了~~

Python Challenge(1)

python 使用记录 获得字符ascii码/Unicode number = ord(char) 由ascii/Unicode获得字符 char = chr(number) / char = unichr(number)

urllib模块 urllib.urlopen()返回一个类文件对象,它提供的方法:

read(),readline(),readlines(),fileno(),close()——与文件对象一样 info()——返回httplib.HTTPMessage对象,表示远程服务器返回的头信息 getcode()——返回HTTP状态码:200—成功返回,404网址未找到 geturl()——返回请求url urllib.quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符 urllib.unquote(string) :对字符串进行解码; urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如 字典{‘name’: ‘dark-bull’, ‘age’: 200}将被转换为”name=dark-bull&age=200” urllib.pathname2url(path):将本地路径转换成url路径; urllib.url2pathname(path):将url路径转换成本地路径

level4 主要是使用urllib和re m = re.compile(r’\d+‘) nextnumber = m.search(currentline).group() nexturl = ’http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=’+nextnumber currentline = urllib.urlopen(nexturl).read() 补充两点: f = urllib.urlopen(“http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=%s” % nextnumber) 取nextnumber的方法可以使用split然后取list里的-1

result:peak.html

Hadoop 初级记录

Hadoop 这周用了hadoop,主要是Hadoop Streaming相关,不涉及框架与原理,主要将用过的作小结与记录,以后不断补充 Part I 用户脚本命令 常规选项 -conf 指定应用程序配置文件 -D 为指定属性指定值value -archives <用逗号分隔列表> 指定要被解压到计算节点的列表 用户命令 hadoop archive hadoop fs hadoop job hadoop jar 运行jar文件

FS shell 用于client和HDFS进行数据交互 调用方式: $HADOOP_HOME/bin/hadoop fs … FS shell命令使用URI路径作为参数。URI格式:scheme://path。 scheme分为hdfs(对HDFS文件系统)和file(本地文件系统) 命令的错误信息会输出到stderr,其他信息输出到stdout get hadoop fs -get [-ignorecrc]/[-crc] /hadoop/file localfile hadoop fs -get [-ignorecrc]/[-crc] hdfs://host:port/hadoop/file localfile 复制文件到本地

getmerge hadoop fs -getmerge mergedir localfile 源目录中所有文件连接成本地目标文件

ls hadoop fs -ls .. 返回文件信息或者子文件列表

mkdir hadoop fs -mkdir 建目录

put

rm

rmr

stat

tail

test

text

Map-Reduce Mapper

Reducer

在我使用hadoop的过程中主要就是写mapper和reducer文件 标准输入 mapper输出文件由key值 \t value值组成 sort后为reducer输入 而reducer的输入不拘泥于key-value,可以是任意形式

Streaming hadoop.apache.pro/docs/r0.19.1/cn/streaming.html

机器学习(译文)

https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471

世界上最简单的机器学习入门 当你听有人讨论机器学习时,对其只有个模糊的概念?你不想再用点头的方式与同事交流?让我们开始下面的介绍。

这个指导手册适用于想了解机器学习却又不知如何下手的人,我猜很多人都厌倦了去查阅维基,没有看懂然后就放弃了,其实大家都只是希望能有人能够给出一个简单完整的解释。这也是这个指导手册的作用。

什么是机器学习?

机器学习是利用通用算法而无需写任何特定的代码就能够给出一些有意思的结果。无需写代码,将数据传给通用的算法,它们会依据数据建立自身逻辑。 比如,分类算法是其中一种。它能将数据分成不同的组。同一种分类算法用来识别手写数字无需修改代码就能够用来将垃圾邮件分类出来。 虽然是同一种算法但是输入的训练数据不同,分类的逻辑也不同。 “机器学习”只是一个总称,它包含了很多通用的算法。

两种机器学习算法

我们将机器学习的算法分为两个主要的类别——监督学习和非监督学习。它们区别虽然简单但是非常重要。

监督学习

假设你是一个房地产经纪人,业务正在不断发展,你需要雇佣一些新人来帮你,问题是:虽然你能够看一眼房子就可以很好的判断出房子的价值但是你的新学员没有经验不知如何为房子定价。

你决定写一个应用通过房子的大小,周围环境等等因素对其估价。记录下三个月内的每一笔房屋出售—包括卧室的数目,平方面积,周围环境等。最重要的记录了最后的出售价格:

通过使用训练数据,我们希望生成一个估算其他房屋价值的程序:

这就是监督学习机制。你知道每个房子买了多少价钱,换言之,你知道问题的答案向后找出问题的逻辑。 将每个房子的数据作为机器学习的输入,算法会找出计算结果的数学方法,就好比是一个,所有的运算符号被擦除了的数学测验,但告诉你了计算结果: 由此,你知道这是什么样的数学问题了吗?你知道自己应该利用左侧的数字以某种方式去得到右侧的数字。 在监督学习方式中,让计算机找出关系,一旦你知道什么方法去解决指定的数据集,你就能够解决相同数据的问题。

非监督学习

让我们回过去看一下一开始的例子。如果你不知道每个房子的售价怎么办呢?我们只知道每个房子的大小,位置等,这样我们依然能够做一些有意思的事。这也就是所谓的无监督学习。 这好比就像某个人给了你一个列表的数据,“我也不知道这些数有什么用也许你能发现点什么,祝你好运~”

怎么用这些数据?对于初学者,你将有一个能自动判别数据中不同的场景。可能你会发现在当地大学附近购房者喜欢多卧室的小房间,但是郊区的购房者更倾向于3居室的大面积房屋。了解不同的用户能够帮助导向你的营销策略。

你能够自动的识别出“异常”房子,那些房子可能事一些豪宅,你可以将最好的销售人员委任于那些房子。

我们这篇文章余下的部分主要讨论监督学习机制。无监督机制也很重要,它不是一定需要正确的标签数据。

learnPython:EXE34

练习Python和翻译 网址:http://learnpythonthehardway.org/book/ex34.html

练习34:获取列表的元素 如果能够获取列表中的元素,列表是非常有用的。你已经可以顺序的浏览列表中的元素,但是如果你想获取第五个元素呢?你需要知道 怎么去获取列表中的元素。以下是方法:

animals = [‘bear’, ‘tiger’, ‘penguin’, ‘zebra’] bear = animals[0]

列出一组动物,使用0获取第一个?!这是什么原理?数学的方式,Python 列表的序号是从0开始而不是1.看上去有点奇怪,但是 这样做有很多好处。

最好的解释方式是阐明你使用数字与程序员使用数字的不同。 想象你看见在列表中的四种动物在赛跑比赛中。它们到达的顺序按照列表中的顺序。比赛很精彩,动物互相间没有吃掉对方并且完成比赛。 你的朋友迟到了,想知道比赛结果,他不会问“谁第0个到达?”而是会问“谁是第一个?” 这是因为动物的顺序很重要。你不能够不数第一个就直接数第二个动物,也不能跳过第二个直接数第三个。由于0代表没有,所以没有第0个动物。 不能表示成“没有”赢得了比赛。这没有意义。我们称这些数为序数,代表事物的顺序。

但是程序员不用这种方式思考,他们能够任何时刻获取列表中的任何元素。对于程序员来说,上面的列表像是一幅纸牌。想要老虎,抓出老虎;想要斑马,拿出斑马。 为了能够任意取出列表中的元素,需要一个地址或者索引,最好的方式是从0开始使用索引。对于这种方式的访问,数学的方式是相对简单易用。 使用这种基数能够使你任意获取,所以需要0.

如何使用列表?很简单,当你想获取第三个动物时,将3这个“序数”减1就转化成了“基数”。第三的动物是索引为2的企鹅。虽然你生活中一直使用序数,但是现在必须用基数的方式。只需要“减1”。

Eclip+pydev

学习Python中~

搭建个环境,用Eclipse+pydev插件写Python代码

安装JAVA JDK, 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

下载Eclipse: http://www.eclipse.org/downloads/ ,解压直接使用

在Eclipse中安装pydev插件

  1. 启动Eclipse
  2. help->Install New software
  3. Add—>name:Pydev—>Location:http://pydev.org/updates

配置pydev解释器

Eclipse—>Preferences—>pyDev—>Python Interpreter—>Auto Config

Coding

新建PyDevProject项目 新建 pyDev Package 试着写代码 end~~

算法总结

不占用额外内存或只占用常数内存得算法:插入排序、选择排序、冒泡排序、快速排序、堆排序 占用的:归并排序、计数排序?、基数排序、桶排序

当需要对大量数据进行排序时,In-place sort就显示出优点,因为只需要占用常数的内存

稳定排序:插入排序、冒泡排序、归并排序、计数排序、基数排序、桶排序 不稳定:选择排序、快速排序、堆排序