算法与数据结构
算法与数据结构
卓耿Drogon
醉舞经阁半卷书,坐井说天阔
展开
-
常见的排序方法(Python实现)
主程序如下:from random import randintimport timeimport copyGA_MAX = 19 #待排序的数据的数量ga = [randint(0, 199) for i in range(GA_MAX)] #待排序的数据ga_copy = [] #用于检测排序结果def print_ga(): # print(ga) print(''.join(str(i) + ' ' for i in ga))def random_ga()原创 2022-01-26 17:23:40 · 815 阅读 · 0 评论 -
C++ LIST VECTOR MAP的底层实现
本文参考了网上文章,一搜一大把。LIST支持快速增删,底层使用循环双向链表实现。VECTOR支持快速随机访问,底层使用数组实现。当新增数据,超过已申请的剩余空间时,将会自动resize重新申请全部空间,将已有数据和新增数据拷贝给新申请的空间,然后释放原先申请的空间。MAPKEY值唯一,底层使用红黑树实现,也就是平衡二叉数。...原创 2020-09-04 17:16:26 · 425 阅读 · 0 评论 -
比较pow(x,y)的实现算法
概述用python,比较pow的实现算法思路主要对比递归和while循环。PowCircle2函数和PowCircle类似,PowCircle2更容易理解一些。源码from time import ctimefrom math import *def PowRecursion(x,y): if(y==0): return 1 if(y==1): return x t = PowRecursion(x, (int)(y / 2))原创 2020-09-11 17:48:52 · 325 阅读 · 0 评论 -
树(二叉查找树 类实现Binary Search Tree)
概述二叉查找树,也就笛卡尔树、T树,是一种数值按大小关系组成的二叉树。左子树的数值小于根节点,右子树的数值大于根节点,一般没有相等的数值。思路用递归实现二叉查找树的增加节点、查找节点;处理删除节点较为复杂点,可以查看源码。使用的查找方法是中序遍历。源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_CBst()。struct BNode{ quint32 value; BNode *pLeft; BNode *pRigh原创 2020-07-10 14:36:09 · 199 阅读 · 0 评论 -
有一个方格子,A点在左下角,B点在右上角,求A点到B点的最短路径数量
博主的第十篇博客,特此标记纪念。概述一个8*8的方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条。 BOOOO,OOOOOOOO,OOOOOOOO,OOOOOOOO,OOOOOOOO,OOOOOOOO,OOOOOOOO,OOOOOOOO,OOOOA思路思路一:题目有时会混淆,A和B有没有占用左下角和右上角的方格。这里我们的解题认为没有占用,所以A到B就需要走16步,8步横走,8步竖走。这在排列组合中,使用公式c(16,8)很容.原创 2020-07-06 16:54:01 · 2116 阅读 · 0 评论 -
单链表生成,单链表反转
概述生成一个单链表,并反转这个单链表。思路写好了代码,再来写思路。博主往往比较懒,建议直接看代码。这里简单写一下,主要思路就是遍历一遍。源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_SNode()。struct SNode{ quint32 node; SNode *pnext;};SNode *g_pHead = NULL;void OutputSNode(){ SNode *p1; p1原创 2020-07-06 16:33:53 · 165 阅读 · 0 评论 -
求两个集合的最大公共连续子集&求指定子集和的子集
概述1、求两个集合的最大公共连续子集2、求指定子集和的子集思路1、求两个集合的最大公共连续子集使用回溯法2、求指定子集和的子集使用动态规划法源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_MaxSubset()。#include "QTime"#include "QList"static const quint32 SET1_ACOUNT = 100;//集合1的数量static const quint32 SET1_VA原创 2020-07-06 16:21:15 · 517 阅读 · 0 评论 -
将16进制字符串,转为整数类型
概述将16进制字符串,转为整形。思路略源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_String16_UINT()。quint32 CovertQchar2Quint32(QChar inputC){ char c = inputC.toLatin1(); quint32 rt = 0; if(c >= '0' && c <= '9') { rt = (qui原创 2020-07-06 15:48:02 · 1348 阅读 · 0 评论 -
将数组右移N个位
概述实现一个数组右移:比如给定数组ABCDE,右移1位就是EABCD。思路这个算法其实比较简单,只需遍历一遍数组,将数组转移到指定位置即可。源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_Shift_Array()。const static quint32 SARR_NUM = 10;//数组大小static quint32 gSarr[SARR_NUM];//数组static quint32 SHIFT_RIGHT_NUM = 3;/原创 2020-07-06 15:00:03 · 1462 阅读 · 1 评论 -
经典背包问题---回溯和动态规划
概述背包问题简单点说:这里有很多大小不同的物品, 价值不等,然后包就这么大,装哪些物品,能达到包里物品价值最大化。思路方法一:回溯组合各种的东西的各种组合,找到价值最大物品组合。方法二:每种物品只有两个状态,装或者不装。如果装,就要继续求剩余容量下,剩余物品的最大装载价值;如果不装,就是求包容量下的剩余物品的最大装载价值。换言之,就把问题分解成了两个子问题的最优解,这样递归下去,就找到了最优物品组合。源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改类型即可。测试入口函数为 v原创 2020-07-06 11:51:06 · 369 阅读 · 0 评论 -
转换整数中的比特位(例如将001转为011)
概述随机一个整数,将其比特位001转为011。思路略源码#include <qglobal.h>#include "QtMath"#include "QTime"//将整数中的001转为011void Test_Convert_Bits(){ quint8 i=0; QString string; quint32 input; QTime time = QTime::currentTime(); qsrand(time.msec()原创 2020-07-03 17:57:19 · 901 阅读 · 0 评论 -
经典八皇后问题(Eight Queens)--递归回溯法
月下披云啸一sheng概述在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路采用递归回溯法,在判断方案不可行时,及时中止本次递归。八皇后问题实际是组合问题的应用,对于初学者可以先参考本博客的基础组合问题(从1~9选取数字)。八皇后问题,可以演变为N皇后,M方格问题,只需要修改源码中的全局变量进行配置。源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改类型即可。测试入口函数为 void Test_Eigh.原创 2020-07-03 17:21:09 · 432 阅读 · 0 评论 -
从1~9中,选取N个数,计算选取方案总数
选取N个数,组成一个N位新数字概述思路源码运行结果概述从1~9中,选取N个数组成一个N位新数字,计算N位新数字的个数。可以增加限制,例如1和9不可以同时被选中。思路穷举法源码本文主要是以C、C++、QT为基础进行编程,运行前简单修改类型即可。测试入口函数为 void Test_CatchNums()。static const int N = 5;static int g_count = 0;//用于统计结果//增加限制(可选)bool Num_IsValid(int *pa){原创 2020-07-03 16:42:18 · 659 阅读 · 1 评论