07 2015 档案

摘要: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) 编辑
摘要:Question: Given an Integer, you need to determine if it is a palindrome or not. You should not use any extra space in the process.Input: 121Output: Palindrome 咋一看问题很简单,我们只要镜像翻转这个数看是否和原来的数一样。但是这题的要求有个... 阅读全文
posted @ 2015-07-31 10:34 programnote 阅读(880) 评论(0) 推荐(0) 编辑
摘要:分治算法将一个大的问题分成多个小问题,每个小问题都是大问题的组成部分,然后用点额外的处理就能得到最终答案。例如,归并排序就是将原问题分成两个次级的问题,每个次级排序问题数据是上一级问题的一半,最后使用额外O(n)的工作量进行合并。时间复杂度表达式如下: T(n) = 2T(n/2) + O(n) 下面的理论可用于计算分治算法的时间花费。对于一个给定程序(或算法),首先找到问题的重现关系(时间复杂度... 阅读全文
posted @ 2015-07-30 17:22 programnote 阅读(229) 评论(0) 推荐(0) 编辑
摘要:为了分析给定的算法,我们需要找到什么输入算法花费时间较短,什么输入算法的花费时间较长。我们已经知道算法的时间花费可以以表达式的形式给出来,我们给出多个表达式:一个对应花费时间最少的情况,其他的分别对应时间花费更多的情况,一般的: 最坏的情况: 界定会让算法表现最差(时间最长)的输入数据。 输入这些数据。 最好的情况: 界定会让算法表现最好(时间最短)的输入数据。 输入这些数据。 一般(平均)情... 阅读全文
posted @ 2015-07-30 16:53 programnote 阅读(179) 评论(0) 推荐(0) 编辑
摘要:一个函数或算法的代码块花费的时间随输入增长的速率称为增长率。 假设你去买一辆小车和一辆自行车。如果你朋友刚好看到,问你在买什么,我们一般都会说:买小车。因为买小车比买自行车花费高多了。 【总花费=小车的花费+自行车的花费】 【总花费≈小车的花费(近似)】 对于上面的例子,我们用一个函数来表示买车的花费,这个函数忽略低阶指数的项(相对于高阶项,他们的对函数结果的影响很小)。下面这个例子中n4 , 2... 阅读全文
posted @ 2015-07-30 15:55 programnote 阅读(1760) 评论(0) 推荐(0) 编辑
摘要:我们用煎蛋来打个比方。煎蛋的一般步骤是: 1.>取煎锅。 2.>取油。 ->我们有油吗? ****有,把油倒入煎锅。 ****没有,我们要去买油吗? #########要买,出去买油。 #########不买,可以终止煎蛋。 3.>打开煤气灶,等等。 对于一个问题(例如煎蛋),我们所做的是给出解决这个问题的具体步骤。算法的正式定义如下: 【对于给定问题,算法是一步步解决问题的指令】 阅读全文
posted @ 2015-07-30 15:24 programnote 阅读(437) 评论(0) 推荐(0) 编辑
摘要:【这里我们将要讨论一些高级的位操作技巧,如果能适当使用会大大提高你程序的运行速度】 我们已经讨论了一些简单的位操作方法,如果你还不熟悉位操作可以先浏览一下【你必须知道的简单的位操作技巧】,这里我们接着往下说: 技巧6:将最右边的数值为1的bit位设为0 y = x & (x-1) 终于开始有点意思了,技巧1到技巧5说实话是有点小儿科。 这条语句将从右至左看值为1的比特位置为0。例如:整数001... 阅读全文
posted @ 2015-07-30 14:41 programnote 阅读(2203) 评论(0) 推荐(1) 编辑
摘要:【这里我们将讨论一些位操作技巧,如果使用得当会有助于提高你编出的程序执行速度】我们编程或多或少会使用到位操作,位操作是编程中处理整型数据高效方法。例如,想要求出一个整数二进制位中值为 1 的个数,简单的方法是用一个循环,其实我们用一两个位操作的小技巧就能高效的解决。假设读者已经知道整型数据二进制补码... 阅读全文
posted @ 2015-07-29 16:39 programnote 阅读(4825) 评论(0) 推荐(0) 编辑
摘要:【问题:给定无符号整型数据,需要你翻转它的比特位(依中心镜像翻转)】 这个问题有很多解决方法,这里介绍利用异或(xor)运算解决这个问题的小技巧。 提示:怎样交换第i位比特和第j位比特数据呢?试着想想怎样用异或(xor)运算实现。 异或运算技巧: 实现翻转我们需要将这个数据的前n/2(假设数据有效位数为n,二进制)有效位和后n/2有效位进行交换。写一个函数swapBits(i, j),用来交换第i... 阅读全文
posted @ 2015-07-29 13:23 programnote 阅读(651) 评论(0) 推荐(0) 编辑
摘要:【这里我们将要介绍一个最简单也最快速的转换字母大小写的方法,提示:使用位技巧】【以下代码用C语言编写】在编程的时候我们经常遇到需要转换字母大小写的情况,有时候就是这个问题,有时候是为了解决其它问题。大家应该能想到一些方法。我将要介绍一种最优美的方法,也就是用比特技巧解决问题。我们已近讨论过一些比特操... 阅读全文
posted @ 2015-07-29 12:02 programnote 阅读(3608) 评论(0) 推荐(0) 编辑
摘要:#include #include #include "opencv2/imgproc/imgproc.hpp"#include "opencv2/core/core.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/... 阅读全文
posted @ 2015-07-28 15:25 programnote 阅读(286) 评论(0) 推荐(0) 编辑