- 博客(30)
- 资源 (7)
- 收藏
- 关注
原创 算法面试题
1. 将n分解成n个整数: 可以有0或不能有0, 使用隔板法。2. 两人能否相遇问题:甲、乙二人在1小时内在一个地方出现,甲会逗留m分钟,乙会逗留n分钟,求两人相遇的概率。 抽像为函数:y>x+m 或 x>y+n 时,甲乙不会相遇。3.
2013-09-27 23:03:05 503
原创 推荐算法
摘 碗豆荚:....我们发现一个很有意思的点是我们做这件事情的过程和Hulu做推荐系统的演变过程基本上是一样的。我们在最开始的时候,可能是一种基于item的协同过滤算法。随着我们对应用领域的了解,我们发现其实可以把一些应用的特征加进去,就加入了一些基于内容的推荐。这样的话,第二个版本就是一些基于item的协同过滤加上一个基于内容的推荐。做完这部分之后,我们发现这两种策略还是有一些bad cas
2013-09-25 09:24:55 625
原创 P2P穿透UDP/TCP原理
转自: 前言 NAT技术的出现从某种意义上解决了IPv4的32位地址不足的问题,它同时也对外隐藏了其内部网 络的结构。NAT设备(NAT,一般也被称为中间件)把内部网络跟外部网络隔离开来,并且可以让内部的主机可以使用一个独立的IP地址,并且可以为每个连 接动态地翻译这些地址。此外,当内部主机跟外部主机通信时,NAT设备必须为它分配一个唯一的端口号并连接到同样的地址和端口(
2013-09-23 16:13:20 770
原创 洗牌程序
一、基本思路及证明:基本思路是:先初始化数字序列,然后为每个位置依次生成一个与之交换的随机位置,如果生成的随机位置不是它本身就执行交换操作。最早提出这个洗牌方法的是 Ronald A. Fisher 和 Frank Yates,即 Fisher–Yates Shuffle,其基本思想就是从原始数组中随机取一个之前没取过的数字到新的数组中,具体如下:1. 初始化数组,按序(升序或
2013-09-22 16:46:26 707
原创 大话系列
1. PHP性能问题关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安全,非常适合WEB开发,但性能低下。从原理分析PHP的性能,主要从以下几个方面:内存管理、变量、函数、运行机制、网络模型来进行分析。内存管理:使用类似于Nginx的内存池。 变量、函数:使用hashtable进行查找。运行机制:先编译成中间码再执行,类似于java。网络模型:使用libeve
2013-09-21 18:59:42 694
转载 主题模型、搜索
摘要:两篇文档是否相关往往不只决定于字面上的词语重复,还取决于文字背后的语义关联。对语义关联的挖掘,可以让我们的搜索更加智能化。本文着重介绍了一个语义挖掘的利器:主题模型。主题模型是对文字隐含主题进行建模的方法。它克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量互联网数据中自动寻找出文字间的语义主题。近些年来各大互联网公司都开始了这方面的探索和尝试。就让我们看一下究竟吧。关键词
2013-09-21 18:33:51 683
原创 求平行坐标轴的2矩形相交面积
求相交面积公式如下:矩形A : { TL, RB }a, typedef struct{x, y}TL, RB;矩形B: {TL, RB}bwidth = min(a.RB.x, b.RB.x) - max( a.TL.x, b.TL.x );if width 同理求出相交的高度。width = 右下 x 坐标最小值 - 左上x坐标的最大值
2013-09-19 02:21:52 1233
原创 数据库相关
1. 各种连接: 自身连接:select * from tb1 as a, tb1 as b where a.col_1 == b.col_2; 内连接:inner join , 如 select * from tb1, tb2 where tb1.col_a == tb2.col_b; 这里省略了inner join ... on .... 左
2013-09-18 23:01:12 538
原创 面试问题(非编程)汇总
1. 堆栈底层操作系统实现 SS: 栈段寄存器,32位下是一个selector。 EBP:存储栈的底部。 ESP:指向栈的顶部。 当函数调用时:一般是#进入函数,现在esp指向栈顶,其值即 [CS 和 EIP ]push ebp #在栈中存储ebp的值, SS[esp] 现在存储了mov ebp,esp
2013-09-18 18:35:04 1238 1
原创 设计一种数据结构,使得取中位数的时间复杂度在 O(1)
设计一种数据结构,使得取中位数的时间复杂度在 O(1), 元素插入时间复杂度为log(n):1. 可以建造一棵二叉排序树, 保证 node_num( root->left )-node_num( root->right ) == 0 或 -1. 重点是保证二叉树的平衡 及 深度为log(n)。 此方法待验证.2. 可以考虑使用最大堆、最小堆: 中位数mid单独存
2013-09-18 16:26:07 3167
原创 两个数组元素(相加、相乘)相关的问题
1.两个数组两个元素之和的最小K个值: 要求复杂度低于O(n^2).已知A B两个数组,元素有序,构造新的集合S={x+y | x属于A, y属于B}求S中最小的k个元素,最优解法。2.两个数组(正数)两个元素之积的最小K个值: 已知A B两个数组,元素有序,构造新的集合S={x*y | x属于A, y属于B} 求S中最小的k个元素,最优解法。
2013-09-18 16:09:00 6187
原创 基础问题[ 快速排序 ]、[ 归并排序 ]
1. 快速排序:快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。代码如下:
2013-09-18 00:15:39 598
原创 求最小绝对值子串、一个整数数组求两两之差绝对值最小值
1. 求最小绝对值子串1) 暴力求解O(n^2)2) ...2.求整数数组两两之差绝对值最小值(不要求求出具体哪两个整数)1) 暴力求解 或 对相邻元素作差从而转化为 问题1: b1= a2-a1, b2=a3-a2, b3=a4-a3 ===>b2+b3 = a4-a2, ... 2) 先排序,再求相邻元素的差。
2013-09-17 23:32:46 943
原创 sizeof [字节对齐]
怎么判断内存对齐规则,sizeof的结果怎么来的,要牢记以下3条原则:(在没有#pragma pack宏的情况下,看最后一行)1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为
2013-09-17 00:41:28 618
原创 基数排序、桶排序、计数排序
1. 桶排序 桶排序是另外一种以O(n)或者接近O(n)的复杂度排序的算法. 它假设输入的待排序元素是等可能的落在等间隔的值区间内.一个长度为N的数组使用桶排序, 需要长度为N的辅助数组. 等间隔的区间称为桶, 每个桶内落在该区间的元素. 桶排序是基数排序的一种归纳结果。 算法的主要思想: 待排序数组A[1...n]内的元素是随机分布在[0,1)区间内的的
2013-09-17 00:09:56 627
原创 最长公共了序列、最长公共子串
1. 最长公共了序列( LCS )问题 用 lcs( i, j ) 表示 X[ 1...i ] 与 Y[ 1...j ] 的最长公共子序列长度。 则: lcs( i, j ) = 1) i == 0 or j == 0 : lcs(i, j) = 0. 2) 若 X[ i ] == Y[ j ] : lcs( i, j ) = lcs(
2013-09-16 23:41:38 645
原创 由前序、中序遍历,求二叉树的结构
代码如下:#include "stdafx.h"#include using namespace std;string pre = "alicloud";string in = "illcaudo";typedef struct Node{ char ch; Node * left, *right;}*TreeNode;int rebuild( Tre
2013-09-14 15:22:41 564
原创 C、C++、Java回顾
一. C:1. 函数调用调用约定:1) __stdcall: 1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)返回值在EAX中, 函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。如 int __stdcall func( int a, int b ) , 被声明成: _func@8 。进行调用 func(a, ++b)时,相当于 ++b, func((a
2013-09-13 23:34:23 598
原创 线段树的应用
定义线段树在区间[i, j] 上如下: 第一个节点维护着区间 [i, j] 的信息。 if i应用范围:对一个区间整体进行操作,如寻找最大(小)值,整体加线段树有如下应用:1. Range Minimum Query( RMQ )问题: 参见:http://blog.csdn.net/in_han/article/details/11493
2013-09-10 22:55:33 792
原创 Range Minimum Query( RMQ )
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j方法一:蛮力搜索,时间时间复杂度 O( n )。方法二:O(N^2), O(1)利用动态规划进行预处理,计算出M:M[ i ][ j-1 ] 为 i 到 j-1 最小值索引,则M[i][j] = A[j] 方法三:O(NlogN), O(
2013-09-10 00:50:38 653
原创 后缀数组
参考:后缀数组就是将字符串所有后缀排序后的数组,设字符串为S,令后缀Suffix(i)表示S[i..len(S)]。用两个数组记录所有后缀的排序结果:Rank[i]记录Suffix(i)排序后的序号,即Suffix[i]在所有后缀中是第Rank[i]小的后缀SA[i]记录第i位后缀的首字母位置,即Suffix[SA[i]]在所有后缀中是第i小的后缀然后就是怎么快
2013-09-09 20:16:29 529
原创 常见面试题合集
1. N对括号的所有合法排列题目:给定N对括号,输出其所有的合法的组合状态,例如,N=3,所有的合法状态为:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”解法1, DFS: 在每个indx位置,分别进行扩展( 放入左括号 、 放入右括号),并且依据扩展的条件决定是否扩展。Python代码:#!/usr/bin/python#
2013-09-09 00:32:56 456
原创 Python实现 [堆] [堆排序]
用python的堆及堆排序:堆调整的两个方面(以最小堆说明):1. 删除堆顶元素:(自顶向下) 删除堆顶元素时,把最后一个节点 last_indx 移到堆顶, 将此节点称作cur。 当此cur元素的两个子节点元素中最小者大于其,则将其子节点最小者k与cur交换,并将k作为新的cur。再将cur与其两个子节点进行比较。直到cur两个子节点都比cur小 或者 cur 为
2013-09-08 02:12:42 813
原创 分枝界限法
回溯法:求出解空间中满足约束条件的所有解。分支界限法:找出满足约束条件的一个解。搜索方式:回溯法使用深度优先的方式,而分支界限法使用广度优先或最小耗费的方式搜索解空间。1. 单源最短路径问题:问题描述:在有向图中,求出源顶点 s 到 目的顶点的最短路径。解决办法:使用优先队列式的分支界定法。算法描述: 1. 使用最小堆MinHeap来存储活结点列表
2013-09-07 16:46:05 1847
原创 python 树形结构
1. 使用dictionary 实现二叉排序树python 代码:#!/usr/bin/python# -*- coding: utf-8 -*-# python 二叉树def create_btree( e ): root = {"v":e[0], "left":None, "right":None} for i in e[1:-1]: inser
2013-09-07 10:15:30 2844
原创 KMP
串的模式匹配算法:Index( S, T, pos ) 1. 常规算法:顺序比较,遇到不匹配的情况则回退。python 代码:(注意回退时回退步长)#!/usr/bin/python# -*- coding: utf-8 -*-# 算法:KMP# 传统算法, 返回template在 source中第pos个字符之后的位置def Index( source, t
2013-09-06 22:01:02 570
原创 [最长递增子序列]
问题定义:最长递增子序列又叫做最长上升子序列;子序列,正如LCS一样,元素不一定要求连续。本节讨论实现三种常见方法,主要是练手。题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最长递增子序列长度为4,可以是1,2,4,6,也可以是-1,2,4,6。 方法一:DP像LCS一样,从后向前分析,很容易想到,包括第i个元素以及其
2013-09-06 00:26:58 1444
原创 整数找零[求所有方案 及 最高效方案]
问题1: 将20元钱,换成1, 2, 5, 10元面额的人民币,共有多少种方案?问题2: 将20元钱,换成1, 2, 5, 10元面额的人民币,求最少使用多少张? 问题1: 解决方法: 递归遍历所有方案 或 参考整数划分。 令方案数为q(n): q(n) = q(n-1) +
2013-09-05 17:48:35 1443
原创 [背包问题] 01背包、完全背包、整数找零
01背包问题: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。完全背包: 完全背包定义是有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是c,价值是w。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。
2013-09-05 16:00:22 742
原创 [正整数划分]将正整数n表示一系列正整数之和
用python 实现之: #!/usr/bin/python# -*- coding: utf-8 -*-## 算法:求正整数n的所有可能和式组合, 并输出组合:## 思路:按照算法设计与分析上的:## q(n, m)= ## 1. m=1, n=1: 只有一种情况## 2. n## 3. n>m>1: q(n, m-1) + q(n-m, m)
2013-09-05 11:18:34 3133
win32 汇编教程
2010-06-08
effectiveC++.chm
2010-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人