
C/C++数据结构
文章平均质量分 80
u010944926
这个作者很懒,什么都没留下…
展开
-
动态规划算法剖析
最优化原理 1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。与此同时,他提出了解决这类问题的“最优化原理”(Principle of optimality): “一个过程的最优决策具有这样转载 2014-03-08 18:28:45 · 525 阅读 · 0 评论 -
AVL树的旋转
平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n) AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。 1. LL型 平衡二叉树某一节点的左孩子的左转载 2014-02-25 16:20:17 · 484 阅读 · 0 评论 -
二叉查找树
template class BinarySearchTree{private: struct BinaryNode { Comparable element; BinaryNode *left; BinaryNode *right; BinaryNode( const Comparable &原创 2014-01-16 18:32:38 · 512 阅读 · 0 评论 -
二叉树的基本概念
1.二叉树 二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。因此二叉树具有五种基本形转载 2014-02-25 11:27:23 · 2819 阅读 · 0 评论 -
快速检测空间三角形相交算法的代码实现(Devillers & Guigue算法)
Devillers & Guigue算法( 简称Devillers 算法) 通过三角形各顶点构成的行列式正负的几何意义来判断三角形中点、线、面之间的相对位置关系,从而判断两三角形是否相交。其基本原理如下:给定空间四个点:a(ax,ay,az),b=(bx,by,bz),c=(cx,cy,cz),d=(dx,dy,dz),定义行列式如下: [ a, b, c, d] 采用右转载 2014-02-25 08:39:01 · 5633 阅读 · 1 评论 -
最长公共子序列(LCS)问题
刚才上课,最后老师布置了一个作业,做完交上就可以走了。由于上课没有认真听讲,也没有老师的课件,我擦,直接傻了。看着别人都很快的走出了教室,我那个心啊.... 题目这样:求两个字符串的最大公共子序列。 不是让写代码,利用动态规划的思想,求出最大公共子序列,并且要把那个图(下面的图1)画出来。 下课后,翻出老师的课件,仔细看了看,原来只要理解了原理,3分钟就可转载 2014-02-24 15:55:22 · 1046 阅读 · 0 评论 -
函数那些事
作者:寒小阳时间:2013年8月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/10539723。声明:版权所有,转载请注明出处,谢谢。六、函数那些事 函数是C++/C 程序的基本功能单元,当然是笔试面试重点考察内容。函数接口的两个要素是参数和返回值。C 语言中,函数的参数和返回值的传递方式转载 2014-02-24 11:33:23 · 451 阅读 · 0 评论 -
从头说catalan数及笔试面试里那些相关的问题
作者:寒小阳时间:2013年9月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/11938973。声明:版权所有,转载请注明出处,谢谢。0、前言当年博主自己参加校招笔试面试时就遇到过几次catalan数相关的题目,今年又到了互联网招聘季,翻看下近期各大公司的笔试面试题,发现它依旧是很容易被考察的点。尴尬的是转载 2014-02-24 11:29:28 · 456 阅读 · 0 评论 -
经典排序算法之——快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2014-02-24 14:12:57 · 391 阅读 · 0 评论 -
美团网2014校招笔试题及解答(长沙站+哈尔滨站)
作者:寒小阳时间:2013年9月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/11924701。声明:版权所有,转载请注明出处,谢谢。题目是网上找的,答案博主自己做的,有不当之处或者有更好的方法欢迎留言!第一题一堆硬币,一个机器人,如果是反的就翻正,如果是正的就抛掷一次,无穷多次后,求正反转载 2014-02-24 11:46:26 · 1073 阅读 · 0 评论 -
迅雷近几年笔试题及其分析
作者:寒小阳时间:2013年9月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/11533437。声明:版权所有,转载请注明出处,谢谢。前言: 今年迅雷依旧是动作很快的公司之一,才9月初就已经笔试完了,看来还是想赶在互联网公司招聘大潮前抢些人。虽然传闻迅雷工作挺累的,然后待遇一般(不确定数据可靠度转载 2014-02-24 11:43:27 · 1060 阅读 · 0 评论 -
测试题答案
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。 提示:这里“零值”可以是0 , 0.0 , FALSE 或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 请写出 B转载 2014-02-24 11:37:09 · 612 阅读 · 0 评论 -
内存管理那些事
作者:寒小阳时间:2013年8月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/10676931。声明:版权所有,转载请注明出处,谢谢。七、内存管理 在写C/C++程序的时候,最头疼的部分一定包括内存管理,一提到内存管理总是提心吊胆,但是又不可避免地常常会遇到,而这块的知识也是公司招聘的一个评价转载 2014-02-24 11:34:17 · 532 阅读 · 0 评论 -
AVL树
定义:一棵空二叉树是AVL树,如果T是非空二叉树,TL和TR分别是其左子树和右子树,则当且仅当TL和TR都为AVL树且|HL-HR|由定义知道一个AVL树的任何节点的左右子树的高度之差不超过1,这是AVL树最基本的特征。AVL树的高度:(固定节点数计算最大高度)记N_h为一棵高度为h的AVL树具有的最小节点数,则最坏情况是它的左右子树的高度不等,一个是N_(转载 2014-02-25 15:51:41 · 1036 阅读 · 0 评论 -
【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi ) 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua1/1282.html ☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您! 上一篇中,向童鞋转载 2014-03-01 17:53:18 · 495 阅读 · 0 评论 -
贪心算法
顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。问题一、活动安排问题转载 2014-03-05 11:22:31 · 589 阅读 · 0 评论 -
String Algorithm 字符串算法专题
这个专题主要要处理的字符串匹配(String Matching Problem)strstr 问题:假设有一个字符串Text T,长度:n,即T[0...n-1]现在要在T中找Pattern P,长度:m,即P[0...m-1] (n>=m)常用的算法有:1)暴力法 Brute Force Method2)Rabin-Karp String转载 2014-03-14 09:23:23 · 648 阅读 · 0 评论 -
将数字转为中文金额的大写方式(C++版)
/** * 程序目的: * 从命令行接收一个数,并将其转化为中文金额的大写方式(C++版) * 例如 123.45 --> 壹佰贰拾叁元肆角伍分 * @author LovinChan * * 前一段时间做了个 Java 版的。突然有天心血来潮做个 C++ 版本的,实现的功能 * 跟 Java 版本的没什么区别,不过由于我对 C++ 的了解还不是很转载 2014-03-08 15:57:38 · 10643 阅读 · 0 评论 -
什么是 “动态规划” , 用两个经典问题举例。
原文地址:http://blog.youkuaiyun.com/fox64194167/article/details/210018551.什么是动态规划?看了很多题解,一般解决者开始就说用DP来解,然后写了嵌套的for循环,不是很容易看懂,但是确实解出来了,我们这次来看下到底什么是动态规划?它有什么特点呢?容我抄一段话:动态规划(Dynamic programming,D转载 2014-03-12 10:47:38 · 500 阅读 · 0 评论 -
一步一步写算法(之寻路)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 寻路是游戏设计中需要使用到一种功能,那么我们怎么样以一个点作为起始点,快速地寻找到目标点呢?其实寻路的方法不难。一种简单有效的方法就是回溯法。如果我们从一个点出发,那么这个点周围肯定有若干条路,只要有一条路存在,我们就一直走下去,直到发现没有路走为止;要是发现路走不下转载 2014-03-06 14:00:49 · 532 阅读 · 0 评论 -
01背包问题(动态规划法)
0/1背包问题 1. 问题描述 给定一个载重量为m,n个物品,其重量为wi,价值为vi,1,要求:把物品装入背包,并使包内物品价值最大 2. 问题分析 在0/1转载 2014-03-12 14:25:35 · 1284 阅读 · 0 评论 -
归并排序和快速排序(含完整源码)
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/20306991 前言 之所以把归并排序和快速排序放在一起探讨,很明显两者有一些相似之处:这两种排序算法都采用了分治的思想。下面来逐个分析其实现思想。归并排序 实现思想 归并的含义很明显就是将两个或者两个以上的转载 2014-03-06 10:21:25 · 613 阅读 · 0 评论 -
背包问题——“完全背包”详解及实现(包含背包具体物品的求解)
完全背包是在N种物品中选取若干件(同一种物品可多次选取)放在空间为V的背包里,每种物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解怎么装物品可使背包里物品总价值最大。动态规划(DP): 1) 子问题定义:F[i][j]表示前i种物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大价值。 2) 根据第i种物品放多转载 2014-03-12 17:38:11 · 1716 阅读 · 0 评论 -
priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解#include转载 2014-03-06 17:14:55 · 562 阅读 · 0 评论 -
A*算法求解迷宫
[cpp] view plaincopy#include #include #include using namespace std; //方向向量 int direc[4][2]={{0,1},{-1,0},{0,-1},{1,0}}; //封闭,开放列表标记 enum Flag { SEAL, OPEN, UNVISITE转载 2014-03-06 16:27:43 · 5571 阅读 · 0 评论 -
数字序列加入+,*运算符后取得最大值问题; 动态规划;打破传统从决策入手思想;找出问题的特有性质;从例子入手找特点
假设有一个数组A,里面的元素都大于1的正整数,只采用加号或乘号,不改变数组元素的位置,如何使最后结果最大?比如:A={2,1,1,1,1,2}那么就用加号结果为8,B={3,1,3}那么就用乘号结果为9。 一开始我想从决策入手,即对每个位置逐次加上+或者*,然后利用回溯方面的思想或者动态规划来做,可是发现一旦遇到*,或者连续*,问题显得很复杂,无法实施。 这个题转载 2014-03-06 21:56:12 · 1098 阅读 · 0 评论 -
一步一步写算法(之 A*算法)
在前面的博客当中,其实我们已经讨论过寻路的算法。不过,当时的示例图中,可选的路径是唯一的。我们挑选一个算法,就是说要把这个唯一的路径选出来,怎么选呢?当时我们就是采用穷尽递归的算法。然而,今天的情形有点不太一样了。在什么地方呢?那就是今天的路径有n条,这条路径都可以达到目的地,然而我们在挑选的过程中有一个要求,那就是挑选的路径距离最短?有没有什么办法呢? 那么,这时候就要A*算法就可转载 2014-03-06 14:27:58 · 537 阅读 · 0 评论 -
十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的了解可以参考以下资料(本人参考):1、《data structure and algorithm analysis in c 》2、《大话数据结构》3、http://blog.youkuaiyun.com/morewindows/article/details/79转载 2014-03-06 20:20:31 · 526 阅读 · 0 评论 -
C,C++基础和编程风格(2)
作者:寒小阳时间:2013年8月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/10515417。声明:版权所有,转载请注明出处,谢谢。四、表达式和基本语句4.1 运算符与复合表达式 首先非常重要的一个点是C/C++运算符的优先级问题,下图为总结的一张表,结合律特殊的运算符已经用黑体加转载 2014-02-24 11:32:47 · 598 阅读 · 0 评论 -
C,C++基础和编程风格(1)
作者:寒小阳时间:2013年8月。出处:http://blog.youkuaiyun.com/han_xiaoyang/article/details/10473845。声明:版权所有,转载请注明出处,谢谢。前言 眼看着又要到一年一度的找工作季了,遥想去年这会儿,学校同学们也都是一副要上战场似得枕戈待旦整装待发的情景。想来自己当时笔试面试也确实参加了不少,无奈技术和智转载 2014-02-24 11:32:00 · 576 阅读 · 0 评论 -
数据结构面试题(含答案)
1.栈和队列的共同特点是(只允许在端点处插入和删除元素)4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素C.插入删除不需要移动元素 D.所需空间与线性表转载 2014-01-15 13:36:36 · 11099 阅读 · 0 评论 -
Vector简单实现
#include #include const int SPARE_CAPACITY = 20;template class Vector{private: int theSize; int theCapacity; Object *objects;public: explicit Vector( int initSize = 0 ):theSize转载 2014-01-14 17:22:46 · 547 阅读 · 0 评论 -
链表
1.构造链表2.逆序打印链表 实现方法: a.用stack实现 b.用递归实现 测试用例: 没有节点,只有一个节点,有多个节点3.在O(1)时间删除节点 实现方法: 复制被删除节点的下一个节点,然后删除next节点 测试用例: null,单个节点,多个节点转载 2014-01-15 11:41:55 · 490 阅读 · 0 评论 -
List简单实现
#include using namespace std;template class List{private: struct Node { Object data; Node *prev; Node *next; Node( const Object & d = Object(),Node *p = NU原创 2014-01-15 10:17:46 · 544 阅读 · 0 评论 -
字符串模式匹配KMP算法
字符串模式匹配指的是,找出特定的模式串在一个较长的字符串中出现的位置。朴素的模式匹配算法很直观的可以写出下面的代码,来找出模式串在一个长字符串中出现的位置。 1: /* 2: 朴素的模式匹配算法 3: 功能:字符串的模式匹配 4: 参数: 5: s:目标串 6:转载 2014-01-15 09:26:57 · 456 阅读 · 0 评论 -
简单Demo
void diamond(int r){ int x,y; for ( y = 0; y<=2*r; y++) { for (x = 0; x<=2*r; x++) { if (y =x-r && y >=-x+r && y<=-x+3*r) { printf("*"); }原创 2014-01-15 08:53:23 · 478 阅读 · 0 评论 -
白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总转载 2014-01-22 14:28:02 · 515 阅读 · 0 评论 -
小算法
int gcd( int m, int n ){ while ( n != 0) { int tmp = m % n; m = n; n = tmp; } return m;}double probRelprime( int n ){ int rel = 0, tot = 0; for (原创 2014-01-14 15:44:31 · 491 阅读 · 0 评论 -
二分搜索
//二分搜索#include #include using namespace std;//第一种算法template int binarySearch1( const vector & a,const Comparable & x ){ int low = 0, hight = static_cast(a.size( ) -1); while ( low <=hi原创 2014-01-14 15:13:06 · 483 阅读 · 0 评论 -
最大子序列的两种算法
//第一种算法int maxSubSum1( const vector & a ){ int maxSum = 0; for (int i = 0; i < a.size(); i++ ) { int thisSum = 0; for ( int j = 0; j < a.size(); j++ ) { thisSum +原创 2014-01-14 14:14:28 · 487 阅读 · 0 评论