综合
文章平均质量分 81
JUAN425
这个作者很懒,什么都没留下…
展开
-
N皇后问题(N queen‘s problem)
N 皇后问题是一个古老而著名的问题, 是回溯算法(back track)的典型案例。问题描述如下:N x N 的棋盘上放置N个皇后。 要求同一行中, 同一列中, 以及对角线上(包括正负对角线)只能有一个皇后, 否则就会发生clash的情况而失败。 问解决方案?解决思路如下:(1)逐列扫描, 从最左边的列开始, 总共有N个queens。(2)如果所有的queens 都被安全放置了,原创 2015-03-07 15:52:35 · 3305 阅读 · 0 评论 -
确定一个二叉树是另一个二叉树的子树
问题: 给定两个binary trees, check 第一个二叉树是否为第二个二叉树的子树。 例如, 如下: Tree S 10 / \ 4 6 \ 30 Tree T 26 / \翻译 2015-03-12 21:56:45 · 838 阅读 · 0 评论 -
longest palindromic substring(最长回文子串)
最长回文子串(LPS)就是从给定的字符串中找出最长的一个子字符串, 这个子字符串从左往右读和从右往左读, 读出的结果是一样的。例如:aba, a, abba均是回文子串。 (方法一) bruteforce的办法: 最简单的办法就是价差字符串的每一个子字符串是否为palindrome or not。 我们可以运行三个loops, 外层两个loops 一个个的选择字符串所有可能的子字符串,原创 2015-03-19 21:40:47 · 790 阅读 · 0 评论 -
OOP继承问题,虚基类, 建构子的构建顺序问题
这里我们说说多重继承(multiple inheritance)。 多重继承的问题涉及到建构子和析构子的调用顺序问题, 多重继承造成的歧义型(例如, 当多个base classes中有同名函数的时候, 如何解决,members from common base class如何解决(dimond的时候, 即类A继承自B, C, 但是B, C又同时继承自一个类D时候, 就出现歧义了, 此时A有两份原创 2015-03-22 20:08:30 · 911 阅读 · 1 评论 -
Eggs Dropping puzzle(2 eggs, 100 floors)
题目如下:You are given two eggs, and access to a 100-storey building. Both eggs are identical. The aim is to find out the highest floor from which an egg will not break when dropped out of a window from th翻译 2015-03-30 15:31:19 · 1402 阅读 · 0 评论 -
subset problem(子集和问题)
给定一个包含N个非负数的set, 并且给定K, 从集合中找出一组元素子集, 使得这组子集的各个元素相加起来和是K。 注意, 我们假设输入的set 中的各个元素均是unique的(即 no duplicates present)。方法一(穷竭搜索subset sum).。 一个比较naive的办法就是考虑这个集合的所有可能的subsets。 不难看出, 给定集合(N个元素)的subset的个原创 2015-03-13 15:41:52 · 19827 阅读 · 2 评论 -
静态链接和动态链接
1 静态链接库的优点 (1) 代码装载速度快,执行速度略比动态链接库快; (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。 2 动态链接库的优点 (1) 更加节省内存并减少页面交换; (2) DLL文件与EXE文件独立,只要输出接口不变(即名转载 2015-03-22 19:36:02 · 506 阅读 · 0 评论 -
minimu scalar product
ProblemYou are given two vectors v1=(x1,x2,...,xn) and v2=(y1,y2,...,yn). The scalar product of these vectors is a single number, calculated as x1y1+x2y2+...+xnyn.Suppose you are allowed to pe原创 2015-03-13 21:18:23 · 691 阅读 · 0 评论 -
why are U rejecting me
来到学校, 一直在看算法导论, 挑战编程竞赛。 3月8号投了阿里巴巴的实习生。 等了将近2两天的时间, 收到了阿里巴巴的来电。接到电话 刚开始心里有点紧张。 面试官的第一句说, 他是搞Java的, 但是我简历上写的自己搞的C++。 然后就让我介绍一下自己做过什么。 慌慌张张的, 我也没问面试官叫什么名字, 说了一些情况。问我了解web编程不, 为然后又问了什么ajax, 我咋知道。 后来原创 2015-03-13 21:40:01 · 779 阅读 · 0 评论 -
给定一个file, 查找出里面出现频率最高的10个单词
之前已经总结了给定一组数字, 如何在线性时间内找到第k小的数字。这两个问题看似有十分subtle的关系。 很显然这里是找最大的前K个单词。 单词相当于卫星数据, 直接对单词的键值, 即频率排序啦。 现在我们对这个求top K frequent words做一个小小的总结。方法一: minheap + external sort(即小顶堆 + 外部排序)之所以使用外部排序, 是因为考原创 2015-03-24 17:15:31 · 9991 阅读 · 0 评论 -
强连通分量和二部图
对于无向图G: 如果两个顶点之间有一条路径连着, 我们就说这两个顶点是连通的(无向图的边无方向性, 只要有边连着就是连通的)。 如果满足图中的任意两个顶点都是连通的, 我们就说图是连通图。 所谓的连通分量, 就是无向图中的极大连通子图。 对于连通图, 只有一个连通分量, 就是它本身。 非联通的无向图有多个连通分量。 如下图, 该无向图的连通分量分别是: (A L M J B F C), (原创 2015-03-24 16:31:49 · 1198 阅读 · 0 评论 -
Loop in List(链表中的圈)
Q: 给定一个linked list, 如何判断这个linked list 中是否有一个loop。 例如如下图:链表的一个节点定义如下:struct ListNode { int data; ListNode *next;};分析: 这是一个很有名的面试题。 我们的解法是:使用两个指针pFast和pSlow, 均初始化为指向链表头。 一个指针一次向前移动1个原创 2015-03-12 19:59:35 · 943 阅读 · 0 评论 -
C++中String 注意
C++标准库中有一个的头文件。 我们可以将其看成一个一般的型别。 这样, 我们就可以像对待基本型别一样进行=赋值, ==比较动作, + 进行串联等等。 C++的标准程序库对于string的设计思维就是让他的型别尽可能的像基本型别, 而不会在操作上引起麻烦。 问题一: cin 读取一个string类的对象的时候, 只是读取到空格出现处, 如何读取一整行, 解决办法是可以使用函数getlin原创 2015-03-20 16:41:20 · 573 阅读 · 0 评论 -
bloom filter(布隆过滤器)
今天中邪了, 觉得看看bloom filter。 看看海量数据处理的经典算法。 这是1970年提出来。 是用于检测一个元素是不是一个集合的成员。 如果检测结果为True, 则该元素不一定在该集合中。 如果检测结果为False, 表明该元素一定在这个集合中。 这说明bloom filter 具有 100%的召回率。 每个检测请求返回的结果只有两种, 也就是“在集合内(可能错误)” 和 “绝对不原创 2015-03-20 16:08:49 · 869 阅读 · 0 评论 -
(STL)std::unique函数的实现
源于《挑战程序设计竞赛》第164页程序中调用的函数unique, 今天好好看看。 该函数std::unique位于头文件声明1如下:templateForwardIt unique( ForwardIt first, ForwardIt last );声明2如下:templateForwardIt unique( ForwardIt first, ForwardIt last,原创 2015-03-10 10:17:15 · 2860 阅读 · 5 评论 -
shuffle an array(慎用Xor实现的swap啊 哥)
源于算法导论中文第三版第100页关于快速排序的随机化版本。 也就是在算法中引入随机性。 使得算法对于所有的输入都有一个好的期望性能。 这里采用的办法是对于任何一种给定的输入, 我们采用一种 随机抽样(random sampling)的 技术, 对这个给定的输入进行重新排列。 使得我们等可能的获得者写数字的任意排列。一个比较naive的办法就是创建一个辅助数组temp[],将数组arr[]内原创 2015-03-09 09:55:14 · 1041 阅读 · 0 评论 -
数组内存分配。
加的群有人问数组的元素的地址关系。 我错了!!在这里解答一下:int arr[4];&arr[1] = arr[0] + sizeof(int) ;静态分配, 即普通数组, 由于在栈中分配, 而栈的生成方向是自高地址向低地址生成。 所以有:&arr[0] > &arr[1] ....动态分配的数组。针对动态数组。 动态数组的内存分配在heap中。 而heap 的原创 2015-03-11 15:39:18 · 1220 阅读 · 0 评论 -
寻找数组中的第k小的元素
算法导论在第九章中讲的很清楚了。 方法一: 比较naive的办法就是首先对数组排序, 然后取第k个元素。 时间复杂度随我们选择的排序算法的复杂度决定。// simple solution#include #include using namespace std;// function to return kth smallest elementint kthSmalles原创 2015-03-10 14:20:41 · 1691 阅读 · 0 评论 -
Cuda 内存模型相关相关知识
CUDA中, 每个线程所能掌控的内存有如下几种: (1)R / W per thread registers。 (2) R/W per thread local memory(每个线程的局部内存) (3) R/W per block shared memory(共享内存) (4) R/W per grid global memory原创 2015-03-11 19:11:11 · 839 阅读 · 0 评论 -
对计算机bit的强大的理解力: 用10只小白鼠查找1000瓶药中有毒的那一瓶(只有一瓶)
无意中看到一个博客地址如下, http://blog.csdn.net/limenghua9112/article/details/44724389有意思:前两天参加面试,CEO给我出了一道题,当时我没有回答出来,在CEO的提示下明白了解决方案。好多朋友私下问我是如何在一天之内推算出哪一瓶药水有毒的,现在把答案公布于下,包括源代码。 题目:1000 瓶无色无味的药水,其中原创 2015-03-29 13:20:08 · 6812 阅读 · 1 评论 -
Fence repair
descriptionFarmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer lengt翻译 2015-01-24 10:58:25 · 595 阅读 · 0 评论 -
polymorphism(多态): 虚函数 + 抽象基础类
C++中, 多态(polymorphism)是三大关键词(分别是encapsulation, inherittance, polymorphsim)之一。所谓的多态, 简单的说就是多种形态。OOP支持如下的两种多态的实现方式:(1) static binding, 又称为early binding, 就是在compile time 实现的绑定。 主要通过函数重载(function o原创 2015-03-23 09:34:06 · 1064 阅读 · 0 评论 -
反转链表(reverse a lnked list)
今天, 看到一个面试题。对于一个单项链表, 编写一个函数, 把给定的单项链表进行反转。 即最后一个元素变成新链表的第一个元素...。例如下图: 第一个field为节点存放的数据, 第二个field指的是存放下一个node的地址, head指向链表头。 反转之后, 得到新的链表如下:解决办法:我们可以遍历链表, 对于每一个当前的节点, 我们可以调整(adjust)当前原创 2015-04-20 08:54:52 · 1437 阅读 · 1 评论 -
如何高效的结算一个正整数中二进制表示1的个数
为了计算一个正整数中二进制表示1的个数。 我们可以采用查表的办法。下面四位四位的计算:0000对应0个10001对应1 个10010 对应1个1....................1110 对应3个11111对应4个1所以我们建立如下size为16的数组用于映射0, 1, 2, 3, ....., 15这16个数字对应的整数1的个数。#include u原创 2015-03-29 20:55:59 · 576 阅读 · 0 评论 -
一个简单的测试计算机的位数的程序: 不用sizeof
题目比较简单, 不再赘述, 只贴程序。#include using namespace std;int countBits() { unsigned int i = 1; int c = 1; // 注意是1, 不是0 while(i<<=1) { c++; } return c;}/* Program t原创 2015-04-09 19:06:03 · 779 阅读 · 0 评论 -
海量数据找缺失的值
一个文件中含有4billion的integers, 试图找出一个不再这个文件中的数。假如一个integer用4bytes表示,那么文件的大小就是4 * 10 ^9 * 4 = 16 GB。 文件太大了。 (1)办法一: 采用外排序的办法。对这些数据排完序之后, 可以从第一个数开始遍历, 知道出现gap, 表示gap之间缺少一个元素。这样我们输出的是第一个missing的value。(2原创 2015-04-16 20:13:14 · 968 阅读 · 0 评论 -
音乐推荐系统
一个music recommender system主要有三部分组成:(1) users(用户)(2) items(即音乐库中的很多音乐)(3) user item matching algorithms(用户听过的音乐匹配算法)User profiling 解决的是不同的users的profile的的差异性。 这一步的目的就是使用基本的信息对用户的music taste进行划分。原创 2015-04-16 21:34:38 · 8680 阅读 · 2 评论 -
使用两个stack对一个stack的内容进行反转
办法一(只采用一个stack), 通过递归实现:// http://w...content-available-to-author-only...s.org/reverse-a-stack-using-recursion/ #include#includeusing namespace std; void printStack(stack st){ while(!st.e原创 2015-05-08 21:48:50 · 1592 阅读 · 1 评论 -
检查一个string里面是否有重复的字符
sol1: 使用two loops循环, 比如str[1....n], 对于第一个字符, 检查后面的, 如果重复, 返回false, 如果没有一个元素和第一个字符重复, 就继续检查str[2], 一次类推下去。这个办法的时间复杂度为O(n^2)sol2: 使用哈希表, 我们将每一个character hash 到一个哈希表中, 检查这个字符是否已经存在, 如果位置处为1, 表示已经存在原创 2015-04-20 10:26:09 · 5276 阅读 · 2 评论 -
Torch7安装
尝试了很多办法去安装Torch7。安装平台: 虚拟机 + ubuntu12.04, 32位机尝试过采用官网的办法安装, 网址如下:http://torch.ch/docs/getting-started.html#_但是failed.后来按照如下方式安装, 成功了。主要指令如下:如果之前安装过Torch7, 想重新安装, 按照如下方法clean掉old versio原创 2015-05-15 15:37:32 · 17436 阅读 · 2 评论 -
关于struct结构体填充造成的字节数的问题
有如下的结构体的定义:struct aa{ char a; int b; float c; double d; char* pa; int* pb; short e;};问题, 求对struct进行sizeof的时候, 得到的大小数。问题解析: 当内存中的值合理对其的时候, 很多机器能够高效的访问。 例如, 按字节寻址的32位机器中原创 2015-03-22 17:05:29 · 3766 阅读 · 0 评论 -
二叉搜索
knuth 在TAOCP有过这么一句话: 虽然第一篇二分搜索在1946年就发表了, 但是第一个没有错误的二分搜索程序直到1962年才出现。 所以可以说是是最简单的难题了。问题: 给定排好序的N个distinct elements 的array, 使用最少的比较次数确定某一个值是否存在。分析: 线性查找的时间复杂度是O(n), 但是考虑到数组是sorted, 所以我们一定要利用好这个信息。原创 2015-04-12 11:02:40 · 598 阅读 · 0 评论 -
python: 设计模式(design pattern)之修饰器模式(decorator)
#decotor design patternimport sysYELLOW = '\033[93m'RED = '\033[91m'NORMAL = '\033[0m'class Person(object): def __init__(self, name, age): # constructor self.name = name se原创 2015-04-12 20:22:07 · 1941 阅读 · 0 评论 -
DNA逆序对的问题: DNA sorting
DNA SortingOne measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this原创 2015-03-23 13:54:34 · 1951 阅读 · 0 评论 -
Bias 和 Variance的理解
bias-variance tradeoffs是有监督学习面临的一个重要的问题。我们希望达到的最佳的状态就是low variance, low bias。 一旦出现过拟合现象, 就容易造成low bias, high variance的线性, 欠拟合是high bias, low variance。对于线性模型中, 我们假设样本取自的分布为:好了, 我们根据这就可以求出最佳的hypos原创 2015-04-01 19:39:05 · 2753 阅读 · 0 评论 -
互斥锁和条件变量
#include #include // for sleep() function#include #include //#include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // pthread_cond_t cond = PTHREAD_COND_INITIALIZER;void *thread1(void原创 2015-04-02 12:37:14 · 699 阅读 · 0 评论 -
Length of the longest substring without repeating characters
即找到具有不重复字符的最长子字符串原创 2015-03-25 14:02:29 · 724 阅读 · 0 评论 -
C++易忽略点
真的不想这样, 这样的题有啥意思, 谁会用到吗, 就当增加人知吧对一个数组取&的时候, 出现了如下的问题:#include int main(){ const int MAXN = 8; int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128}; int *p = (int*)(&a + 1 ); printf("%d\n", *(p -原创 2015-04-01 21:26:46 · 549 阅读 · 0 评论 -
套接字与网络通信
进程之间有很多的通信方法。 例如管道(包括有名管道和无名管道), 用于异步通信的信号机制, System V进程间通信(包扩信号量, 消息队列, 共享内存)。 这些通信机制只是适用于单个机器内部的进程之间进行通信。 这里我们说的是跨主机的进程之间的通信机制, 即基于BSD的socket(套接字)通信(即常说的网路通信), 它不仅支持本地无关联的两个进程之间的通信, 还支持跨网络的, 不同主机原创 2015-04-03 14:40:09 · 3104 阅读 · 0 评论 -
配置vim
无意中看到如下一篇博客, 根据内容, 修改了一下,去掉了自动补全的功能。 配置完后, 不影响原来的快捷键的使用, 只是界面更好了, 多了一个全选复制的快捷键, 鼠标可以选中了。 博客地址如下:http://blog.csdn.net/tennysonsky/article/details/44871549用户只需修改家目录下的 .vimrc 配置文件内容,即可自定义 vim 的功能。转载 2015-04-04 20:09:46 · 545 阅读 · 0 评论