
算法
「已注销」
这个作者很懒,什么都没留下…
展开
-
并查集问题
首先了解什么是并查集?即处理不相交集合(Disjoint Set)的合并与查询问题。将编号分别为1…N的N个对象划分为不相交集合, 在每个集合中,选择其中某个元素代表所在集合。常见两种操作: 1.合并两个集合 2.查找某元素属于哪个集合所以,也称为“并查集”。朋友问题:题干:整个组织有n个人,任何两个认识的人不是朋友就是敌人,而且满足:①我朋友的朋友是我的朋友;②我敌人的敌...原创 2020-04-26 14:31:31 · 270 阅读 · 0 评论 -
多元Huffman编码问题(优先队列解法)
问题描述:在一个操场的四周摆放着n堆石子,现要将石子有次序地合并成一堆。规定每次至少选2堆至多选k堆石子合并成新的一堆,合并的费用为新的一堆石子数。计算出将n堆石子合并成一堆的最大总费用和最小总费用。算法设计:对于给定的n堆石子,计算合并成一堆的最大总费用和最小总费用。数据输入:文件的第1行有2个正整数n和k,表示有n堆石子,每次至少选2堆至多选k堆石子合并。第2行有n个数,分别表示每堆石...原创 2020-04-26 14:06:58 · 624 阅读 · 0 评论 -
背包问题(动态规划)
问题描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?例如:5个物品,背包容量:10 ;重量:2, 2, 6, 5, 4;价值:6, 3, 5, 4, 6 name weight value 0 1 ...原创 2020-04-23 23:25:37 · 1808 阅读 · 0 评论 -
最大子段和(顺序求和+比较、分治策略、动态规划)
1.顺序求和+比较转载 2020-04-08 23:21:28 · 616 阅读 · 0 评论 -
快速排序(以首元素为基准)
快速排序是对冒泡排序的一种改进方法,采用分治法它是由C.A.R. Hoare于1960年提出的基本思想(1)分解:对于输入的子数组a[p, r],以a[p]为基准分为三段a[p:q-1],a[q],a[q+1:r],而左边的都小于a[q],右边的都大于a[q](2)递归求解(3)合并,由于左右两边排序是就地进行的,不需要执行任何计算,就已经排好序了。附代码:#include<i...原创 2020-03-21 14:10:57 · 1782 阅读 · 0 评论 -
归并排序(合并排序):递归法
#include<iostream>using namespace std;void merge(int *a,int l,int m,int r){ int x=m-l+1,y=r-m; int L[x+1],R[y+1]; int i; for(i=0;i<x;i++)L[i]=a[l+i]; //将数组一存入L中 for(i=0;i<y;i++)...原创 2020-03-21 12:35:58 · 914 阅读 · 0 评论 -
排列问题(分治法)
设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中元素的全排列记为perm(X)。(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:当n=1时,perm®=®,其中r是集合R中唯一的元素;当n>1时,perm®由(r1)perm(R...原创 2020-03-17 14:59:50 · 876 阅读 · 0 评论 -
整数划分问题(分治法)
题目:将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。例如正整数6有如下11种不同的划分:6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1+1+1;1+1+1+1+1+1。分析:在本例中,如果设p(n)为...原创 2020-03-17 14:52:53 · 2777 阅读 · 0 评论