自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

in_han 的专栏

总结,学习...

  • 博客(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 6186

原创 基础问题[ 快速排序 ]、[ 归并排序 ]

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 942

原创 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 626

原创 最长公共了序列、最长公共子串

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 652

原创 后缀数组

参考:后缀数组就是将字符串所有后缀排序后的数组,设字符串为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

hadoop 权威指南

hadoop 权威指南 pdf

2013-07-19

算法艺术与信息学竞赛.rar

算法艺术与信息学竞赛.rar算法艺术与信息学竞赛.rar算法艺术与信息学竞赛.rar算法艺术与信息学竞赛.rar算法艺术与信息学竞赛.rar

2010-06-14

算法导论 英文版 第二版

算法导论 算法导论 算法导论 算法导论 算法导论 算法导论算法导论算法导论算法导论

2010-06-14

C++ 编程思想.rar

C++ 编程思想 java 编程思想 C++ 原理,技术,实现

2010-06-08

win32 汇编教程

WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。而今 80286 已成为了历史。所以我们将只把精力集中于 80386 及后续的X86 系列 CPU。Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址。操作系统将会在应用程序运行时完成 4GB 的虚拟地址和物理内存地址间的转换。这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。而过去的 Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。 和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的 4GB 的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器寻址任意的地址空间,这对于程序员来说是非常方便的,这也使得用32位汇编语言和用C语言一样方便。 在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。

2010-06-08

effectiveC++.chm

目录回到顶部↑致谢(Acknowledgments. 中文版略) 导读(Introduction) 001 基础议题(Basics) 009 条款1:仔细区别 pointers 和 references 009 Distinguish between pointers and references 条款2:最好使用 C++ 转型操作符 012 Prefer C++-style casts 条款3:绝对不要以polymorphically(多态)方式来处理数组 016 Never treat arrays polymorphically 条款4:非必要不提供 default constructor 019 Avoid gratuitous default constructors 操作符(Operators) 024 条款5:对定制的型别转换函数保持警觉 024 Be wary of user-defined conversion functions 条款6:区别 increment/decrement 操作符的 前置(prefix)和后置(postfix)型式 031 Distinguish between prefix and postfix forms of increment and decrement operators 条款7:千万不要重载 &&,

2010-06-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除