
数据结构和算法
陌意随影
软件工程技术男
展开
-
回溯法求解最小机器重量设计问题
题目:设某一机器由n个部件组成,部件编号为1n,每一种部件都可以从m个不同的供应商处购得,供应商编号为1m。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。对于给定的机器部件重量和机器部件价格,计算总价格不超过d的最小重量机器设计。(注意:输出结果中第一行最后没有空格。比如下面的输出样例中1 3 1后面没有空格。)输入格式:第1行输入3个正整数n,m和d。接下来n行输入wij(每行m个整数),最后n行输入cij(每行m个整数),这里1≤n、m≤100。输出格式:输出的第1行包括n个整数原创 2020-05-19 22:27:17 · 3173 阅读 · 0 评论 -
动态规划C++实现导弹拦截
动态规划C++实现导弹拦截题目内容:某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。输入格式:...原创 2020-05-07 20:53:03 · 2131 阅读 · 0 评论 -
动态规划法C++实现最大k乘积问题
最大K乘积问题问题描述设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。例如十进制整数 1234 划分为 3 段可有如下情形:1 × 2 × 34 = 681 × 23 × 4 = 9212 × 3 × 4 = 144编程任务对于给定的I 和k,编程计算I 的最大k 乘积。数据...原创 2020-05-07 12:25:30 · 2976 阅读 · 0 评论 -
将数组循环左移
下面请看一道算法题:设将n (n>1) 个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p (0<p<n) 个位置,即将R中的数据序列由(x0, x1,……,xn-1)变换为(xp,xp+1,……,xn-1,x0,x1,……,xp-1)。在没学算法之前,我们习惯了使用简单的求解方法:借助一个临时数组B首先将数组R前p个元素保存...原创 2020-03-12 15:17:28 · 2069 阅读 · 0 评论 -
青蛙跳台阶问题的算法以及优化问题
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法?在遇到这种题目若是没有具体的思路之前,我们可以先列出前面几项的结果sum:当 n = 1 时,青蛙仅有直接跳上一级台阶这种跳法,故 sum = 1;当 n = 2 时,青蛙可以先跳 上 1 级,然后再跳 上 1 级到达2级台阶,共有2中跳法;若青蛙直接跳 2 级台阶,那么有1种跳法,从而 su...原创 2020-03-11 23:43:06 · 930 阅读 · 0 评论 -
给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。
笔者初涉《算法设计与分析》这门专业课,在做一些算法设计题的过程中遇到一些小感悟,特此记录和大家分享。下面直接给出算法题目:给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是1;数组{1, 2, 3}中未出现的最小正整数是4。笔者在看完这道题目后,进行了如下分析:(1)题目要求算法时...原创 2020-03-04 11:44:10 · 10668 阅读 · 3 评论 -
快速排序的算法实现和图解
在我们的数据结构和算法中,快速排序是我们熟悉的经典的排序算法之一。但是可能对于初学者而言,这个算法有点让人云里雾里不知如何理解。下面笔者会详细地讲解这个排序算法,给出具体的算法,图解过程以及数据结构算法的实现。首先,我们先了解一些快速排序的基本知识:快速排序(Quicksort)是对冒泡排序的一种改进.快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序...原创 2019-11-10 03:26:17 · 1952 阅读 · 0 评论 -
基于二叉树的家谱系统
先看实验要求:项目名称:基于二叉树的家谱系统项目内容:采用一棵二叉树来表示一个家谱关系,一个家谱可表示为一颗树,首先将其转换成一颗二叉树表示,如下图为红楼梦家谱的一部分:图1.1 家谱的树形表示图1.2 家谱的二叉树表示要求完成的功能如下:(1)输入一颗二叉树的括号表示法,完成树的构建(2)使用后序遍历递归算法遍历二叉树并输出(3)使用先序遍历非递归算法遍历二叉树并输出(4)指...原创 2019-10-23 22:48:35 · 9955 阅读 · 1 评论 -
将字符串的内容转换为一棵二叉树
问题:从控制台中输入一串“A(B(C,D(,E)),F(G,H(M,N(,Q))))“,将其转化建立一棵二叉树。从这个问题我们可以知道,首先我们需要一个将这个字符串所表示的二叉树用代码的方式建立起来。我们先来看看这个字符串所表示的二叉树:下面我们开始分析这个二叉树建立的思路:(1)读取第一个字符建立第一个节点即为根节点;(2)继续读取下一个字符,如果遇到“(”,那么当前节点为父节点,并且...原创 2019-10-23 19:10:11 · 5621 阅读 · 3 评论 -
prim算法和kruskal算法详解
在我们的数据结构中,当涉及到图的寻找最小的路径时,不得不提到最经典的寻找图的最小生成树的算法:prim算法和kruskal算法详解。下面笔者将与大家共同探讨一下这两个经典的算法和他们的C++代码实现。首先我们先看引自百度百科的prim算法的定义:普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英...原创 2019-10-22 13:47:01 · 2020 阅读 · 0 评论 -
动态二维数组的实现以及元素不重复的生成
使用二级指针生成动态的二维数组,其中数组元素不重复且0<= arr2D[low][row]<len,len是二维数组的行列数之积.在做这道题之前,我们要先知道,什么叫二级指针,什么叫动态的二维数组,然后再探究怎么生成随机数且让二维数组的元素不重复。那下面让我们开始探究这些问题吧:一:什么叫二级指针?在理解二级指针之前我们先来理解什么叫一级指针,这样便于帮助我们理解...原创 2019-07-20 02:33:41 · 1709 阅读 · 1 评论 -
Java和c++中二分法查找数组元素的实现机制
Java和c++中二分法查找数组元素的实现机制在数据结构和算法中,我们会见到二分法查找数组元素这个经典的算法。事实上,二分法也称为折半查找法。该算法的主要机制是:**(1)**先将数组元素从小到大排列(或者从大到小排列,下面算法是基于小到大排序)**(2)**有一维数组arr1D[len],len为数组的长度,首先定义int low =0,int high = len;确定该数组区间的中间位...原创 2019-07-19 01:08:29 · 273 阅读 · 0 评论