数据结构
读书与远方
这个作者很懒,什么都没留下…
展开
-
关于查找子串在父串中的位置的功能的实现
//////////////////////////////////////////////////////////////////////////TITLE:查找子串在父串中的位置的功能的实现(c/c++)//AUTHOR:没有风//DATE:2007/11/16///////////////////////////////////////////////////////////原创 2013-11-17 12:57:06 · 1422 阅读 · 0 评论 -
回溯算法C++代码-----用递归函数设计八皇后问题的
解析:递归实现n皇后问题。 算法分析: 数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列。如果某列上已经有皇后,则为1,否则为0。 数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14]。如果某条主对角线上已经有皇后,则为1,否则为0。 数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14]。如果某条从对角线上已经有皇后,则为1,原创 2013-11-26 09:39:16 · 1104 阅读 · 0 评论 -
分治算法---大数据问题
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。分治法解题的一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。一言以蔽之:分治法的原创 2013-11-26 09:40:07 · 1358 阅读 · 0 评论 -
八皇后问题 回溯法 C++ 含迭代器
#ifndef POSITION#define POSITIONclass Position{ protected: int row,column; public: Position(); Position (int row, int column); int getRow()原创 2013-11-26 09:41:09 · 1768 阅读 · 1 评论 -
回溯法----- 解数独游戏(1)
数独游戏的规则:1 每个数字在每一行只能出现一次2 每个数字在每一列只能出现一次3 每个数字在每一区只能出现一次下面的input.txt是一个例子的约束条件 第一列表示每一个数所在的行 第二列表示每一个数所在的列,第三个这个位置上的值。Input.txt1 1 71 4 11 8 81 9 32 1 42 3原创 2013-11-26 09:42:52 · 834 阅读 · 0 评论 -
回溯法------ 解数独游戏(2)
void Print(){for (int i=0; i{for (int j=0; j{cout }cout }}///------------------------------void InitState(){int i, j;for (i=0; i{for原创 2013-11-26 09:43:26 · 736 阅读 · 0 评论 -
回溯算法解迷宫问题(C语言)
回溯法也称为试探法,该方法首放弃关于问题规模大小的限制,并将问题的候选解按某一顺序逐一枚举和试验.当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探.如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯.扩大当前候选解的规原创 2013-11-26 09:45:20 · 4005 阅读 · 1 评论 -
回溯算法----C语言 迷宫问题
一、实验名称:实验C:回溯算法二、实验目的:1、掌握回溯算法的概念及适应范围2、熟悉回溯算法的设计原理三、实验器材:1、计算机四、实验内容:回溯算法也叫试探法,它是一种系统地搜索问题解的方法。如下例:回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空原创 2013-11-26 09:47:10 · 3530 阅读 · 0 评论 -
C语言实例编程:回溯法计算总费用最小费用
/* 假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不 同.下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配 1个不同的任务. 程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下: c[i][j]:将任务i分配给工人j的费用; task[i]:值为0表示任务i未分配,值为j表原创 2013-11-26 09:48:42 · 1387 阅读 · 0 评论 -
八皇后问题与回溯算法
八皇后问题是在8*8的棋盘上放置8枚皇后,使得棋盘中每个纵向、横向、左上至右下斜向、右上至左下斜向均只有一枚皇后。八皇后的一个可行解如图所示:原创 2013-11-26 09:49:40 · 717 阅读 · 0 评论 -
贪心算法
前几天参加了一下ACM比赛,呵呵,权当陪太子读书了,成绩有一点点不好,不过都已经过去了。比赛可以没有,博文不能不继续,呵呵,今天我总结我最近练习的贪心算法。我写文章的顺序是先写的 动态规划 , 回溯算法 ,分支限界算法 然后再准备写写贪心算法以及基本的递归和分治算法,计算机最常用的算法就这么几种了,如果真正对算法感兴趣的话可以多研究研究算法导论,其实写算法给人的成就感比做项目要大,我们现在的项目原创 2013-11-26 09:52:04 · 581 阅读 · 0 评论 -
PHP实现常见排序算法
每年总是要隔三差五的看数据结构,每次总是觉得自己很多东西没有学好,唉。今天贴刚使用php实现4的排序算法,另外堆排序和归并排序没有写。其他数据结构知识使用php的实现参考我以前写的文章:http://blog.csdn.net/heiyeshuwu/archive/2006/06/10/787426.aspx插入排序、选择排序、,冒泡排序,时间复杂度貌似都是 O(N2),所以实际意原创 2013-12-11 10:32:33 · 555 阅读 · 0 评论 -
分支限界算法
今天,我一反常态,其他的算法系列文章都是先介绍算法的理论,然后再讲到具体的问题,后来有人给我反应,对于那些随便看看的人,看到那些我贴了别的地方的理论文字就特别的反感,然后就不想继续往下面看了,对于分支限界算法,我采用问题先行的总结方法。首先我们来关注一个问题:问题描述:布线问题:印刷电路板将布线区域划分成n×m个方格阵列,要求确定连接方格阵列中的方格a的中点到方格b的中点的最短布线方案。在原创 2013-12-11 10:31:26 · 738 阅读 · 0 评论 -
回溯法 实现 排列组合(C 语言版本)
* 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先* 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中* 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步* 的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的* 状态节点)。/** 回溯法 实现 排列组合* * 所谓回溯:就是搜索一棵状态树的过程,原创 2013-12-11 10:31:29 · 1504 阅读 · 0 评论 -
回溯法搜索排列树的问题
1、问题描述: 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设w[i][j]是从供应商j处购得的部件i的重量,c[i][j]是相应的价格,给出总价格不超过d的最小重量机器设计。 2、解题思路: 由于题目已经给出总价格的上限,因此算法通过使用回溯来选择合适的机器使得在总价格不超过d时得到的机器重量最小。首先初始化当前价格cp=0,当前重量c原创 2013-12-21 19:32:40 · 3637 阅读 · 0 评论 -
回溯算法--解火力网问题
理论辅助:回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:1、定义一个解空间,它包含问题的解。2、利用适于搜索的方法组织解空间。3、利用深度优先法搜索解空间。4、利用限界函数避免移动到不可能产生解的子空间。问题的解空间通常是在搜索问题的解的过程中动态产生的,这原创 2013-11-26 09:37:49 · 912 阅读 · 0 评论 -
迷宫求解(C语言回溯法)
#include "stdio.h"struct stack{int h;struct node *top; };typedef struct stack STK;struct node{int x;int y;struct node *next; };typedef struct node STN;void dayin(STK *p){ST原创 2013-11-26 09:33:46 · 1370 阅读 · 0 评论 -
背包问题的回溯算法
Description 我 们的教练 Mr.Fang 打算改善 912 的训练条件,经过 Mr.Fang 努力与学校沟通, 终于获准可以购置不超过 C 元(1 你能帮 Mr.Fang 算算最多可以花掉多少钱么?Input多组数据测试,第一行是一个正整数 t(1 每组数据第一行两个数 C H,后面跟 H 行,每行一个正整数 Vi(i=1...H)O原创 2013-11-26 09:30:55 · 1939 阅读 · 0 评论 -
用 C 语言编写一个网络蜘蛛来搜索网上出现的电子邮件地址
作者:zhoulifa来源:http://bbs.chinaunix.net/viewthread.php?tid=821361可能大家经常要去互联网上搜索特定的内容,比如收集大量邮件地址,如果用 google 之类的搜索引擎是没法实现这种特定功能的,所以用 C 语言来写一个吧。它的功能就是不断去取得网络上的页面,然后分析出网页上出现的邮件地址保存下来。象个蜘蛛一样,从网络上一个网页爬原创 2013-11-04 08:42:49 · 3790 阅读 · 0 评论 -
什么是中文分词
什么是中文分词? 众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一原创 2013-11-04 08:43:53 · 945 阅读 · 0 评论 -
PHP实现查找表
【基本算法】假设有一个数组,需要找出某个值在该数组中的位置。//二分查找function bin_sch($array,$low, $high, $k){if ($low <=$high){$mid = intval(($low+$high)/2);if ($array[$mid] ==$k){return $mid;原创 2013-11-04 08:41:50 · 723 阅读 · 0 评论 -
常用排序算法的时间复杂度和空间复杂度
在网上看到一个常用排序算法的时间复杂度和空间复杂度表格,自己整理了一下,如下:原创 2013-11-07 10:39:45 · 812 阅读 · 0 评论 -
排序算法的时间复杂度和空间复杂度
常用的内部排序方法有:交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、堆排序)、插入排序(直接插入排序、希尔排序)、归并排序、基数排序(一关键字、多关键字)。一、冒泡排序: 1.基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。2.排序过程:设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气原创 2013-11-07 10:40:34 · 802 阅读 · 0 评论 -
常用的排序算法的时间复杂度和空间复杂度
排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一顶O(n)原创 2013-11-07 10:38:02 · 607 阅读 · 0 评论 -
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
[cpp] view plaincopy#include #include #include #include #include #include using namespace std; typedef struct BiTNode{ char data; BiTNode *lchi原创 2013-11-07 11:12:55 · 5359 阅读 · 0 评论 -
算法系列---回溯算法
算法系列---回溯算法引言 寻找问题的解的一种可靠的方法是首先列出所有候选解,然后依次检查每一个,在检查完所有或部分候选解后,即可找到所需要的解。理论上,当候选解数量有限并且通过检查所有或部分候选解能够得到所需解时,上述方法是可行的。不过,在实际应用中,很少使用这种方法,因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘),即便采用最快的计算机也只能解决规模很小原创 2013-11-26 09:23:06 · 557 阅读 · 0 评论 -
回溯算法
http://www.cse.ohio-state.edu/~gurari/course/cis680/cis680Ch19.html#QQ1-51-128 回溯算法是找到一些计算问题的全部或者部分解的一种普适性的算法,其递增得增加候选者到解集合中,而当发现候选者c不能成功找到解决路径时就果断丢弃候选者c。 最经典的回溯算法的例子是8个皇后的问题,该问题是在原创 2013-11-26 09:24:03 · 603 阅读 · 0 评论 -
回溯算法
回溯 1 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 用回溯算法解决问题的一般步骤为: 一、定义一个解空间,它包含问题的解。 二、利用适于搜索的方法组织解空间。 三、利用深度优先法搜索解空间。 四、利用限界函数避免移动到不可能产生解的子空间。原创 2013-11-26 09:24:42 · 627 阅读 · 0 评论 -
回溯算法
回溯算法是所有搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”思想作为其控制结构,其相当于采用了先根遍历的方法来构造解答树,可用于找解或所有解以及最优解。具体的算法描述如下:[非递归算法] node(节点类型)=record situtation:tsituation(当前节点状态); way-no:integer(已使用过的扩展规则的数目);原创 2013-11-26 09:26:45 · 837 阅读 · 0 评论 -
经典问题的回溯算法
下载频道>资源分类>课程资源>专业指导>经典问题的回溯算法经典问题的回溯算法资源大小:779KB上传日期:2012-07-04资源积分:1分下载次数:12上 传 者:fengguowuhenlily资源类型:代码类标 签: 算法 回溯问题分 享 到: 收藏 评论(1) 举报 我的待评论资源资原创 2013-11-26 09:28:01 · 811 阅读 · 0 评论 -
C++实现回溯
#include int i=0;void dian(float a,float b,float c,float d,int j); /*回朔声明*/void jia(float a,float b,float c,float d,int j) /*进行加的运算*/ {if ((a*b!=0)&&(j {dian(a+b,c,d,0,j+1); if原创 2013-11-26 09:28:53 · 1491 阅读 · 0 评论 -
求 N 皇后问题回溯算法
代码片段(1)[全屏查看所有代码]1. [代码]求 N 皇后问题回溯算法 跳至 [1] [全屏预览]view sourceprint?01/*02* File: queen.c03* Description: 求原创 2013-11-26 09:29:51 · 803 阅读 · 0 评论 -
最小重量机器设计问题
一、实验目的1、了解回溯法和分支限界法的基本思想。2、运用回溯法和分支限界法解决最小重量机器设计问题。二、实验要求最小重量机器设计问题:设某一机器由n个部件组成,每一种部件可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。试设计一个算法,给出总价格不超过c的最小重量机器设计。分别用回溯法和分支限界法实现问题的算法原创 2013-12-21 19:33:52 · 10129 阅读 · 0 评论