06 2012 档案

摘要:1. 算法描述 适用于最优化问题的算法往往包含一系列步骤,每一步都有一组选择,对许多最优化问题来说,采用动态规划方法来决定最佳选择有点繁琐了,只要采用另一些更简单有效的算法就行了。贪心算法是使所做的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生衣蛾全局最优解。 贪心算法是一种很有效的方法,适用于一大类问题。之后要讨论的许多都可以用贪心算法解决,比如赫夫曼树、最小生成树、地杰斯特拉的单元最短路径等。贪心算法是通过做一系列的选择来给出某一问题的最优解,一般开发一个贪心算法时,所遵循的过程比一般情况更复杂些。有如下步骤:(1)决定问题的最优子结构(2)设计出一个递归解(3)证明在递归.. 阅读全文
posted @ 2012-06-28 17:32 lpshou 阅读(4818) 评论(0) 推荐(2)
摘要:1、问题描述 在vc6.0中调用matlab中的正态分布产生随机数。2、实现方法(1)软件安装: (a):vc++6.0安装 --》matcom安装 随便下一个vc++6.0安装就可以,,安装完毕后下载安装matcom,要求matcom安装在后,在安装过程中出现是否选择vc++的编译器时选择“是”,然后出现是否安装matlab时选择“否”,其他默认即可。。。。。(2)编写.m文件 (a)安装完matcom后,启动mathtools下的MIDEVA,见图1所示:图1 (b)选择"File"下的"New",新建一个文件,以"test3.m" 阅读全文
posted @ 2012-06-25 17:18 lpshou 阅读(1681) 评论(0) 推荐(0)
摘要:1、问题引入 和分治法一样,动态规划是通过组合子问题的解而解决整个问题的。分治法是指将问题划分成一些独立的子问题,递归求各个子问题,然后合并子问题的解而得到原问题的解。而动态规划适用于子问题不独立的情况,也就是各个子问题包含公共的“子子问题”,在这种情况下,分治法将不便于求解,而动态规划算法将对每个“子子问题”只求一次解,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。 动态规划通常应用于最优化问题,此类问题可能有多种可行解,每个解有一个值,而我们希望找出一个具有最优值的解,称这样的解为该问题的“一个”最优解(而不是“确定的”最优解),因为可能存在多个取最优值的解... 阅读全文
posted @ 2012-06-20 20:46 lpshou 阅读(4919) 评论(0) 推荐(1)
摘要:1、问题引入 查找树是一种数据结构,它支持多种动态集合操作,包括构造、查找、插入、删除、寻找最小值、寻找最大值等,其中构造过程主要采用不断插入值来完成。 二叉查找树中的关键字存储方式满足以下性质:设x为二叉查找树中的一个节点,如果y是x的左子树中的一个节点,则y->data < x->data;如果y是x的右子树中的一个节点,则y->data > x->data。 二叉查找树上执行的基本操作的时间与树的高度成正比,对于一棵含n个节点的完全二叉树,这些操作的最坏情况运行时间为o(lgn)。同样的,如果树是含有n个节点的线性链,则这些操作的最坏时间为o(n)。2 阅读全文
posted @ 2012-06-19 15:40 lpshou 阅读(2079) 评论(1) 推荐(4)
摘要:1、问题引入 散列表示普通数组概念的推广,,,,当实际存储的关键字数比可能的关键字总数较小时,采用散列表就会比直接数组寻址更为有效,因为散列表通常采用的数组尺寸与所要存储的关键字数成正比。散列表中主要着重解决“碰撞”问题,所谓“碰撞”就是多个关键字映射到同一个数组下标位置,这里讲采用除法散列法对关键字进行散列,对出现的冲突利用链接法进行解决。2、具体实现 具体参见:(采用链地址法处理冲突构造哈希表 http://www.cnblogs.com/lpshou/archive/2012/05/08/2490191.html)这篇文章。。。。 阅读全文
posted @ 2012-06-18 20:15 lpshou 阅读(377) 评论(0) 推荐(0)
摘要:1、问题引入 之前的堆排序、快速排序都是基于输入元素间的比较,这类排序叫做比较排序,对于n个元素的比较排序可以证明其在最坏情况下都要用O(nlgn)次比较来进行排序,本节中将讨论三种以线性时间运行的算法:计数排序、基数排序、桶排序,这些算法都用非比较的一些操作来确定排序顺序。2、算法讨论2.1 计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),其基本思想是:对于每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以吧x直接放到它在最终输出数组中的位置上,例如,如果有17个元素小于x,则x就属于第18个输出位置。 在计数排序中,假定输入数组是A[... 阅读全文
posted @ 2012-06-18 12:15 lpshou 阅读(1764) 评论(2) 推荐(0)
摘要:1、算法描述 快速排序也是基于分治模式的,下面是一个典型子数组A[p..r]排序的分治过程,主要分为三个步骤: (1)分解:将数组A[p..r]划分成两个子数组A[p...q-1]和A[q+1...r],使得前一个数组中每个值都小于等于A[q],后一个数组每个值都大于A[q],下标q也在这个分解过程中求得。 (2)解决:通过递归调用对两个子数组分别进行排序。 (3)合并:两个子数组是就地进行排序的,所以他们的合并并不需要操作,这个数组已经有序了。。2、具体实现: 形参和实参的区别: (1)实现一:View Code 1 #include<stdio.h> 2 int partit. 阅读全文
posted @ 2012-06-18 09:38 lpshou 阅读(345) 评论(1) 推荐(1)
摘要:1、堆排序1.1 堆排序简介 堆数据结构是一种数组对象,它可以被视为一棵完全二叉树,树中每个节点与数组A中存放该结点值的那个元素对应。树根为A[1],给定了某个结点的下标i,其父节点PARENT(i),左儿子节点LEFT(i)和右儿子结点RIGHT(i)的下标可以简单的计算出来:PARENT(i):不大于i/2的最大整数,LEFT(i):2i;RIGHT(i):2i+1; 堆排序主要分成三个重要步骤: (1)利用MAX-HEAPIFY来保持堆的性质:输入为数组A和下标i。当其被调用时,我们假定以LEFT(i)和RIGHT(i)为根的两棵二叉树都是最大堆,但这时A[i]可能小于其子女,这就... 阅读全文
posted @ 2012-06-15 15:15 lpshou 阅读(2560) 评论(0) 推荐(0)
摘要:1、memcpy、memmove、memset源码link:http://note.youdao.com/share/?id=1f826e4337c7db272e94fdb4f267a8de&type=note2、strcpy、strcat等源码link:http://note.youdao.com/share/?id=d23a598b2e31321517ed57d2599de181&type=note3、atoi和itoa源码:link:http://note.youdao.com/share/?id=96b713b249981aa0c5f9be5d0657fb90& 阅读全文
posted @ 2012-06-05 15:43 lpshou 阅读(2558) 评论(1) 推荐(1)
摘要:1、问题引入 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c”,要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间;后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程。2、自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。 具体实现如下: V 阅读全文
posted @ 2012-06-04 11:35 lpshou 阅读(14248) 评论(0) 推荐(0)