分类目录归档:技术谈

关于计算机技术。

将01字符串转换成二进制输出到文件

今天有个学弟问我,他已经实现了哈夫曼编码,把一个字符转换成了01字符串,比如’a’=>”111″,现在要对一篇文章用哈弗曼编码压缩,也就是把每个字符都转换成01串,然后以真正的二进制形式输出到文件中,也就是说,“111”不再是三个字节(byte),而是三个二进制位(bit)。想到我上学期做软设I的时候动态哈夫曼编码最后也只是输出了01字符串,没有输出成真正的二进制,于是就顺手写了一段转换程序,算是给那个小项目做个了结吧。

继续阅读

简单均匀Open Hashing的Search操作平均时间复杂度证明

在HKU的COMP2119 Intro to DS&A课程中的一点收获,以前学习数据结构时没有这么注意理论细节,导致今天一开始没有搞明白,现在大概清楚了,在这里记录一下。写得比较啰嗦,主要是为了容易看懂。Wordpress自带的编辑器打公式实在是太蛋疼了,以后有空要好好整理一下。

继续阅读

用数学归纳法证明病狗问题

《数学文化》课程的第一个作业,是用数学归纳法证明病狗问题的病狗数等于枪声响起的天数。

题目如下:

一个屋子里面有一群人(人数>1),每人领着一条狗,而这些狗中有一部分病狗(数目>0)。假定有如下条件:

1、狗的病不会传染,也不会不治而愈;
2、狗的主人不能直接看出自己的狗是否有病,也不能互相交流,只能靠看别人的狗和推理,来发现自己的狗是否有病;
3、一旦主人发现自己的狗是一只病狗,就会在当天开枪打死这条狗;
4、狗只能由他的主人开枪打死。

如果他们在一起,第一天没有枪声、第二天没有枪声……第n天发出了一片枪声,问有几条狗被打死?

继续阅读

Python实现的学历与日历互转

背景:学历是指大学中常用的“第X周周X”这种日期格式,日历是指我们常用的公历。大学生活中难免会遇到这两种日期的转换问题,以前我都是看着万年历自己数的,今天在课程格子中添加下学期的一大坨考试安排(教务处课表上用的是学历,而课程格子中只支持日历)时,累觉不想再手动数了,于是花了比数数更长的时间写了一个简单的Python小程序,用到了datetime中的date类和timedelta类,也算是掌握了一个现成的小工具,不用自己再去写日期类了。只是随便写了一下给自己临时用的,用户体验、程序流程和逻辑什么的都没太在意。在这儿记录一下好了,以备将来用到。

继续阅读

Shell学习笔记

最近在学习Shell脚本编程,因为工作环境已经转到了*nix下,不会熟练使用Shell显然是不行的。以前对于Shell的掌握程度只是会用几个十分基本的命令而已,根本不算会Shell这门“语言”。(之前Hackathon的时候要求用Github协同开发,我都是用的Github for Mac这个桌面应用,因为那时git的概念和基本命令都根本没弄懂和记住……跑题了。。接下来还会写一篇《Git学习笔记》。)

废话少说,边学边写,学到哪里写哪里,以后有空再补全。

继续阅读

我的计算机技术学习经历

和很多人一样,我也是从小开始接触电脑的。又和很多人不一样,由于家长的管制和自己的3D眩晕症,我对电脑的兴趣并没有多少是从游戏中培养起来的。因为不能玩游戏,所以我几乎将电脑方面的所有注意力都集中在了“技术”上,尽管在小时候,“技术”在我的概念中只是用来做“好玩”的事情的手段而已。

于是,我就沿着这样一个光(dòu)辉(bī)的历程成长了起来。

继续阅读

一道关于指针的Google笔试题

[题目]


下面说法正确的是[]
A.函数foo()不能改变p指向的字符串内容
B.函数foo()不能使指针p指向malloc生成的地址
C.函数foo()可以使p指向新的字符串常量
D.函数foo()可以把p赋值为 NULL.

简单地说,p是一个字符串。

实际上,p是一个普通的指针(可以修改指向),这个指针指向一个不可改变的字符(i.e. 这个指针本身的值是一个字符在内存中存储的地址),这个字符是常字符串”hello”的第一个字符。

const char **pp是一个指针,这个指针指向一个指针’,指针’就是像上述的p那样的指针。函数foo仅接受一个参数,这个参数的值是pp要指向的那个指针自己在内存中的地址(不是那个指针指向的地址),正是由于这个原因,第二句写的是foo(&p),将指针p自己的地址传了进去。此时pp的值就是p的地址,*pp就是p的值,也就是p指向的常字符的地址(或者说常字符串的首地址,因为char*既可以指向字符”又可以指向字符串””,不管指向什么,它都只是存一个字符在内存中的地址,如果指向字符串,那么它存第一个字符的地址,后面的字符是通过指针的加法运算来访问的)。下面依次分析每个选项:

A. 可以通过**pp来读取p指向的字符的值,但是p是指向const char,所以只能读取,不能改变内容,A正确。
B. malloc是从内存中申请空间的函数,它返回申请到的空间的首地址(起始地址)。根据上面的分析,通过为*pp赋值,即可改变p的值,也就是使p的指向。另外,“声明const char* p”的意思不是“p只能指向字符串常量”,而是“不能用p来修改那个字符串”,用普通的char*再指向那个字符串,还是可以修改那个字符串的。换句话说,字符串本身是不带“只读”属性的,是不是只读,在于用户声明的调用方式。例:

又例:

所以foo()能够使p指向malloc生成的地址。B错误。

C. p是指向字符串常量的指针,const修饰的是char,不是char*,所以“只读”的是p指向的那个字符串,而不是p本身。因此,p的指向是可以改变的,可以令它指向其他字符串常量。给*pp赋值即可。C正确。
D. 根据以上分析,可以将p赋值为null(让p指向空)。D正确。

我为什么需要一个win8.1平板电脑

win8.1平板和智能手机、ipad的有意义的区别:

屏幕大(与手机相比);

操控方式多,可用笔;

可以运行电脑程序。

1.携带和阅读电子资料,如名著、课本、教学视频。包括pdf、常见图片格式、常见视频格式。chm、exe可能也有少量需要。

2.更方便快捷地查阅信息。做作业时查知识点和题目,上课时查疑惑点,还可以方便地查询一些生活信息。

3.书写功能。可以用来记临时信息(笔记)、做草稿纸等。与纸张相比,有媒体承载形式多样(可以插入照片)、环保等优点。

4.比笔记本电脑更便携,哪里都装得下,又能兼容笔记本电脑上的软件。用笔或蓝牙鼠标键盘,可以在上专业课(如程序设计课)时代替笔记本电脑。

5.减少无意义的用笔记本电脑时间,从而减少在网上时间的浪费。

6.可以用来看乐谱。很方便,还能示范演奏。

用Sina App Engine部署你的Python Django Project

最近做了个Project,Python+Django1.5的通讯录。挂在了GAE上。网址是http://contactbook.sinaapp.com

然后很荣幸地被老师推荐给小伙伴们了。咱从来都是乐于分享的人,这不,今晚做了个PPTX教程,给小伙伴们看看,谁想把自己的project搞到网上去,可以照着做一做。就这样啦~

首先,你需要有一个账号。可以在http://sae.sina.com.cn/activity/invite/163068/weibo注册账号(通过这个链接注册,可以给我增加一些“云豆”,即消耗空间资源花费的货币。我花了一晚上做教程也不容易,希望大家能支持一下,谢谢!!!)

注册好后,用Sina App Engine部署你的Project.pptx,方法在这个pptx里:

http://pan.baidu.com/s/1Ccrbw