- 博客(37)
- 资源 (4)
- 收藏
- 关注
原创 斐波那契搜索(c++)
1. 斐波那契搜索简介: 斐波那契搜索就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[k],将原查找表扩展为长度为F[n](如果要补充元素,则补充重复最后一个元素,直到满足F[k]个元素),完成后进行斐波那契分割,即F[k]个元素分割为前半部分F[k-1]个元素,后半部分F[k-2]个元素,找出要查找的元素在那一部分并递归,直到找到。...
2018-12-10 16:55:27
1267
转载 关键路径的实现(AOE)(c++实现)
https://blog.csdn.net/xufeiayang/article/details/78568338
2018-12-05 21:31:36
1044
1
原创 弗洛伊德算法的实现(c++)
视频教程传送门:https://www.bilibili.com/video/av33533137/?p=23弗洛伊德算法也是一种寻找最短路径的算法,算法核心思路如下:路径矩阵通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。 [3] 从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(...
2018-12-05 20:54:58
2006
1
原创 迪杰斯特拉算法的实现(c++)
迪杰斯特拉算法是一种用于求解最短路径的算法,关键在于每一次循环均能确定下一个永久标号点,从而方便求解最短路径。教程传送门:https://www.bilibili.com/video/av33533137/?p=23按路径长度递增次序产生算法:把顶点集合V分成两组:(1)S:已求出的顶点的集合(初始时只含有源点V0)(2)V-S=T:尚未确定的顶点集合将T中顶点按递增的次序...
2018-12-05 20:51:24
1500
原创 克鲁斯卡尔算法的实现(寻找最小生成树)
视频讲解传送门:https://www.bilibili.com/video/av33533137/?p=23克鲁斯卡尔算法和prim算法均为解决最小生成树问题的算法,算法简介如下:先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵树合成一棵树,反之,...
2018-12-05 20:47:39
294
原创 prim算法的实现(c++)
视频讲解传送门:https://www.bilibili.com/video/av33533137/?p=24算法简介:1).输入:一个加权连通图,其中顶点集合为V,边集合为E;2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;3).重复下列操作,直到Vnew = V:a.在集合E中选取权值最小的边<u, v>,其中...
2018-12-05 20:44:05
530
原创 图的深度优先遍历和广度优先遍历(c++实现)
二者的时间复杂度和空间复杂度均相同,不同的是,广度优先遍历更像是树的层次遍历,而深度优先遍历更像是树的前序遍历。下面是实现的代码:// BFS.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>#include<vector>#include<queu...
2018-12-05 20:28:47
8717
1
原创 并查集(c++)
并查集简介:在一些应用问题中,需要将n个不同的元素划分为一组不相交的集合,在划分过程中需要反复查询某个元素归属于哪个集合。并查集就是一种适合于描述这类问题的抽象数据类型。并查集主要支持的操作: 1. merge(Root1, Root2) //并操作; 2. get (x) //搜索操作; 3. UFS (s) //构造函数。一般情形,并查集主要涉及两种数据类型:集合名类型和...
2018-12-05 17:07:32
1270
转载 二叉树的三种遍历的实现(c++)
void PreOrder(BiTree T)//先序递归遍历{ if(T!=NULL) { cout<<T->data<<" "; PreOrder(T->lchild); PreOrder(T->rchild); }}void SqlPreOrder(BiTree T)//...
2018-11-07 17:43:28
715
原创 单链表的应用
// 单链表的应用.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>using namespace std;class ListNode {public: int data; ListNode* next; ListNode() { data = 0; n...
2018-11-03 17:58:42
174
原创 最长公共子序列的长度(递归解法)(c++实现)
问题:求两个给定的字符串的最长公共子序列的长度。思路:可以从两个字符串的末尾开始寻找,如果两个对应的字符相等,分别对两个字符串的倒数一位进行同样的操作。如果不相等,一个字符串退一位,另一个字符串不变,求这两种情况的·最大值。递归的边界是是否到达了字符串的开头,如果是的话,再次比较是否相等,相等的话返回1,不相等的话返回0。代码实现:#include"pch.h"#include...
2018-10-31 17:01:16
2170
4
原创 最长公共子序列(c++实现)
问题:给定两个长度分别为m,n的字符串,求他们的最长公共子序列,要求时间复杂度为O(m+n)。解决思路:声明两个二维数组,cArray[i][j]代表在此位置时两个字符串已经存在了多少公共字符,sArray[i][j]用于回溯找到最长公共子序列。代码实现:#include"pch.h"#include<iostream>#include<string>...
2018-10-31 16:42:27
9578
原创 kmp算法的c++实现
推荐先在B站搜索KMP看一个印度小哥讲解的视频:首先简介kmp算法: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模...
2018-10-31 09:25:01
4663
原创 栈的排序(c++)
题目要求如下:试设计算法,将栈S中的元素排序。要求不用辅助数据结构,仅通过对S自身的操作完成S中元素的排序。实现思路如下:借鉴冒泡排序的思路利用递归实现栈的排序,空间复杂度为O(1)代码如下:#include"pch.h"#include<iostream>#include<stack>#include<cstdlib>#inclu...
2018-10-21 22:25:15
1798
原创 逆转栈(c++)
题目要求如下:现有栈S,试设计算法,将S中的元素逆置。要求不用辅助数据结构,仅通过对S自身的操作完成S中元素的逆置。代码如下:#include"pch.h"#include<iostream>#include<stack>#include<cstdlib>#include<ctime>using namespace std;...
2018-10-21 22:01:40
1149
原创 判断序列是否是弹出序列(c++实现)
题目要求如下:若入栈元素属于任意符号集合S,入栈序列是S中集合元素的一个排列C。试设计算法,判定S的另一个不同于C的排列,是否可能是一个对应于S的出栈序列。实现思路:构造一个辅助栈,在一系列操作结束后,如果该辅助栈非空,则不是有效序列。代码:#include"pch.h"#include<iostream>#include<stack>#incl...
2018-10-21 15:47:56
234
原创 快速排序(c++实现)
partaion函数用于找到分节点,然后利用分治的想法将数组排序。#include"pch.h"#include<iostream>#include<cstdlib>#include<ctime>using namespace std;int partaion(int a[], int start, int end){ int label ...
2018-10-21 15:06:33
1191
原创 两数相加(c++实现)
这道题原来是leetcode上的两数相加,数据结构老师把他换了一下,换成空间复杂度为O(1),时间复杂度为O(m+n).题目要求如下:用单链表表示整数,例如:整数12345可表示为:1→2→3→4→5。试设计算法,通过对单链表的操作,实现两个整数的加法运算运算结果依然用单链表表示。要求算法的时间、空间复杂度分别为O(m+n)和O(1),其中m、n为表示两个整数的单链表的长度。代码实现:...
2018-10-21 11:55:19
5296
原创 重排链表(c++实现)
这道题同时也是leetcode上的重排链表题题目要求如下:给定一个单链表L: A0→A1→…→An-1→An, 将它重排为: A0→An→A1→An-1→A2→An-2→…。要求原地(in-place)操作且不改变结点中的内容。例如:给定1→2→3→4,重排为1→4→2→3。代码实现思路:利用快慢指针求解,可以设定两个指针,一个快指针,一个慢指针,快指针一次走两个节点,慢指针一次走...
2018-10-21 10:49:39
1940
原创 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
题目要求如下:在长度为n的一维数组A中,数组元素为互不相同的整型数。若存在这样的数x,它大于它左侧所有数,小于右侧所有数,则称x为A中的一个中间数。例如:若数组A={3, 1, 6, 4, 5, 7, 9, 8, 10, 14, 12},则A中有中间数7和10。试设计一个线性时间复杂度的算法,找出给定数组A中的所有中间数。实现思路:先倒序遍历数组, 获得每一个元素右边的最小值...
2018-10-20 15:47:29
2056
原创 求一个数组中出现次数超过n/3的数(c++实现)
题目要求如下:令A是一个长度为n的正整数序列。试设计一个时间和空间复杂度分别为O(n)和O(1) 的算法,判断A中是否存在这样的元素x,x在序列中出现次数超过n/3。若存在这样的x,则将其输出。实现思路:BM(Boyer-Moore Majority Vote Algorithm)投票法:设置一个计数器,在遍历数组的时候,如果是这个数,则计数器加1,否则减1,该方法用来计数超过一...
2018-10-20 14:50:10
1395
原创 广度优先搜索实现走迷宫问题(c++实现)
广度优先搜索可以找到最短的走出迷宫的路径,看能不能走出迷宫很简单,由于广度优先搜索总是找到离某点最近的下一个点,找到的路径一定是最短路径,详见算法笔记上关于广度优先搜索的介绍,问题是如何输出走出迷宫的路径,我们可以申请一个和迷宫一样大的储存点信息的path二维数组,path中的任意元素为到达他之前的点的信息,然后输出path即可。代码如下:#include"pch.h"#include...
2018-10-20 10:54:18
2405
原创 黑白格问题(c++实现)
这是数据结构老师布置的实验A,题目描述如下: 在一个矩形网格中,每一个格子的颜色或者为白色或者为黑色。任意或上、或下、或左、或右相邻同为黑色的格子组成一个家族。家族中所有格子的数量反映家族的大小。要求找出最大家族的家族大小(组成最大家族的格子的数量)。例如下图中最大家族的格子数量为 8。 要求: 1、网格用二维数组表示。 2、数组中的元素的值随机产生,分别用0和1表示白...
2018-10-17 21:20:22
2779
原创 深度优先搜索实现走迷宫问题(c++实现)
这是数据结构老师的一道例题,具体的话:先生成一个15*15的矩阵,起点在矩阵的左上角,终点在矩阵的右下角,问是否能走出迷宫,如果可以的话,输出迷宫路径。代码实现:#include"pch.h"#include<iostream>#include<ctime>#include<cstdlib>#include<stack>#incl...
2018-10-17 18:36:21
3112
原创 十以内带括号的加减法(c++)
这是数据结构老师在课上讲的例题,具体教程可以看我上传的ppt,问题要求如下: 输入一串字符串,为十以内带括号的加减乘除,输出后缀表达式和结果。解决思路: 先将字符串转化为后缀表达式,然后利用后缀表达式得出结果。中缀表达式转化为后缀表达式当中缀表达式中有括号时,后缀表达式计算结果:代码实现:#include "pch.h"#include <...
2018-10-16 19:10:41
2465
原创 下一个最大元素I
题目描述:给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [...
2018-10-14 21:48:45
223
原创 用栈实现队列
题目要求:使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。思路解释:想要用栈实现队列的push操作,可以声明两个栈,栈a为主要栈,储存和输入顺序相反的元素集,栈b为辅助栈,协助栈a将其元素的顺序逆转。具体操作:当需要push一个元...
2018-10-14 21:32:48
117
原创 用队列实现栈
题目要求:使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语言也许不支持队列。...
2018-10-14 21:23:19
229
原创 求子序列的最大和
这是数据结构老师布置的第七道题,题目要求如下:具体实现思路:声明一个sum变量代表当前已经得到的和,声明一个max代表当前最大的和,每次先让sum累加,然后比较sum是否小于零,如果小于零,则直接将sum归零,进行下一次累加。然后比较sum和max大小,如果sum比max大,更新max的值。最后便得出max的值。代码如下:#include"pch.h"#include<...
2018-10-13 09:37:44
472
原创 最大的差值
这是数据结构老师布置的第6道题,题目要求如下:显然这是一个O(n^n)的算法,下面是我自己实现的O(n)的算法,和leetcode上卖股票的题相类似。代码实现:#include"pch.h"#include<iostream>#include<vector>#include<cmath>#include<math.h>#i...
2018-10-12 20:59:54
228
原创 求集合的子集
这是数据结构老师布置的第五道题目(我要吐血了。。。)题目要求如下:实现思路:和之前拿到求组合的题目想法差不多,都要用递归来解决。递归的话,思路是这样的:当我遇到一个元素时,我可以考虑把它加入子集,也可以考虑不把它加入子集,到达递归边界时,输出子集的内容。代码:#include"pch.h"#include<iostream>#include<stri...
2018-10-12 20:23:13
110
原创 走台阶
这是数据结构老师布置的第四道题:题目要求如下:很典型的动态规划问题,可以用递归求解,代码如下:#include"pch.h"#include<iostream>#include<cstdio>#include<vector>using namespace std;int climbStairs(int n){ if (n == ...
2018-10-12 17:17:34
330
原创 找出n个符号中所有m个符号的组和
这是数据结构老师布置的第三道作业题,题目具体要求如下:具体实现思路如下: 假如说我们要找出在{1,2,3,4}中所有的两个符号的组合,那么我们可以先把1选中,然后看2。这里出现了分支,如果我们将2也选中,那么就结束;如果说我们不选中2,而是在剩下的2个元素中选出最后一个元素...如此看来,这是一个可以用递归解决的问题,递归的思路如下: 当我们碰到了某个数,我们可以选中它,然后在...
2018-10-12 16:17:08
174
原创 n位二进制数加一的时间复杂度
这是数据结构老师布置的第二道作业题,题目要求如下:下列算法完成对一个n位二进制数加1的操作(假如无溢出)。显然,该算法在最坏情况下的时间复杂度为O(n),试问平均情况下的时间复杂度是什么?请用数学推导或实验验证的方式证明你的结论。void Inc(int A[]) { int i; i=n-1; while (A[i]==1) { A[i]=0; i--; } ...
2018-10-12 10:07:47
1253
原创 汉诺塔问题和其时间复杂度
数据结构课老师留的第一道作业题首先来看一下什么是汉诺塔问题汉诺塔问题:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。(摘自百度百科)所以我们假设...
2018-10-12 09:35:13
12989
1
原创 东南大学课表查询系统
社团作业,每人做了一个东南大学课表查询系统,不得不感叹,python确实厉害(那我还学MFC干什么。。)!这是搜索的主窗体,用来获取用户输入的信息(search.py)。import tkinter as tkimport tkinter.messageboxfrom course import *from tkinter import ttkfrom table import ...
2018-08-30 20:22:57
4901
2
原创 Requests+正则表达式爬取猫眼电影前一百榜单
这是学python爬虫后做的第一个项目,万万没想到榜单第一名竟然是...import requestsfrom requests.exceptions import RequestExceptionimport reimport jsondef get_one_page(url): headers = { 'User-Agent': 'Mozilla...
2018-08-18 19:41:09
312
东南大学计算机学院软件工程张敏灵授课PPT
2020-01-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人