- 博客(54)
- 收藏
- 关注
原创 数据结构--字符串匹配
暴力匹配算法假设现在我们面临这样一个问题:有一个文本串 S,和一个模式串 P,现在要查找 P 在S 中的位置,怎么查找呢?如果用暴力匹配的思路,并假设现在文本串 S 匹配到 i 位置,模式串 P 匹配到 j 位置, 则有: – 如果当前字符匹配成功(即 S[i] == P[j]),则 i++,j++,继续匹配下一个字符; – 如果失配(即 S[i]! = P[j]),令 i = i - (j
2016-12-22 12:31:51 669
原创 数据结构-二路插入排序
二路插入排序是对折半插入排序的改进,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。具体做法是:另设一个和r[]同类型的数组d,首先将r[0]赋值给d[0],并将d[0]看成是在排好序的序列中处于中间位置的记录,然后从r[]中第2个记录起依次插入到d[0]之前或之后的有序序列中。先将待插记录的关键字和d[0]的关键字进行比较,若r[i] < d[0],则将r[i]插入到d[0]之
2016-12-20 23:36:05 924
原创 数据结构--双向冒泡排序
双向冒泡排序,又名鸡尾酒混合排序,是对冒泡排序的一种改进算法。 每完成一次循环就将最大元素排在队尾,最小值排到队头,时间成本能节约1倍。其算法如下:void DoubleBubbleSort(int r[],int size){ int i,low=0,high=size-1,temp; bool exchange; while(low<high) {
2016-12-20 22:41:33 2779
原创 数据结构--快速排序
快速排序是对起泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。如何判别快速排序的结束? 若待排序列中只有一个记录,显然已有序,否则进行一次划分后,再分别对分割所得的两个子序列进行快速排序(即递归处理)。int Partition(int r[],int fir
2016-12-20 10:13:47 689
原创 数据结构--冒泡排序
起泡排序的过程很简单。首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止。上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上
2016-12-19 22:20:54 672
原创 数据结构--直接插入排序
直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r[1..i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列[1..i];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r[0]处设置监视哨。在自i-1起往前搜索的过程中,可
2016-12-19 21:42:27 869
原创 数据结构--拓扑排序算法
什么是拓扑排序?简单地说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。偏序:只有部分可以比较关系 全序:全部都能比较关系AOV网:用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表示活动的网。 在AOV网中,不应该出现有向环,因为存在环意味着某项活动应以自己为先决条件。对给定的AOV网判定网中是否有环? 拓扑序列使得AOV网中所有应存在的前驱和后继关系都能得到
2016-12-18 00:25:25 1826
原创 Lesson 18: SDK文档:Tutorial 7 Texture Mapping and Constant Buffers分析
中文翻译文档地址: http://blog.sina.com.cn/s/blog_6e1283650102vfi9.html学习心得:学完本篇,D3D11 SDK文档附带的教程就全部学习完了,想要真正掌握的话,还是需要不断地对代码进行修改,有什么好的想法就在原代码基础上添加、修改,这样你也能在这个过程中弄清其作用及含义。纹理映射纹理映射是指2D纹理到3D几何模型的投影。我们可以认为它是一种包装。为
2016-12-17 10:53:22 569
原创 Lesson 17: SDK文档:Tutorial 6 Lighting分析
中文翻译文档地址: http://blog.sina.com.cn/s/blog_6e1283650102vfi8.html在这个教程中,将介绍最基础的光照类型是方向光。方向光不论对象跟光源的距离,都受到统一的关照。当光照到一个表面时,光照的发射计算这个表面和光线的夹角大小。当光线直接照射到表面时,表面会将所有的光反射回去,显示最高的强度。然而,随着表面与光线的角度增长,反射的光照强度会慢慢暗下来
2016-12-16 16:34:33 518
原创 Lesson 16: SDK文档:Tutorial 5 3D Transformation分析
中文翻译文档: http://blog.sina.com.cn/s/blog_6e1283650101cwy7.html深度缓存:没有它的话,在比较小的轨道中,第二个立方体将总是绘制在第一个立方体的上面,即使当它旋转到第一个立方体的后面的时候。深度缓冲区允许Direct3D检测画在屏幕上每个像素的深度。在Direct3D 11中的默认操作是将要画的每个像素和已经在屏幕上的对应像素的深度进行比较。如
2016-12-16 15:35:57 483
原创 Lesson 15: SDK文档:Tutorial 4 3D Spaces分析
Constant BufferConstant buffer(cb)是DX10中引入的概念,它取代了DX9时代GPU常量寄存器的概念,允许通过一块大小可变的buffer向shader提供常量数据,而不是之前数量非常受限的n个寄存器,这也是我们遇到的第一种可在shader着色阶段由HLSL访问的资源。 管线的每个可编程阶段都能同时访问一个或者几个cb,对于shader代码来说,cb中的数据都是全局常量
2016-12-15 22:04:19 421
原创 Lesson 13: SDK文档:Tutorial 1 Direct3D 11 Basics分析
头文件:#include <windows.h>#include <d3d11.h>#include <d3dx11.h>#include "resource.h"全局变量声明:// Global VariablesHINSTANCE g_hInst = NULL; //实例句柄HWND g_hWnd = NULL; //
2016-12-15 20:04:59 525
原创 数据结构--树
树型结构和图型就是其中十分重要的非线性结构,可以用来描述客观 世界中广泛存在的层次结构和网状结构的关系,如家族谱、城市交通 等。二叉树不是树的特例二叉树与无序树不同: 二叉树中,每个结点最多只能有两棵子树,并且有左右之分。二叉 树并非是树的特殊情形,它们是两种不同的数据结构。二叉树与度数为2的有序树不同: 在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该 结点只有一个孩子,
2016-12-15 17:14:49 368
原创 Lesson 14: SDK文档:Tutorial02 Rendering a Triangle分析
结构体声明:// Structuresstruct SimpleVertex{ D3DXVECTOR3 Pos;};全局变量声明:// Global VariablesHINSTANCE g_hInst = NULL; //实例句柄HWND g_hWnd = NULL; //窗口句柄D3D10_DRIVER_TY
2016-12-15 14:52:49 479
转载 Lesson 12: 索引缓存
原文地址: http://blog.csdn.net/poem_qianmo/article/details/8304741单单用顶点缓存来绘制图形的方法在应对复杂图形的时候非常不科学,显得复杂而力不从心。 也就是说,当物体模型很复杂、顶点数量很大时,仅使用顶点缓存绘制图形会使重复的顶点大大增加,并且Direct3D仍需要对这些重复的顶点进行计算,因此需要更多的存储空间和更大的开销。 这时候,
2016-12-15 13:58:43 691
翻译 Lesson 11: 绘制三角形
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5一个三角形由三个点组成,也可以叫做顶点。用一个顶点数组来定义一个三角形,为了GPU能够渲染这个三角形,我们必须告诉GPU三角形的三个顶点的坐标。顶点缓存: 在Direct3D 11中,向顶点信息(如坐标)叫保存在一个缓冲区资源内。如果一个缓冲区用来存放顶点信息,那么它就
2016-12-15 00:28:17 569
翻译 Lesson 10: 着色器
原文地址: http://blog.csdn.net/sinat_24229853/article/details/46941927Direct3D要求使用着色器来渲染几何图形,为了解着色器的由来,我们首先要了解下图形流水线的历史。图形流水线是什么? 图形流水线是GPU(图形处理器,显卡的心脏)工作的通用模型。它以某种形式表示的三维场景或物体为输入,输出二维的光栅化图像到显示器。光
2016-12-14 14:20:26 582
翻译 Lesson 9: 全屏
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-4设置屏幕大小: 1.首先,我们必须要对屏幕的宽度和高度进行宏定义:// define the screen resolution#define SCREEN_WIDTH 800#define SCREEN_HEIGHT 6002.下一步,检测整个程序使用到了屏幕大
2016-12-14 13:31:19 404
翻译 Lesson 8: 渲染框架
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-3设置渲染目标: 在Direct3D里渲染,必须要设置渲染的目标。 通常,这个目标是后台缓冲区。我们一般这样完成设置:ID3D11RenderTargetView *backbuffer; // global declaration// this function
2016-12-14 01:03:36 544
翻译 Lesson 7: 初始化Direct3D
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-2COM: COM是组件对象模型Component Object Model的简称,是一项能够使DirectX独立于编程语言并具备向下兼容的技术。 原文中用乐高积木做了个比喻,乐高积木可以通过堆积在一起形成一个复杂的形状,它们相互兼容,如果想要改变某个部分,只要去掉其中
2016-12-13 21:39:01 479
翻译 Lesson 6: 理解计算机图形学
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-1The CPU Directs the GPU 大意为:CPU驱动GPU绘制图形显示在监视器上。The CPU and GPU Have Separate Memory DirectX图形基础设施(DXGI)示意图: 简单说下,Win32应用程序可以使用Di
2016-12-13 01:32:53 479
翻译 Lesson 5: 实时消息循环
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-5In this lesson we will cover a single function, PeekMessage(), and how this function differs from its evil twin, GetMessage(). 主要讲的就是Pe
2016-12-13 00:11:46 411
翻译 Lesson 4: 窗口大小和客户区大小
当我们调用CreateWindowEx()函数时,我们使用了500*400来设置窗口的大小。然而,这和客户区的大小是不一样的。客户区为窗口的一部分,游戏软件通常都在客户区完成游戏中的各种画面、功能与效果的实现。 当使用Direct3D时,我们需要确定图片的大小。如果客户区的大小与图片的大小不一致时,它将会被拉伸或收缩以适应客户区的大小。Rendering With and Without Adju
2016-12-12 23:51:11 1061
原创 数据结构--数组
数组的定义: 数组是由一组 类型相同 的数据元素构成的有序集合,每个数据元素称为一个数组元素(简称为元素),每个元素受n(n ≥1)个线性关系的约束, 每个元素在n个线性关系中的序号i1 、i2、… 、in 称为该元素的下标,并称该数组为n维数组。有点难理解,没关系,我们看下面这个二维数组: 例如,这是个二维数组,因此元素a22受两个线性关系的约束,在行上有一个行前驱a21和一个行后继a23
2016-12-12 21:54:00 1149
翻译 Lesson 3: 创建窗口
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-3与Lesson2一样,我们使用WinMain函数开始我们的程序。另外,我们将使用另一个叫WinProc()的函数。这个函数将在程序运行的时候处理所有Windows发送给我们的事件消息。下面这个代码用来创建以及运行一个窗口:// include the basic wind
2016-12-12 19:02:35 367
翻译 Lesson 2: 基本窗口
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-2运行环境:Visual Studio 2015Win32 Console Programs vs. Windows Programs Win32控制台程序和Windows程序 两项的区别: 我们在学习C++时,用cin、cout那一套写出来的程序通常都是一个黑洞洞的
2016-12-12 16:59:02 427
翻译 Lesson 1: 游戏程序的组成
原文地址: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-1作者英语水平有限,意思是按自己理解的来,欢迎指导纠正!The Sequence of a Computer Game: Phase 1: Initialize the program 初始化程序: 创建一个窗口来显示我们的游戏,设置图形、模型和其他媒体的加载,分配内
2016-12-12 16:24:07 857
原创 条款8:了解各种不同意义的new和delete
new operator,这个操作符是由语言内建的,不能被改变意义,总是做相同的事情。它的动作分为两方面: 第一,它分配足够的内存,用来放置某类型的对象。 第二,它调用一个constructor,为刚才分配的内存中的那个对象设定初值。你能够改变的是用来容纳对象的那块内存的分配行为。 new operator调用某个函数,执行必要的内存分配动作,你可以重写或重载那个函数,改变其行为。这个函数的名
2016-12-09 20:38:27 348
原创 数据结构--邻接多重表下的无向图的生成树
这篇我们来解决下上一篇留下的两个问题:深度优先生成树和广度优先生成树如何建立?1.深度优先生成树 首先,我们需要读懂的是邻接表下的深度优先生成树,因为这种结构下的方法比较容易推敲,理解之后进而推广到邻接多重表上。我们先以《数据结构(C语言版)》–严蔚敏、吴伟民编著的教材上算法7.7为例,分析下深度优先生成树是如何建立的:void DFSTree(Graph G,int v,CSTree &T){
2016-12-09 17:05:13 1529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人