- 博客(34)
- 收藏
- 关注
原创 普林斯顿公开课 算法1-9:并查集-快速合并
本节讲的是并查集的另外一种实现方法。这种方法的合并操作开销很小,但是查找操作开销很大。数据结构这种算法的数据结构和快速查找方法的数据结构是一样的,也是N个整数组成的数组。数组中每个元素id[i]的含义是指i的上级是id[i]。根节点一个节点的根节点就是id[id[id[...id[i]....]]],一直循
2014-05-31 20:37:50 1807
原创 普林斯顿公开课 算法1-8:并查集 快速查找
本节讲的是并查集的第一种实现方法,这种方法查找操作开销很小而合并操作开销比较大。数据结构假设有N个节点,那么该算法的数据结构就是一个包含N个整数的数组id[]。判断操作判断节点p和节点q是否相连就是判断id[p]和id[q]的值是否一致。合并操作合并节点p和节点q就是将id数组中所有的id[
2014-05-31 20:36:56 1970
原创 普林斯顿公开课 算法1-7:并查集基本概念
本节讲的是并查集的基本概念。算法的开发步骤对问题进行数学建模寻找一个能够解决问题的算法运行算法检测速度和内存是否符合要求如果达不到要求,找出原因寻找一种方法来解决问题循环步骤,直到满意为止以上就是算法开发比较科学的方法。算法开发完成之后需要进行数学分析。并查集问题
2014-05-31 20:35:55 1891
原创 普林斯顿公开课 算法1-6:内存
讲完了算法的运行时间,现在讲一下关于算法的内存占用率。内存单位在计算机中,内存是通过字节来表示的,一个字节表示8个位。1KB是2^10字节。数据类型占用的内存在32位系统中,一个指针占用4个字节。在64位系统中一个指针占用8个字节。本课程中使用64位机器,一个指针占用8字节。基本数据类型
2014-05-31 20:34:02 2228
原创 普林斯顿公开课 算法1-5:算法理论
本节主要讲解的是算法的复杂度。算法性能算法的性能分为三种:最佳情况:计算时间最短的情况最差情况:计算时间最长的情况平均情况:随机输入的期望开销以二分查找为例最佳情况是1,因为第一次就有可能找到需要找的整数。最差情况是logN平均情况是logN算法复杂度
2014-05-31 20:33:16 2172
原创 普林斯顿公开课 算法1-3:数学模型
本节主要通过建立数学模型,来计算算法的运行时间。公式算法的运行时间=所有操作的开销乘以操作的次数之和开销下表展示了各种操作所需要的时间(单位:纳秒)整数加法 2.1整数乘法 2.4整数除法 5.4浮点加法 4.6浮点乘法 4.2浮点除法 13.5sin 91.3
2014-05-30 19:55:02 2177
原创 普林斯顿公开课 算法1-2:观察
这章通过一个简单的例子,详细说明算法分析的步骤。算法问题给定N个不同的整数,从中任意取出三个整数。请问有几种情况,使得取出的3个整数之和为0?解法可以使用暴力算法,代码如下:123456789for(int i=0;
2014-05-30 19:54:09 2475
原创 普林斯顿公开课 算法1-1:算法分析
为什么要分析算法分析算法可以预测算法的性能,比较算法之间的优劣,保证算法的正确性,理解算法的理论基础。成功算法的例子离散傅立叶变换,如果使用暴力方法,那么算法的复杂度是是N^2,如果使用FFT快速傅立叶变换可以实现O(N logN)复杂度N-body模拟:使用Barnes-hut算法可以将复杂度降低到N logN
2014-05-30 19:52:31 3348
原创 通俗解释什么是傅立叶变换
大家一定见过下面这种声音的波形图吧。大家也一定见过播放音乐时跳动的条形图吧,它将声音分成多个频段,可以显示每个频段的音量。下面这种频谱图和上图也是类似,颜色亮的地方表示某个频率的音量大。亮点越高表示声音的频率越大,听起来越感觉尖锐。波形图转换成频谱图的过程中就用到了傅立叶变换。简
2014-05-30 19:51:05 2650
原创 普林斯顿公开课:算法第0章,课程介绍
课程介绍这门课程核心内容是算法和数据结构。具体的算法和数据结构如下:数据类型:堆栈、队列、背包、并查集、优先队列。排序:快排、并排、堆排、基数排序查找:BST、红黑BST、哈希表图:BFS、DFS、Prim、Kruskai、Dijkstra字符串:KMP、正则、TST、哈夫曼、LZW高级:B树、后缀数组、最
2014-05-30 19:15:11 2890 1
原创 网络密钥交换协议——Diffie-Hellman
Diffie-Hellman算法是一种交换密钥的算法。它是目前比较常用的密钥交换算法。这种算法的好处是能让两台计算机在不安全的网络环境中完成密钥的交换。本文详细介绍了算法的计算过程。
2014-05-23 20:14:41 2043
原创 读书笔记:计算机网络第10章:网络安全
章节概述本章节涉及到所有的网络层,因为每个网络层都可能会有漏洞被黑客利用。网络安全的目的就是对付各种各样的网络威胁,通常我们使用加密技术来防止漏洞。但是本章只是网络安全的一个概要。如果你感兴趣的话可以参加另一门网络安全的课程。网络安全就像性能,有些人非常看中安全,有些人却不一定需要。网络安全最关键的部分是建立威胁模型,描述威胁的原理以及攻击者能利用威胁做什么
2014-05-23 20:10:55 2098
原创 读书笔记:计算机网络9章:QoS服务质量
章节概述本章节主要讲QoS服务质量。涉及到网络层、传输层和应用层。QoS和用户需要得到的服务种类有关。不同的服务需要的带宽、延迟、丢包率都是不一样的。QoS是未来互联网的重要问题之一。目前的互联网没有服务质量保证。因为目前的网络只是将数据包尽力投递到对方服务器,然而投递的速度、延迟、丢包率都是没有保障的。但是有时候“尽力”投递是不够的,因
2014-05-21 20:07:26 3104
原创 网页性能智能优化——Apache扩展mod_pagespeed
本文主要介绍出自谷歌公司的Apache扩展模块mod_pagespeed。该模块的目标是提高网页的加载速度。具体的实现方法主要是通过优化html代码、css代码、js代码、缩放图片来减少请求数量、请求流量,从而提高网页的加载速度。我们首先展示一下插件的效果。下图是还没有开启mod_pagespeed模块的情况。在这种情况下,页面中充斥着大量空格,以及很长的
2014-05-20 20:50:43 4313
原创 读书笔记:计算机网络8章:应用层
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解
2014-05-19 20:54:28 1570
原创 读书笔记:计算机网络第7章:阻塞控制
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解
2014-05-19 20:47:54 2443
原创 读书笔记:计算机网路6章:传输层
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解
2014-05-17 21:20:53 1142
原创 计算机网络5章:路由
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解
2014-05-17 12:48:09 1448
原创 读书笔记:计算机网络4章:网络层
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解
2014-05-17 12:39:12 1587
原创 读书笔记:计算机网络第3章:重发技术、多址技术、交换技术
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解。本章详细讲解了链路层的具体情况,包括重发技术、多址技术和交换技术。
2014-05-14 20:55:52 1656
原创 读书笔记:计算机网络第二章:物理层
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解。本章详细讲解了物理层,讲解了比特流如何通过各种介质进行传播。
2014-05-13 23:29:25 1661
原创 【读书笔记】计算机网络1章:课程介绍、协议、分层
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解。本章讲述了这门课程的大致情况,讲述了协议、协议层等基本概念。
2014-05-12 20:20:43 1439
原创 【读书笔记】设计模式第6章:行为型模式2
本文主要分析了中介者模式、观察者模式、备忘录模式、访问者模式、状态模式、解释器模式,介绍它们的定义、优缺点、使用场景,以及实例代码。为了深刻地理解设计模式,最重要的还是动手编写代码。我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。代码可以通过以下链接进行浏览:http://git.oschina.net/caipeichao/java-design-pattern这些代码都经过编译运行,保证没有错误。
2014-05-11 20:59:35 854
原创 【读书笔记】设计模式第五章:行为型模式
本文主要分析了模板方法模式、命令模式、责任链模式、策略模式、迭代器模式,介绍它们的定义、优缺点、使用场景,以及实例代码。为了深刻地理解设计模式,最重要的还是动手编写代码。我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。代码可以通过以下链接进行浏览:http://git.oschina.net/caipeichao/java-design-pattern这些代码都经过编译运行,保证没有错误。
2014-05-10 19:16:19 923
原创 代理模式、装饰模式、适配器模式、组合模式、桥梁模式、外观模式、享元模式【读书笔记】设计模式4章:结构型模式
结构型模式描述了如何将对象或类结合在一起,形成更加强大的结构。代理模式定义也叫委托模式为其他对象提供一种代理,以控制这个对象的访问角色:抽象角色、真实角色、代理角色种类:远程代理(访问另外的JVM)、虚拟代理(延迟创建不需要的部件)、保护代理、缓存代理、同步代理、智能引用代理(比如日志)优点职责清晰高扩展性智能化:在运行时才确定被代理的真实对象
2014-05-09 20:24:31 1700
原创 【读书笔记】设计模式3章:创建型模式
创建型模式能封装对象的创建过程,能提供对象的创建和管理职责。单例模式定义确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例分为饿汉式和懒汉式(Lazy Initialize)懒汉式注意多线程同步(synchronize)优点减少内存开支(因为只有一个实例)减少系统性能开销(因为只创建一次)避免了资源的多重占用(比如日志文件
2014-05-08 20:41:08 676
原创 设计模式中使用了哪些原则?【读书笔记】设计模式原则
SRP 单一职责原则一个类应该只能有一个职责优点:降低类的复杂性提高类的可读性提高代码的可维护性和复用性降低因变更引起的风险LSP 里氏替换原则继承的优点代码共享,减少创建类的工作量提高代码的可重用性提高代码的可扩展性提高产品或项目的开放性继承的缺点继承是入侵式的:只要继承,就必须拥有父类所有的属性和方法降低代码的灵活性增强了耦合性为了增强继
2014-05-08 20:33:43 734
原创 【读书笔记】设计模式1章:设计模式概述
概念:设计模式就是一套反复使用、多数人知道的、经过分类编目的优秀代码的设计经验的总结。推荐读物:《设计模式:可复用的面向对象软件的基础》 GoF设计模式要素模式名称问题:描述了应该在何时使用该模式环境或初始变量(也叫前提条件)解决方案效果:描述设计模式的利弊举例末态环境:描述设计模式带来的好结果和坏结果推理:解释设计模式的步骤、规则其他有关的模式已知的应用设计模式简史设计模式起
2014-05-06 21:10:03 544
原创 软件工程推荐书单【读书笔记】代码大全35章:更多书籍
关于软件开发《Pragmatic Programmer》 Hunt and Thomas《Programming Pearls, 2d edd》 Bentley《Extreme Programming Explained:Embrace Change》 Beck《Writing Solid Code》 Maguire《The Practice of Programming》 Brian K
2014-05-06 21:07:39 1122
原创 【读书笔记】代码大全34章:软件工艺主题
这本书大部分讲的都是软件开发的细节,本章节讲的主要是从宏观角度讲解软件工艺。控制复杂度软件开发的精髓就是控制复杂度降低复杂度的方法将系统拆分成子系统精心设计接口,尽量隐藏设计细节避免使用全局变量避免深度继承避免goto整个项目使用同一种错误处理方法统一Exception的使用方法不要把类设计得太复杂保持函数的短小使用良好的变量名减少函数的参数使用现成的编码规
2014-05-04 21:32:07 798
原创 哪种性格最适合IT行业?【读书笔记】代码大全33章:性格在软件领域中的作用
在软件开发中,性格可以决定一个人的能力。虽然我们不能提升自己的智商,但是性格方面我们是可以作出一些改变的。从某种程度上说,一个人的性格决定了他能不能成为软件方面的专家。所以我们应该对自己负责,让自己变得更好。聪明、谦虚我们不需要非常聪明,但是只要按照一定的原则,降低程序的复杂度,减少大脑的负荷,就能够在软件开发方面有深刻的造诣。越谦虚,进步越快软件工程很多程度都是在
2014-05-04 09:18:42 1432 1
原创 【读书笔记】代码大全32章:自文档技术
外部文档大项目的文档往往放在源代码之外单元开发文件:是一种非正式的文件,给开发人员在开发的时候查看详细设计文档:描述类/方法级别的设计细节,是一种正式文档良好的编程风格可以作为文档到底要不要注释呢?良好的注释是很有价值的,但是不好的注释不但浪费时间,而且影响代码质量良好注释的关键注释的种类重复代码的意思:完全没用解释代码:说明代码太复杂了,需要改进作为记号:
2014-05-02 21:28:18 733
原创 【读书笔记】代码大全31章:布局和风格
主要将了关于编程方面的美学。布局的基本概念布局的好坏极其糟糕:public class Main{public static void main(String[] argv){System.out.println("test");}}一般糟糕良好格式的基本理论好的格式能展示程序的逻辑结构人看到的代码和计算机看到的代码是完全不一样的好布局能带来多少
2014-05-02 21:26:45 814
原创 【读书笔记】代码大全30章:开发工具
设计工具UML源代码工具IDE好处编辑的时候能检测出编译错误集成源代码控制、构建、测试和调试工具能查看整个项目的轮廓跳转到指定的类、方法或变量跳转到使用某个类、方法、变量的地方支持语言格式交互的编辑方式,有助于提高效率括号匹配通用语言模板智能缩进重构工具可以运行/录制宏查找时自动显示常用词语正则查找/替换可以同时编辑多个文件左右两边的可视化diff工具多级撤销
2014-05-02 21:24:28 840
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人