![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计
zwz2011303359
这个作者很懒,什么都没留下…
展开
-
字符串合并并处理(C++实现)
按照指定规则对输入的字符串进行处理。 详细描述: 将输入的两个字符串合并。 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。 对排序后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,原创 2017-04-09 11:39:59 · 3617 阅读 · 0 评论 -
蚁群算法基本理解
1.什么是蚁群算法: 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质,并且现在已用于我们生活的方方面面。 2.基本原理: 1)当周围没有信息转载 2017-04-23 13:30:42 · 2512 阅读 · 0 评论 -
如何求一个数的二进制表示的1的个数
最常见的方法int Fun1(int N){ int num=0; for(int i=0;i<8;i++) { if(N%2==1) num++; N=N/2; } return num;}2.改进的位运算int Fun2(int N){ int num=0; for(int i=原创 2017-05-17 00:10:46 · 399 阅读 · 0 评论 -
从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m
下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m 12345678910knuth(int n, int m){ srand((unsigned int)time(0)); for (int i = 0; i < n; i++) { if (rand()%(n-i)<m ) { cout &...原创 2018-06-30 23:45:42 · 1114 阅读 · 0 评论 -
算法导论中的堆排序详解(参考别人画的图)
我们先研究一下几种常见算法的复杂度和稳定性以及是否需要额外的空间开销堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。堆排序是利用堆的特性对记录序列进行排序的一种排序方法。即小根堆:父结点的值小于左右孩子结点的值,大顶堆则相反假设我们要排序的序列是{50,10,90,30,70,40,80,60,20}堆排序分为两...转载 2018-07-01 15:49:42 · 298 阅读 · 0 评论 -
快速排序算法
快速排序快速排序是一个最坏情况时间复杂度为Θ(n2)Θ(n2),最好情况下时间复杂度为O(nlogn)O(nlogn)的排序算法。虽然在最坏情况下的时间复杂为n2n2,但是快速排序的平均性能非常好,只有Θ(nlogn)Θ(nlogn),而且我们也可以主动避免快速排序的最差的情况,所以快速排序在排序作业中还是应用比较广泛的。快速排序的基本思想我们现在有一数组A={ai,ai+1,...,aj}A={...转载 2018-07-01 16:57:45 · 134 阅读 · 0 评论 -
线性时间排序算法
一般我们使用的堆排序,归并排序都是属于比较排序,也就是通过比较元素的大小来进行排序,可以通过决策树分析出比较排序的时间下界是O(nlgn),堆排序和归并排序都是渐进最优的比较排序算法。还有其他的排序方法不是通过比较,下面总结一下:一:计数排序大致思路是将数组中所有元素对应小于这个元素的个数存储起来,这样我们可以直接知道这个元素的位置,因为可能出现相同的元素,所以我们从后面输出(为了稳定性)而且每次...原创 2018-07-01 18:08:07 · 825 阅读 · 0 评论 -
求n个元素中第二小元素
一、题目证明:在最坏情况下,利用n+ceil(lgn)-2次比较,即可得到n个元素中的第2小元素。(提示:同时找最小元素)二、算法过程step1:对所有元素,两个一组比较大小,小的一个进入下一轮比较。一直到比较出最小的元素。此时所有比较结果构成一棵二叉树。比较次数为n-1。step2:沿着树从树根向下到叶子,找出第二小的元素,比较次数是ceil[lgn]-1。令m2[p]表示以p为根的树中的第二小...转载 2018-07-01 21:46:43 · 1009 阅读 · 0 评论 -
STL容器的使用方法(参考)
C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multise...转载 2018-07-05 11:13:51 · 633 阅读 · 0 评论 -
C++内存管理
栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区,就是那些由malloc等分配...原创 2018-08-11 23:18:42 · 185 阅读 · 0 评论 -
红黑树相对于普通平衡二叉树的优点
黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。 红黑树(red-black tree) 是一棵满足下述性质的二叉查找树: 1. 每一个结点要么是红色,要么是黑色。 2. 根结点是黑色的。 3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何转载 2017-04-30 00:36:34 · 7422 阅读 · 0 评论 -
单词字典中对兄弟单词查找算法(C++实现)
先输入字典中单词的个数,再输入n个单词作为字典单词。 输入一个单词,查找其在字典中兄弟单词的个数 再输入数字n#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;int main() { vector<string>s;//用来存储单词字典中的单原创 2017-04-05 19:18:37 · 2008 阅读 · 0 评论 -
实现非递归表达
实现f(m,n)=f(m-1,n)+f(m,n-1)的非递归#include <iostream>using namespace std;#define Recusion 0#define Unrrcusion 1#if Recusionint f(int m,int n)//递归表达{if(1==m)return n;if(1==n){return m;}return f原创 2017-04-10 10:32:04 · 232 阅读 · 0 评论 -
0-1背包问题动态规划代码实现(C++实现)
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。 Pi表示第i件物品的价原创 2017-03-31 13:35:44 · 1796 阅读 · 3 评论 -
回溯法解决迷宫搜索问题
算法思路:定义一个二维数组,其中的0代表通路,1代表墙,然后定义一个结构体表示每一个节点的属性,struct St //定义一个栈,保存路径 { int i; //当前方块的行号 int j; //当前广场的列号 int di; //di是下一可走方位的方位原创 2017-03-31 14:45:01 · 671 阅读 · 0 评论 -
实现Z字数组的输出
#include <iostream>#include <vector>#include <iomanip>using namespace std;int main() { int N; cin>>N; int A[100][100]; for(int i=0;i<N;i++) for(int j=0;j<N;j++) {原创 2017-04-10 15:55:04 · 638 阅读 · 0 评论 -
加了限制条件的0-1背包问题(C++实现)
问题描述描述 王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件 电脑 打印机,扫描仪 书柜 图书 书桌 台灯,文具 工作椅 无如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东原创 2017-04-01 11:05:17 · 1378 阅读 · 0 评论 -
坐标移动
题目描述 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。算法思路:就是把一个字符串的每次操作都放在一个vectortemp容器里面,然后通过temp[i] 的操作,再次提取其中的w、A等信息然后找距离。找出来以后进行swith操作。代码实现如下:#include <原创 2017-04-01 11:11:23 · 261 阅读 · 0 评论 -
判断输入的Ip地址和子网掩码是否正确
#include <iostream>#include <stdlib.h>#include <string>#include <vector>using namespace std;int main() { string s; int countA = 0, countB = 0, countC = 0, countD = 0, countE = 0, countF = 0,原创 2017-04-03 01:16:37 · 1669 阅读 · 0 评论 -
单词排序
#include <iostream>#include <vector>#include <string>using namespace std;int main() { string s; while(cin>>s) { int len = s.size(); vector<char> temp;原创 2017-04-03 12:05:35 · 742 阅读 · 0 评论 -
socket通信介绍
“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket翻译 2017-04-18 16:51:54 · 570 阅读 · 0 评论 -
不带输入背包数目的0-1 背包问题
#include <iostream>#include <math.h>#include <vector>#include <sstream>#include <stdio.h>using namespace std;vector<int> splitStr(string s){ int j=0; ...原创 2018-08-08 22:54:11 · 181 阅读 · 0 评论