- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 Head First Design Pattern - 学习笔记
1. 设计模式的本质,就是针对具体问题,以某种方式将变化的部分抽取并封装起来,使其独立于其他不变的部分,不对其造成影响。2. 设计原则一:封装变化。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;3. 设计原则二:针对接口编程,而不是针对实现编程;4. 设计原则三:多用组合,少用继承;5. OO基础:抽象,封装,多态,继承6. OO原则:封装变化
2015-06-27 09:53:19
1010
1
原创 计算机科学导论学习笔记
Lecture 11. 中心思想:计算机有无与伦比的计算速度和存储容量,但它自身仍然有某些局限性。计算机的计算能力是通过基本计算和我们在此基础上增加的计算构成的,因此要有好的算法思维,能够把问题描述为算法,让计算机解决。所有的问题都可以被转化为包含数字和公式的数学问题解决。2. 知识的类型要搞清什么是计算,先搞清什么是知识,知识分两种:声明式知识和命令式知识,前者仅仅告诉我
2014-10-27 09:47:26
2159
原创 感悟《C和指针》——3.数据
所有的程序都对数据进行操作,本章对数据的各个方面进行了描述。特别是变量的三大属性——变量的作用域、链接属性和存储类型决定了变量的“可视性”和“生命期”。1.基本数据类型 C语言的基本数据类型包括整型、浮点、指针和聚合类型。 (1)整型家族。整型家族包括字符(char)、短整型(short int)、整型(int)、长整型(long int)和枚举类型(enum)。其中前
2014-10-20 09:54:01
603
原创 感悟《C和指针》——2.基本概念
一. 环境 每个ANSI C的实现都存在着两种不同的环境,一种叫“翻译环境”,一种叫“执行环境”,前者代表源代码文件被翻译成可执行文件所在的环境,而后者代表翻译生成的可执行文件的执行环境。两个环境并不要求一定要一致,比如嵌入式开发中的交叉编译,就是在环境A中编译链接可以在环境B中运行的可执行文件。这两种环境使用的指令集架构不一定相同。1. 代码翻译 代码的翻译由“编译”
2014-10-13 09:19:17
527
原创 阅读复杂指针声明语句的技巧
阅读复杂的指针声明是有技巧的,用一句话概括就是——抽丝剥茧,从内向外。用“C和指针”一书的两个例子来说明:1.对复杂声明的解释int ( *( *f ) (int, float) )[10];我们先从最里面开始,一点一点地向外扩展。(1)( *f )表示f是一个指针;(2)( *f )(int, float)表示f这个指针指向的是一个函数,该函数接收一个int和一个floa
2014-09-22 09:29:36
613
原创 对X86内存管理架构的总结
一.关于地址空间 X86有两种地址空间:线性地址和物理地址。1.物理地址空间类似于CPU的“心胸”,“心胸”越宽广,CPU能“看到”的内存和其他硬件设备就越多,比如最早的8086只有1MB的物理地址空间,那么我们就是给它1GB的内存,也无济于事;2.线性地址空间则类似于进程的“心胸”,“心胸”越宽广,进程能容纳的代码,数据以及堆空间和栈空间就越大;但是,由于x86的内存管理
2014-09-15 09:28:37
1444
原创 离散数学及其应用——ch7 高级计数
在第五章学习了基本的组合计数知识后,我们终于在第七章迎来了更高级的组合计数知识,把这章介绍的内容与第五章的内容合并起来,就形成了我们的组合数学工具箱,可以解决一大堆计数问题了,在计算机编程过程中很多问题其实都可以用计数模型进行建模,那么一个好的组合计数基本功当然是必不可少的了。下面我们就来总结一下这章都讲了哪些内容吧,这章的主题是三个基本方面:(1)递归关系;(2)生成函数;(3)容斥原理。
2014-09-10 11:53:14
1686
原创 离散数学及其应用——ch6 离散概率论
可以说概率论和组合计数同宗同源——都源于人类对赌博的热爱,概率论旨在对不确定性进行研究,比如买彩票是否会中奖等等。本章介绍概率论的一个子集,离散概率论,多说一句,概率论是测度论的一种特殊情况。 要学习概率论,就得先弄明白几个基本的概念:样本空间,(随机)试验,事件和结果。(随机)试验是某种过程,这个过程总会产生某个结果,比如我们掷一个骰子,或者从扑克牌中任意挑出一张牌,都会产生一个结果
2014-09-01 15:28:56
2549
原创 离散数学及其应用——ch5 基本组合计数
第五章介绍了基本的组合计数知识,组合数学是研究如何对对象进行安排的学科,最早诞生于赌博游戏,因此也是概率论的基础,这章介绍的基本知识点涉及如下几个方面:基本计数原理,鸽巢原理,基本排列和组合,二项式定理和广义排列和组合。 先来看看基本计数原理,基本计数原理可以说是组合计数的基础,为什么这么说呢?因为很多组合计数的公式都是由基本计数原理推导出来的,因此基本计数原理可以说得上是组合基础大厦
2014-08-25 09:45:02
1523
原创 离散数学及其应用—— ch4 归纳与递归
这章主要介绍了归纳法、递归定义和程序验证三个主题。 归纳法的引入主要是用于证明这样的命题,它声明某个性质对全体正整数都成立,即“对所有的正整数n,性质P(n)成立”这样一个全称量词。那么基本的归纳法就是“数学归纳法”了,它的证明步骤分为两步,基本步证明P(1)为真;然后在归纳步,对于任意的正整数k,先做归纳假设P(k)为真,然后在这个假设下,证明P(k+1)为真。这样就证明了命题,基本数
2014-08-19 09:20:22
2681
原创 离散数学及其应用——ch3 基础:算法、整数和矩阵
第三章的内容由三个主题构成:算法、基本数论和矩阵 一.算法 可以说算法是计算机的灵魂,计算机是用来解决问题的,解决问题的速度越快,效率就越高,生产率就越高,因此,人类从古至今对速度就有着特别的兴趣。要评估算法的效率,首先要搞清楚算法是什么?算法其实就是解决某类问题的有限的精确步骤,比如,“从n个元素中找出最大的元素”这样一个问题,如果我们找到一个解决该问题的有限且精确的步骤
2014-08-11 11:41:26
2072
原创 算法分析学习笔记(三) - 排序算法(下)
四. 走向世界之巅——快速排序 你可能会以为归并排序是最强的算法了,其实不然。回想一下,归并的时间效率虽然高,但空间效率仍然有可以改进的空间,人类仍然不满足,仍然孜孜不倦追求更好,更快和更强,于是便有了快速排序,这一神一样的算法以各种面目出现在各种编程语言中,最著名的就是C语言中的qsort了,Java也用它来排序基本类型。快速排序被称为20世纪最伟大的10大算法之一,它们是:
2014-08-04 09:36:57
1315
原创 算法分析学习笔记(三) - 排序算法(上)
一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可以走近排序算法这个大家族了。计算机科学发展到今天,已经有了成百上千种让你眼花缭乱,多的数不清的排序算法,而且还会有更新更厉害的算法尚未问世,它们都是人类无穷智慧的结晶,有太多太有意思的内容等待我们去思考,去品味。作为一篇入门级的学习笔记,我们不会在这里展开讨论,但是,我们将
2014-07-28 10:26:50
1596
原创 算法分析学习笔记(二) - 栈和队列(下)
六.一些有关栈和队列的面试题(取自“Cracking The Coding Interview”一书)1. How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push, pop and mi
2014-07-21 09:12:30
1417
原创 算法分析学习笔记(二) - 栈和队列(上)
一. 写在前面的话 本篇为“算法分析学习笔记”系列的第二篇,我们来聊一些跟基础数据结构有关的知识。对于网上无数的算法高手来说,这里讨论的东西都太小儿科了,但是作为一个系列的文章,我们还是要把该有的东西都补充完整的。本篇介绍两种最基本的抽象数据类型——栈和队列,以及支撑这两种数据类型的底层机制,计算机中一个很重要的概念——链表,确切的说,是“链式存储结构”。本篇分为两个部分,上半部分从回
2014-07-14 09:13:47
1031
原创 算法分析学习笔记(一) - 动态连通性问题的并查集算法(下)
三. 实际应用——解决物理化学中的渗滤模型问题 该问题来自于http://coursera.cs.princeton.edu/algs4/assignments/percolation.html,问题的原版描述如下: Percolation. Given a composite systems comprised of randomly distributed insula
2014-07-07 09:53:39
2939
1
原创 算法分析学习笔记(一) - 动态连通性问题的并查集算法(上)
一. 写在前面的话 “算法分析学习笔记”系列是我在Coursera上选修Sedgewick教授的“Algorithms”公开课过程中积累的一些学习心得。本篇是该系列的第一篇,主题是动态连通性问题(Dynamic Connectivity)。大概在三年以前,当我正头痛于CLRS上晦涩的红黑树介绍时,无意中在网上发现了Sedgewick教授的一篇讲红黑树的ppt,把个稀奇古怪的红黑树讲得浅
2014-07-01 09:19:15
5134
5
转载 【转载】一篇详尽分析C++“Pure Virtual Function Called”错误的文章
原文链接:http://www.artima.com/cppsource/pure_virtual.html The C++ Source"Pure Virtual Function Called": An Explanationby Paul S. R. ChisholmFebruary 26, 2007
2013-09-21 10:09:34
5621
1
原创 离散数学及其应用——ch2 基础结构:集合、函数、序列和求和
公理化集合论是乔治康托尔建立的,它是整个现代数学的基础,这突出表现在很多很重要的数学概念,比如函数,都是通过“集合”来建立的。本章重点介绍了集合和函数的基本概念,并由此引出一类特殊的被称为“序列”的函数。本章的基础和重点集中在集合和函数这两个概念的区别和联系上面,学习函数,要注意和重视“集合”的概念是如何在函数中体现的。深刻地理解基本概念是掌握和应用知识的最重要的基础。因此,深刻地理解集合的概念是
2013-08-17 20:45:11
2897
1
原创 离散数学及其应用——ch1逻辑与证明
“逻辑与证明”这一章就讲了三个故事:命题逻辑、谓词逻辑和数学证明。逻辑是数学推理的基础,也是这门学科的基础,以后我们在算法和计算机程序中会大量用到证明,这章主要介绍逻辑和证明的各种工具,方法,策略。一.命题逻辑 1.1节和1.2节介绍了命题逻辑,首先我们要搞清楚“命题”的概念,“命题”是一种声明性的句子,它要么为真,要么为假,但不会既是真的,又是假的。举个例子,句子“今天是星期天”
2013-08-17 20:43:57
2146
原创 动态规划——切钢筋、矩阵链乘法、菲波拉契数列和背包问题
动态规划——切钢筋问题#include #include #define UNKNOWN -1#define LEN 10int rodcut(int len);int rodcut_TD(int len);int rodcut_BU(int len);void printSolution(int len);int prices[LEN +
2013-08-17 20:37:11
884
原创 【战役总结】Common Lisp : A Gentle Introduction to Symbolic Computation
一.内容简介 整本书一共分成了14章,介绍了Common Lisp编程的入门级内容,虽然如此,整本书所介绍的内容是非常生动有趣的,且动手的练习也很多,每章都有Keyboard Exercise——就是那种需要你动手按照说明编写代码的大练习,比较有趣的几个键盘练习有:掷骰子游戏(第五章)、一个简单知识系统的模式匹配器(第七章)、家谱数据库(第八章)、一元函数画图程序(第九章)、经典的TI
2013-08-17 20:23:58
2186
原创 Common Lisp:符号计算引论 第十一章 键盘练习
;;; Common Lisp: A Gentle Introduction to Symbolic Computation;;; Chapter 11 Keyboard Exercise: program about DNA & RNA;;; A - 腺嘌呤 G - 鸟嘌呤 C - 胞嘧啶 T - 胸腺嘧啶;; 计算四种核酸对应值(defun complement-base (base
2013-08-10 18:21:55
971
原创 Linux下的代码阅读和查找工具
1.ctags ctags命令配合vim编辑器可以帮助程序员很方便地查看源代码,使用方法: (1)在源代码顶层目录下执行ctags -R * 递归建立源代码信息库; (2)vim -t tagname 打开含有tagname的文件; vim编辑器中 (3):tag tagname:跳到含有tagname的文件中;
2013-08-04 22:19:12
1664
原创 Linux下的编译与调试工具
Linux下的编译与调试工具 1.GCC(1)介绍 GCC是Linux环境下的一套工具集,全称是“GNU Compiler Collection”,它是Linux下的标准工具集,有三大特点:l 支持多种编程语言,如Ada,C++等;l 支持多个硬件平台,可交叉编译;l 支持多种操作系统,如Linux,Solaris和Windows等。(2)编译四个
2013-08-04 22:17:08
963
原创 Racket 语言编写的一个简单记事本程序
#lang racket/gui;;;; RacketNote --- a notepad based on racket;;;; Author: leesper;;; definition of the RacketNoteGui(define app-name " RacketNote")(define version " v0.0.9");(define file-name
2013-08-04 12:46:54
2916
原创 Common Lisp 语言编写的Tic-Tac-Toe
;;;; A Tic-Tac-Toe Game written in Common Lisp;;;; To launch the game, type in (play-one-game);; “It pays to take a few minutes at the outset to think about ;; the overall design, particularly the
2013-08-04 12:39:41
1054
原创 Common Lisp 符号计算引论第九章练习——画一元函数图像
(defun space-over (n) (cond ((< n 0) (format t "Error!~%")) ((zerop n) nil) (t (or (format t " ") (space-over (- n 1))))))(defun plot-one-point (plotting-string y-val) (space-over y-val)
2013-07-28 09:48:15
660
原创 Common Lisp 符号计算引论第八章——递归 学习笔记
1. three rules for solving problem recursively --- take every recursive problem as if it were a journey1) Know when to stop;2) Decide how to take one step;3) Break the journey down into that ste
2013-07-23 07:49:02
852
原创 数据库设计入门
*注:本文大量引用了参考文献所列资料中的图片和知识,在此对这些文章和网站的作者表示由衷的感激,是你们的分享让我学到了很多知识。实际开发中,少不了要和各种数据库打交道,一般说来,传统的关系型数据库使用方式主要有两种,一是普通用户通过命令行接口直接访问数据库,建立各种表格,维护这些表格(增、删、查、改),使用SQL语言基于数据生成各种报告;二是程序员基于数据库API抽象和封装特定于应用的数据库访问
2013-07-07 07:54:01
1520
原创 Common Lisp - 符号计算引论 第七章“Applicative Programming” 学习周记
按照作者的说法,他准备介绍三种编程风格,首当其冲的就是本章了,本章的题目叫做Applicative Programming,直译叫“应用式编程”,网上查了,其实就是“函数式编程"的同义词,猜想Applicative Programming,想强调的是Applicative——高阶函数(high order function)用其他的函数和列表作为参数传入,并用这个传入的函数对列表进行计算然后得到一
2013-05-18 14:19:24
924
原创 程序员的七条军规
1. 如果一个笨方法有效,那它就不是笨方法;2. 如果第一次编译就很顺利地通过了,那一定有隐藏得很深的bug;3. 重要的事总是简单的; 4. 简单的事总是难做的;5. 任何代码逻辑都没有表面看起来那么简单;6. 所有的开发都会比预计的时间长;7. 会出错的事总是会出错。
2013-05-15 16:42:07
632
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人