算法
Cassie~
hello world!
展开
-
错排问题
n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。如,1 2的错排是唯一的,即2 1。1 2 3的错排有31 2,2 3 1。这二者可以看作是1 2错排,3分别与1、2换位而得的。错排公式编辑递推关系为求其递推关系,分两步走:第一步,考虑第n个元素,把它放在某一个位置,比如位置k,一共有n-1种放法;第二步,考虑第k个元素...原创 2020-03-20 11:29:21 · 632 阅读 · 0 评论 -
冒泡排序、插入排序、希尔排序、选择排序、堆排序
插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。void InsertSort(vector<int>&v){ for (int i = 1; i < v.size(); i++) { int k = v[i]; ...原创 2020-03-09 10:17:44 · 354 阅读 · 0 评论 -
动态规划应用举例_背包问题
背包问题(Knapsack Problem)一个旅行者随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为wi , vi .如果背包的最大重量限制是b, 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大? 不妨设上述wi , vi , b 都是正整数. 实例:n= 4,b =10 v1= 1, v2= 3, v3=5, v4= 9,w1= 2,...原创 2020-03-03 17:43:05 · 1213 阅读 · 0 评论 -
动态规划算法
动态规划的定义动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程最优化的数学方法。动态规划问题的特点求解过程是多阶段决策过程,每步处理一个子问题。每步求解的问题是后面阶段求解问题的子问题。每步决策将依赖于以前步骤的决策结果。问题要满足优化原则或最优子结构性质,即:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。...原创 2020-03-03 17:32:09 · 419 阅读 · 0 评论 -
分治算法应用举例_选择问题、选最大与最小、选第 k 小
选择问题输入:集合L (含n个不等的实数)输出:L中第i 小元素i=n,称为最大元素i=1, 称为最小元素位置处在中间的元素,称为中位元素n为奇数,中位数唯一,i= (n+1)/2n为偶数,可指定i= n/2+1选最大算法:顺序比较最坏情况下的时间n-1最大最小同时选选最大最小通常算法:1. 顺序比较,先选最大max2. 顺序比较,在剩余数组中选最小min,类似于选最大算法...原创 2020-03-02 14:38:08 · 3001 阅读 · 0 评论 -
分治算法
分治算法的基本思想将原始问题划分为规模较小的子问题。递归或迭代求解每个子问题的解。将子问题的解综合得到原问题的解。分治算法的步骤分解将要解决的问题划分成若干规模较小的同类问题。求解当子问题划分得足够小时,用较简单的方法解决。合并按原问题的要求,将子问题的解逐层合并构成原问题的解。分治算法的特点原问题可以划分为规模较小的子问题。子问题与原问题具有相同的性质。子问...原创 2020-03-01 16:29:09 · 3609 阅读 · 0 评论 -
分治算法应用举例_二分检索、快速排序、归并排序
二分检索利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是经常采用的一种有效的方法,例如二分法检索。基本思想通过x 与中位数的比较,将原问题归结为规模减半的子问题,如果x 小于中位数,则子问题由小于x 的数构成,否则子问题由大于x 的数构成.假设表中元素是按升序排列,将表中间位置记录的关键字与检索关键字比较,如果两者相等...原创 2020-03-01 16:44:31 · 1372 阅读 · 0 评论 -
C++实现复化辛普森公式求积分算法
#include<iostream>using namespace std;double fun(double x) { return 4 / (1 + x * x);}double Simpson(double a, double b, int n) { double h = (b - a) / n; double s1 = fun(a + ...原创 2019-09-21 20:53:36 · 9523 阅读 · 4 评论 -
C++实现复化梯形公式求积分算法
#include <iostream>#include <cmath>using namespace std;double X[1000];//保存生成的节点横坐标double Y[1000];//保存生成的节点纵坐标//定义一个数学函数double fun(double x){ return 4 / (1 + x * x);}//分割区间...原创 2019-09-21 20:48:55 · 6827 阅读 · 2 评论 -
C语言_函数递归举例
1.递归和非递归分别实现求第n个斐波那契数。//求第 n 个斐波那契数#include <stdio.h>#include <stdlib.h>int Fib1(int n){ if (n == 1 || n == 2) { return 1; } return Fib1(n - 1) + Fib1(n - 2);}int Fib2(int...原创 2018-11-05 15:25:45 · 9110 阅读 · 0 评论 -
算法_动态规划(Dynamic Programming)
动态规划 (dynamic programming)定义动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。分治算法的基本思想是将一个规模为 N 的问题分解为 K 个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法。动态规划是分治思想的延伸,通俗一点来...原创 2019-08-08 17:58:24 · 249 阅读 · 0 评论