摘要: 我们学习的算法中的表达式有中缀、前缀和后缀之分,到底有什么区别呢? 中缀(INFIX) 中缀表达式(infix expression)可以是单个变量,或两个变量以及中间的操作符。 AA + B(A + B) + (C – D) 前缀(PREFIX) 前缀表达式(prefix expression)可以是单个变量,一个操作符,后面跟两个操作数,每个前缀表达式包括一个操作符和两个操作数。 A+ A... 阅读全文
posted @ 2015-08-09 17:55 programnote 阅读(1995) 评论(0) 推荐(0) 编辑
摘要: 类似于队列,堆栈是个简单的数据存储结构。堆栈中数据进出的顺序很重要,举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。 定义:堆栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)... 阅读全文
posted @ 2015-08-09 08:56 programnote 阅读(11610) 评论(0) 推荐(1) 编辑
摘要: 初入门的我们经常听见别人说“真正的程序员用C语言编程,C是最快的语言因为它是最靠近及其底层的语言。”那么和其他语言相比C语言到底有什么特别的呢? C语言没有什么特别,这就是它快速的秘诀。 新的语言支持更多的特性,比如,垃圾回收(garbage collection),动态类型(dynamic typing)等等。这些新加入的特性让出学者们更容易上手。 问题的关键就在于,这些新的功能增加了处理开销(... 阅读全文
posted @ 2015-08-08 21:12 programnote 阅读(4256) 评论(0) 推荐(1) 编辑
摘要: 回溯法是分治穷举搜索的一个方法。有点绕人,我复制wiki的解释如下:回溯法(英语:backtracking)是暴力搜寻法中的一种。回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,... 阅读全文
posted @ 2015-08-08 18:00 programnote 阅读(1669) 评论(0) 推荐(0) 编辑
摘要: void binary(int n) { if(n #include char A[4]; /* Code obtained from http://www.studyalgorithms.com */ void binary(int n) { if(n < 1) printf("%s\n",A); // Assume A is a global va... 阅读全文
posted @ 2015-08-08 17:58 programnote 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 汉诺塔是数学上的一个谜题。有三根杆子,一些不同大小的中间有孔的圆盘,可以按大小顺序套在杆子上,最小的在最上面,堆成类似锥形的结构。问题是怎么把一根杆子上的一堆圆盘移动到另一根杆子上,限定条件如下: 一次只能移动一个圆盘。 每一次移动步骤包括将一根杆子最上面的圆盘移开放到另一根杆子上圆盘的最上层(不能动下面的盘子)。 所有大圆盘的下面不能有比他小的圆盘。 算法步骤(有n个圆盘,三根杆子分别为A,B... 阅读全文
posted @ 2015-08-08 17:17 programnote 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 每一次递归调用都将过程(精确地说是“变量”)在内存中复制一遍。一旦一个过程结束(会返回一些数据),这个过程在内存中的副本就被丢弃。递归看似简单,但是可视化跟踪执行过程就很花费时间。好了,让我们来看下面的例子: int Print(int n) //print numbers 1 to n backwards { if(n == 0) return 0; else ... 阅读全文
posted @ 2015-08-08 16:38 programnote 阅读(2660) 评论(0) 推荐(0) 编辑
摘要: 什么是递归? 任何函数调用自己都叫做递归,不管是直接的还是间接的,递归方法通过调用自己来解决一个问题的一部分。这就叫递归步骤。递归步骤一般会引发一系列的递归(当然了这是废话,不然就不叫做递归了)。这里面有一个重要的点就是要确保你的递归函数有个终止条件(不然的话就出不来了)。每一次的递归都是解决原问题的一个小问题,并且这个小问题是原问题的一个副本(像套娃一样,一层比一层小但是除了代销其他方面都很相似... 阅读全文
posted @ 2015-08-08 16:23 programnote 阅读(294) 评论(0) 推荐(0) 编辑
摘要: Question: You are given a function rand7() – that generates random numbers from 1-7. Write a function rand10() – that uses rand7() to generate random numbers from 1-10. 这是一个概率分析的问题,你应该对期望值的概念很清楚,概率分析... 阅读全文
posted @ 2015-07-31 12:15 programnote 阅读(706) 评论(0) 推荐(0) 编辑
摘要: Question: You are given two axis-aligned rectangles. You have to determine if these rectangles overlap each other or not.Rectangle 1 : P1 (x, y), P2 (x,y)Rectangle 2 : P3 (x, y), P4 (x,y) 这个问题给出两个长方形... 阅读全文
posted @ 2015-07-31 11:03 programnote 阅读(2298) 评论(0) 推荐(0) 编辑