摘要:
一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,ED... 阅读全文
随笔档案-2012年08月
C中sizeof用法
2012-08-30 11:24 by coodoing, 18356 阅读, 收藏, 编辑
摘要:
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形... 阅读全文
笔试题搜集
2012-08-29 20:11 by coodoing, 713 阅读, 收藏, 编辑
摘要:
前面有几篇博客中关于google,微软,百度等公司的面试题:十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题)、微软、谷歌、百度等公司经典面试题[第101-160题]及微软等数据结构+算法面试100题全部答案集锦,但都主要涉及数据结构和算法方面的知识。由于IT方面的公司笔试题并不全是数据结构和算法,还有数据库,操作系统,计算机网络,C/C++以及编译原理等其他方面的基础知识,所以这篇博文主要对去年各大公司的笔试题做一个搜集链接,方便阅读和知识分享,也方便以后的查阅。1、2011百度校园招聘笔试题 C++类-附原创答案2、迅雷2012校园招聘笔试题3、腾讯2011.10.15校园. 阅读全文
C中几组指针
2012-08-28 11:33 by coodoing, 417 阅读, 收藏, 编辑
摘要:
具体关于c指针说明可参考前面两篇文章。C中指针详解和C中复杂类型声明。 1、二维数组 下面就三种二维数组进行说明。 1: int **Ptr; 2: int *Ptr[ 5 ]; 3: int ( *Ptr )[ 5 ]; 以上三例都是整数的二维数组,都可以用形如 Ptr[ 1 ][ 1 ] 的方式访问其内容;但它们的差别却是很大的。下面我从四个方面对它们进行讨论: ... 阅读全文
C中复杂类型声明
2012-08-28 11:16 by coodoing, 452 阅读, 收藏, 编辑
摘要:
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不是好的编程风格;... 阅读全文
C中指针详解
2012-08-28 10:51 by coodoing, 446 阅读, 收藏, 编辑
摘要:
指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: 1: int *ptr; 2: char *ptr; 3: int ... 阅读全文
【转】C++继承中的重载,覆盖和隐藏
2012-08-23 21:59 by coodoing, 549 阅读, 收藏, 编辑
摘要:
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖/重写(override),隐藏(hide)。在早期的C++书籍中,常常把重载(overload)和覆盖(override)搞错!我们先来看一些代码及其编译结果。实例一:基类函数没有virtual,派生类中函数同名,参数随便 #include "stdafx.h" #include <iostream.h> class CB { public: void f(int) { cout << "CB::f(int)" << endl; } };... 阅读全文
HTTPS工作原理和TCP握手机制
2012-08-20 17:35 by coodoing, 42372 阅读, 收藏, 编辑
摘要:
1、HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下: 1.浏览器将自己支持的一套加密规则发送给网站。 2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。 3.浏览器获得网站证书之后浏览器要做以下工作: a)... 阅读全文
数据库中的几组概念
2012-08-19 16:33 by coodoing, 695 阅读, 收藏, 编辑
摘要:
1、mysql中内存表和临时表 在介绍内存表和临时表之前,必须明确的一点就是: mysql中临时表的表建在内存里,数据在内存里 ;内存表的表建在磁盘里,数据在内存里 。两种表结构的创建方式1.临时表:表建在内存里,数据在内存里; 2.内存表:表建在磁盘里,数据在内存里。临时表 mysql> create temporary table tmp1(id int not null); Query OK, 0 rows affected (0.00 sec) mysql> show create table tmp1; +-------+-----------... 阅读全文
存储过程与函数的区别
2012-08-19 11:23 by coodoing, 4211 阅读, 收藏, 编辑
摘要:
这两天一直在研究一个问题,所以对sql中dynamic sql 做了部分了解,不过最终都归结到存储过程和函数的区别这个问题上。 本质上没区别。只是函数只能返回一个变量的限制;而存储过程可以返回多个。函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少。 1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 2. 当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一.. 阅读全文
Java 回收机制
2012-08-18 23:58 by coodoing, 885 阅读, 收藏, 编辑
摘要:
===============================================================对象清除时的困境:由谁负责清除?每个对象都要求资源才能“生存”,其中最令人注目的资源是内存。如果不再需要使用一个对象,就必须将其清除,以便释放这些资源,以便其他对象使用。如果要解决的是非常简单的问题,如何清除对象这个问题并不显得很突出:我们创建对象,在需要的时候调用它,然后将其清除或者“破坏”。但在另一方面,我们平时遇到的问题往往要比这复杂得多。举个例子来说,假设我们要设计一套系统,用它管理一个机场的空中交通(同样的模型也可能适于管理一个仓库的货柜、或者一套影带出租系统 阅读全文
数据库一、二、三及BCNF范式
2012-08-18 08:50 by coodoing, 933 阅读, 收藏, 编辑
摘要:
举例说明数据库一、二、三及BCNF范式 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据库。实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应... 阅读全文
python排序
2012-08-18 08:13 by coodoing, 2726 阅读, 收藏, 编辑
摘要:
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。1)排序基础简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序。>>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5]你也可以使用list.sort()方法来排序,此时list本身将被修改。通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效。>>> a = [5, 2, 阅读全文
砝码称重问题
2012-08-17 17:18 by coodoing, 4320 阅读, 收藏, 编辑
摘要:
1、问题描述 问题1、如果天平两端都允许放砝码,并且假定所有的砝码都是整数克。为了称出从 1 克到 40 克所有整数克的物品,最少需要几个砝码? 问题2:4个砝码,每个重量都是整数克,总重量为40克,放在天平上可以称出1~40克的物体。编程求出这4个砝码各多少克。 2、 问题分析 2.1、问题1分析(砝码称重问题,因式分解有妙用) 秘密在于 3 的幂 说起来这个问题历史还算是挺悠... 阅读全文
字符串操作之循环移位
2012-08-17 16:31 by coodoing, 899 阅读, 收藏, 编辑
摘要:
该篇文章最主要是回顾c语言中字符数组,字符串和指针的处理以及数组越界问题的考虑。 问题描述 编写一个函数,把一个char'组成的字符串循环右移n位。比如原来是"abcdefghi",如果n=2,移位后应该是"hiabcdefgh"。 问题分析 这个问题很简单,主要是看对c中标准库函数的掌握程度,这里主要可以采用两个库函数实现:strcpy和memcpy。这里主要对 memcpy() --... 阅读全文
经典面试智力题和解答
2012-08-16 17:21 by coodoing, 7382 阅读, 收藏, 编辑
摘要:
一、微软58题A.逻辑推理 1、你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你 的工人付费? 2、请把一盒蛋糕切成8份,分给8个人,但蛋糕盒里还必须留有一份。 3、小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每 次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会 熄灭。问:小明一家如何过桥? 4、一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少 有一顶。每... 阅读全文
【转】基于.NET的大型Web站点StackOverflow架构分析
2012-08-15 23:09 by coodoing, 398 阅读, 收藏, 编辑
摘要:
原文链接:Stack Overflow Architecture Update - Now At 95 Million Page Views A MonthStack Overflow网址:http://stackoverflow.com/当前访问量:每月9500PV(每天300多万PV)当前Alexa排名:149所用.NET技术:C#、Visual Studio 2010 Team Suite、ASP.NET 4、ASP.NET MVC 3、Razor、LINQ to SQL+raw SQL下面是英文原文:A lot has happened since my first article o 阅读全文
链表,栈,队列插入删除操作
2012-08-15 17:46 by coodoing, 5085 阅读, 收藏, 编辑
摘要:
本文主要对常见的几种数据结构的插入删除操作进行整理和说明,具体的可视化程序可参考这里。1、链表 1.1 单向链表插入结点:在指针p所指的结点后插入指针s所指的结点。(1)s->next = p->next;(2)p->next = s删除节点:删除指针p所指的结点的后继节点。p->next = p->next->next具体问题可以参考《编程之美》中的从无头单链表中删除节点问题。 1.2 双链式链表插入结点:指针p所指的结点前插入指针s所指的结点。(1) s->prior = p->prior;(2) p-> prior ->next 阅读全文
栈的push、pop序列-实现
2012-08-14 21:21 by coodoing, 3437 阅读, 收藏, 编辑
摘要:
1、问题描述 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。2、分析 这道题的一个很直观的想法就是建立一个辅助栈,每次pus 阅读全文
多个集合合并成没有交集的集合-实现
2012-08-14 17:50 by coodoing, 5234 阅读, 收藏, 编辑
摘要:
1、问题描述 将多个集合合并成没有交集的集合。 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。 (1)请描述你解决这个问题的思路; (2)... 阅读全文
单链表是否有环和两个链表是否有公共节点问题
2012-08-14 16:40 by coodoing, 795 阅读, 收藏, 编辑
摘要:
1、单链表是否有环题目描述:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题: 1、如何判断一个链表是不是这类链表? 2、如果链表为存在环,如何找到环的入口点?一、判断链表是否存在环 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)。 1: boolean isExsitLoop() { 2: Node<T> slow ... 阅读全文
一致性hash算法-consistent hashing
2012-08-14 11:15 by coodoing, 541 阅读, 收藏, 编辑
摘要:
0、应用场景 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法。 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。 常用的算法是对hash结果取余数 (hash() modN):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i,然后将请求.. 阅读全文
Mathematica's Google Aptitude
2012-08-14 00:16 by coodoing, 367 阅读, 收藏, 编辑
摘要:
The Billboard So perhaps it's no great surprise that Google utilizes unusually mathematically oriented recruitment techniques. In fact, these practices have received widespread coverage in the last f... 阅读全文
高并发系统数据库设计
2012-08-13 19:04 by coodoing, 2197 阅读, 收藏, 编辑
摘要:
在WEB网站的规模从小到大不断扩展的过程中,数据库的访问压力也不断的增加,数据库的架构也需要动态扩展,在数据库的扩展过程基本上包含如下几步,每一个扩展都可以比上一步骤的部署方式的性能得到数量级的提升。 1、WEB应用和数据库部署在同一台服务器上 一般的小规模的网站采用这种方式,用户量、数据量、并发访问量都比较小,否则单台服务器无法承受,并且在遇到性能瓶颈的时候... 阅读全文
【转】国内图片网站Yupoo的架构
2012-08-13 18:53 by coodoing, 365 阅读, 收藏, 编辑
摘要:
之前向大家介绍过全球最大在线图片服务网站Flickr网站架构,Yupoo(又拍网)作为国内最大的图片服务提供商,我们也一起来看看它的架构,同样是提供图片服务,看看他与Flickr的差别在哪里,大家看完本文可以思考一下。 一、先来看看Yupoo网站的基本信息: 带宽:4000M/S (参考) 服务器数量:60 台左右 Web服务器:Lighttpd, Apache, nginx ... 阅读全文
【转】Twitter网站架构介绍
2012-08-13 18:40 by coodoing, 418 阅读, 收藏, 编辑
摘要:
作为140个字的缔造者,twitter太简单了,又太复杂了,简单是因为仅仅用140个字居然使有几次世界性事件的传播速度超过任何媒体,复杂是因为要为2亿用户提供这看似简单的140个字的服务,这真的是因为简单,所以复杂。可是比较遗憾的是目前在中国大陆twitter是无法访问的,但作为一个爱好架构的程序猿,这道墙是必须得翻的,墙外的世界更精彩。今天就结合网络上的一些资料,来浅谈一下我对twitter网站架构的学习体会,希望给路过的朋友一点启示.......一、twitter网站基本情况概览截至2011年4月,twitter的注册用户约为1.75亿,并以每天300000的新用户注册数增长,但是其真正的 阅读全文
【转】数学之美番外篇:平凡而又神奇的贝叶斯方法
2012-08-13 18:32 by coodoing, 471 阅读, 收藏, 编辑
摘要:
概率论只不过是把常识用数学公式表达了出来。 ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时;有一次,在书店看到一本书,名叫贝叶斯方法。当时数学系的课程还没有学到概率统计。我心想,一个方法能够专门写出一本书来,肯定很牛逼。后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法。 ——题记 目录 0. 前言 1. 历史 1.... 阅读全文
【转】十月百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题)
2012-08-13 15:36 by coodoing, 1300 阅读, 收藏, 编辑
摘要:
十月百度:一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?(要么预先排序,二分查找。要么哈希。hash的话,坐标(x,y)你可以当做一个2位数,写一个哈希函数,把(x,y)直接转成“(x,y)”作为key,默认用string比较。或如Edward Lee所说,将坐标(x, y)作为 Hash 中的 key。例如(m, n),通过 (m,n) 和 (n, m) 两次查找看是否在 HashMap 中。也可以在保存时就规定 (x, y) , x < y ,在插入之前做个判断。)百度最新面试题:现在有1千万个 阅读全文
【转】微软、谷歌、百度等公司经典面试题[第101-160题]
2012-08-13 15:09 by coodoing, 590 阅读, 收藏, 编辑
摘要:
微软十五道面试题1、有一个整数数组,请求出两两之差绝对值最小的值, 记住,只要得出最小值即可,不需要求出是哪两个数。2、写一个函数,检查字符是否是整数,如果是,返回其整数值。 (或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)3、给出一个函数来输出一个字符串的所有排列。4、(a)请编写实现malloc()内存分配函数功能一样的代码。 (b)给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。5、怎样编写一个程序,把一个有序整数数组放到二叉树中?6、怎样从顶部开始逐层打印二叉树结点数据?请编程。 7、怎样把一个链表掉个顺序(也就是反序,注... 阅读全文
【转】微软等数据结构+算法面试100题全部答案集锦
2012-08-13 14:53 by coodoing, 1373 阅读, 收藏, 编辑
摘要:
1.把二元查找树转变成排序的双向链表。 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child ... 阅读全文
google几道面试题
2012-08-13 13:03 by coodoing, 359 阅读, 收藏, 编辑
摘要:
1、找规律 1 1 1 2 1 1 2 1 1 1 1 1 2 2 1下一行是什么?2、 数列中下一个应该是: 10, 9, 60, 90, 70, 66, ?A) 96 B) 1000000000000000000000000000000000 0000000000000000000000000000000000 000000000000000000000000000000000 C) Either of the above D) None of the above3、有一个特殊的链表,其中每个节点不但有指向下一个节点的指... 阅读全文
【转】高效利用GitHub
2012-08-13 10:19 by coodoing, 306 阅读, 收藏, 编辑
摘要:
转帖:http://www.yangzhiping.com/tech/github.html正是Github,让社会化编程成为现实。本文尝试谈谈GitHub的文化、技巧与影响。Q1:GitHub是什么Q2:GitHub风格Q3: 在GitHub,如何跟牛人学习Q4: 享受纯粹的写作与演讲Q5: 代码帮你找工作Q6: GitHub还在影响一些什么Q7: 除了GitHub,还可以选择什么?Q1:GitHub是什么A1:一家公司位于旧金山,由Chris Wanstrath,PJ Hyett与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有59名全职员工,主要提供基于git 阅读全文
百度面试题集锦
2012-08-12 22:08 by coodoing, 400 阅读, 收藏, 编辑
摘要:
1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。 例子: func(7) = 4,可以证明最少需要4次运算 n = 7 n-1 6 n/2 3 n-1 2 n/2 1 要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。 答: · int func(unsigned int n) · { ·... 阅读全文
最长递减子序列
2012-08-12 19:30 by coodoing, 2755 阅读, 收藏, 编辑
摘要:
问题描述求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。问题分析本问题类似编程之美中的求数组中最长递增子序列问题。可以利用动态规划方法解决。假设在目标数组array[]的前i个元素中,最长递减子序列的长度为LDS[i]。那么 LDS[i+1] = max{1,LDS[k]+1},其中array[i+1]<array[k],for any k<=i。即如果array[i+1]<array[k],那么第i+1个元素可以添加到LDS[k]长的子序列后构成一个更长的递减子序列。与此同时,array[i+1]可以由自身构造成一个 阅读全文
如何选择开源项目
2012-08-11 14:15 by coodoing, 624 阅读, 收藏, 编辑
摘要:
引用自:http://program-think.blogspot.com/2009/02/how-to-choose-opensource-project.html 近几年开源项目越发普及,很多商业软件都逐渐引入开源项目。由于我负责的产品线采用了不少开源项目(主要是C++、Java、Python),这几年就经常会碰到开源项目选型的问题(从几个具有类似功能的开源软件项目中... 阅读全文
Python性能鸡汤
2012-08-11 13:45 by coodoing, 360 阅读, 收藏, 编辑
摘要:
第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门脚本语言. "它肯定很慢!" 毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用Python服务于每小时4千万视频的请求.... 阅读全文
Options for Storing Hierarchical Data in a Relational Database
2012-08-10 22:59 by coodoing, 983 阅读, 收藏, 编辑
摘要:
Good OverviewsGenerally speaking you're making a decision between fast read times (e.g. nested set) or fast write times (adjacency list). Usually you end up with a combination of the options below that best fit your needs. The following provides some in depth reading:One more Nested Intervals vs 阅读全文
蓄水池抽样 - Reservoir Sampling
2012-08-10 17:08 by coodoing, 1057 阅读, 收藏, 编辑
摘要:
蓄水池抽样一般用于海量数据不知道总数只能遍历一次随机抽样问题。第一部分:问题描述 问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random line, whe. 阅读全文
【转】求质数算法的N种境界- 试除法和初级筛法
2012-08-10 12:49 by coodoing, 621 阅读, 收藏, 编辑
摘要:
转帖:http://program-think.blogspot.com/2011/12/prime-algorithm-1.html★引子 前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以"求质数"作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在CSDN的镜像博客。 昨天,某个CSDN网友在留言中写道:老实说,这个程序并不好写,除非你背过这段代码 如果只在纸上让别人写程序,很多人都会出错 但是如果给一台电脑,大多数人都会把这个程序调试正确 出这个题目没啥意义 只能让别人觉得你出题水平低 首先,... 阅读全文
[续]全排列的非递归实现
2012-08-10 09:04 by coodoing, 890 阅读, 收藏, 编辑
摘要:
前文提到过全排列的递归实现,这里在简单的介绍下全排列的非递归实现。 以6个数字的全排列为例说明,相当于用1,2,3,4,5,6 构造一个六位数,每一位上取一个数,这样一共有6!中方法。 很显然,这6!个数是有大小的,如果按从小到大排列,示意如下: 1 2 3 4 5 6 1 2 3 4 6 5 1 2 3 5 4 6 ………… ... 阅读全文
【转】架构系列-Microsoft Azure存储架构设计
2012-08-09 22:59 by coodoing, 466 阅读, 收藏, 编辑
摘要:
本文链接地址: http://www.nosqlnotes.net/archives/83 SQL Azure简介 SQL Azure是Azure存储平台的逻辑数据库,物理数据库仍然是SQL Server。一个物理的SQL Server被分成多个逻辑分片(partition),每一个分片成为一个SQL Azure实例,在分布式系统中也经常被称作子表(tablet)。和大多数分布式存储系统一样,... 阅读全文
【转】堆,栈区别
2012-08-09 17:12 by coodoing, 369 阅读, 收藏, 编辑
摘要:
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!第一部分:堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 : 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化... 阅读全文
尾递归
2012-08-09 16:19 by coodoing, 465 阅读, 收藏, 编辑
摘要:
在传统递归方法中,每次重复的过程调用都使得调用链条不断加长. 系统不得不使用栈进行数据保存和恢复。如果单项链表十分长,那么上面这个方法就可能会遇到栈溢出,也就是抛出StackOverflowException。这是由于每个线程在执行代码时,都会分配一定尺寸的栈空间(Windows系统中为1M),每次方法调用时都会在栈里储存一定信息(如参数、局部变量、返回地址等等),这些信息再少也会占用一定空间,成千上万个此类空间累积起来,自然就超过线程的栈空间了。而尾递归就不存在这样的问题。 尾递归相对传统递归,其是一种特例。在尾递归中,先执行某部分的计算,然后开始调用递归,所以你可以得到当前的计算结果,而. 阅读全文
【转】海量数据处理
2012-08-08 16:35 by coodoing, 816 阅读, 收藏, 编辑
摘要:
1、何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群, 阅读全文
【转】从Trie树(字典树)谈到后缀树
2012-08-08 16:33 by coodoing, 1013 阅读, 收藏, 编辑
摘要:
本文第一部分,咱们就来了解这个Trie树,然后自然而然过渡到第二部分、后缀树,接着进入第三部分、详细阐述后缀树的构造方法-Ukkonen。第一部分、Trie树1.1、什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。. 阅读全文
快速排序及优化
2012-08-06 17:27 by coodoing, 1180 阅读, 收藏, 编辑
摘要:
快速排序(Qucik Sort)可以说是应用最广泛的排序算法之一。它的基本思想是分治法:选择一个pivot(中轴点),将小于pivot放在左边,将大于 pivot放在右边,针对左右两个子序列重复此过程,直到序列为空或者只有一个元素。实现快速排序的具体过程如下(采用左端点做pivot(《算法导论》):数组划分:Partition(关键,它对数组A[p..r]进行就地重排:将小于pivot放在左边,将大于 pivot放在右边)具体算法实现:quickSort(int[] arr, int low, int high) 1: static void quickSort(int[] arr, i... 阅读全文
归并排序
2012-08-05 19:41 by coodoing, 414 阅读, 收藏, 编辑
摘要:
1、算法介绍 归并排序(Merging Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的;然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。2、算法动画演示3、算法步骤1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。2、设定两个指针,最初位置分别为两个已经排序序 阅读全文
【转】计算机科学经典论文
2012-08-04 22:19 by coodoing, 418 阅读, 收藏, 编辑
摘要:
从Jao的Programming Musing 看到的:Babar Kazar 整理了一堆经典论文。Jao强烈建议每个严肃的程序员读每篇论文,说它们都或多或少有意思。粗粗扫了一下,很多论文都没读过。挑了些俺多少知道一点的介绍。· An axiomatic basis for computer programming C. A. R. Hoare Tony Hoare名下的公理化语义(Axiomatic Semantics)。著名的Hoare Triples, P{C}Q, 就是从这里来的。论文不长,双列6页。前辈们就是这样的,6页纸就能开宗立派。不像俺,6页纸连介绍部分都写不周全。哪 阅读全文
计数排序,基数排序和桶排序
2012-08-04 20:11 by coodoing, 12748 阅读, 收藏, 编辑
摘要:
计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是O(n)。这些排序因为其待排序元素本身就含有了定位特征,因而不需要比较就可以确定其前后位置,从而可以突破比较排序算法时间复杂度O(nlgn)的理论下限。计数排序(Counting sort) 计数排序(Counting sort)是一种稳定的排序算法。计数排序是最简单的特例,由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存,适用性不高。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。. 阅读全文
位图法
2012-08-04 13:26 by coodoing, 1423 阅读, 收藏, 编辑
摘要:
判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1。如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在... 阅读全文
堆排序
2012-08-03 17:12 by coodoing, 883 阅读, 收藏, 编辑
摘要:
1、堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 (2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 大顶堆和小顶堆 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。 注意: ①堆中... 阅读全文
分支限界法-01背包问题
2012-08-02 22:47 by coodoing, 37585 阅读, 收藏, 编辑
摘要:
1、分支限界法介绍 分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法。一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件的所有解;而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 由于求解目标不同,导致分支限界法与回溯法对解空间的... 阅读全文
回溯算法-01背包问题
2012-08-02 19:10 by coodoing, 4146 阅读, 收藏, 编辑
摘要:
1、问题描述 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。 2、算法分析 0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的。0-1... 阅读全文
动态规划-01背包问题
2012-08-02 19:05 by coodoing, 1315 阅读, 收藏, 编辑
摘要:
1、问题描述 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。 2、算法分析 0-1背包问题的最优子结构,设(y1,y2,...,yn)是所给0-1背包... 阅读全文