迭代和递归 迭代迭代是循环的一种方式,它是重复的活动,其目的通常是为了逼近结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。递归就是在运行的时候调用自己,递归可以理解为回归本心,最后调用自己。这里有一道题,就是关于递归的,前三个结果都是一样的,只有最后一个是少了一步def fact(n): if n == 1: return 1 return n*fact(n-1)def inner_fact(n, m):...
factorial函数 factorial() 是数学模块的库方法,用于查找给定数字的阶乘,它接受正整数并返回数字的阶乘。import mathr=math.factorial(5)1.factorial()不可以被定义为负数2.factorial() 可以定义为0或者正整数3.factorial() 不可以被定义为浮点数...
贪心法求解硬币问题和乘船问题 贪心算法基本要素:贪心选择性质:问题的最优解可以通过贪心选择实现(也就是先实现局部最优解,然后整体最优解可以通过一系列局部最优的选择来达到) 最优子结构性质:问题的最优解包含子问题的最优解贪心算法步骤:通过数学模型来描述问题 把求解问题分成多个子问题 对每一个子问题进行求解,找到局部最优解 把子问题的局部最优解合成原来解问题的一个解贪心算法和动态规划区别 贪心法 贪心算法是自顶向下的,只查看了当前状态 贪心算法,仅在当前状态下做出最好选择,即.
任务分配(回溯法)以及与分支限界法区别 一、问题描述:设有 n 件工作分配给 n 个人。将工作 i 分配给 j 个人所需的费用为。试设计一个算法,为每个人都分配 1 件不同的工作,并使得总费用最小。下面这个表格就是代表成本:人员 任务1 任务2 任务3 任务4 1 9 2 7 8 2 6 4 3 7 3 5 8 1 8 4 7 6 9 4 未优化之前情况①:cost大于mincos...
任务分配(分支限界法) 问题描述假设有n个任务需要分配给n个人执行,每个人只执行一个任务,每个任务只由一个人执行。第i个人执行第j个任务的成本是Cij(1<=i,j<=n), 求解初最小成本的分配方案。下面这个表格就是代表成本人员 任务1 任务2 任务3 任务4 1 9 2 7 8 2 6 4 3 7 3 5 8 1 8 4 7 6 9 4 优先队列的分支限界法:就是对小
四皇后问题(多种方法) 问题描述:以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都不能出现皇后的棋子。回溯法:dfs+迭代1.如何判断当前位置的取值满足条件:假设一个变量,每次设值都与前面已经设置好了的皇后的位置进行比较,是否同行同列,同斜线可以使用表达式:a[i]=a[j]=i-j || a[i]-a[j]=j-i2.什么情况下成功找到四皇后的摆放位置:当i&
回溯法求最大团问题 问题描述:给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u, v)∈E,则称U是G的完全子图(完全图G就是指图G的每个顶点之间都有连边)。G的完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。//最大团问题 回溯法求解#include <iostream>using namespac
蛮力法求解好多鱼问题 问题求解思路:首先这道题给的示例是尺寸为1,它一共有3种可能性能够实现这个要求,要不就是尺寸为1,要不就是11和12。那麽这道题我刚开始一直报错因为我一直忽略掉尺寸是否为0这个点,也就是我把两条鱼进行比较结果忽略掉了它们相除为0,后来改掉了。关于这个题,我主要是让这两条🐟的相除值是否==1和是否大于10来计算。#include<iostream>using namespace std;int main(){ int minsize, maxsize,n; cin >> .
回溯法求解简单装载问题 问题描述:有一批集装箱要装上一艘载重量为W的轮船,其中编号为i(0<= i<=n-1)的集装箱的重量为wi。现要从n个集装箱中选出若干个装上轮船,使得他们的重量之和恰好为W。如果找到任何一种解,返回true,否则返回false。思路:其实这道题运用了回溯法一个非常明显的特点,就是剪枝法。也就是狭义回溯法定义“回溯法=DFS+剪枝法”;另一种广义定义就是递归喽。#include<iostream>using namespace std;int w[] = { 0,5,2,6,4