- 博客(90)
- 收藏
- 关注
原创 Mac PyCharm新建Python项目
1.打开软件PyCharm,点击"+Create New project",如下图: 2.弹出如下窗口,把“untitled”更改项目名,如“hello”,然后,点击“Create”创建项目: 3.点击项目“hello”,右键“New”->"Python File" 4.填写“Name”:hello,点击“Ok” 新建的文...
2020-04-30 12:03:54 3639
原创 Mac Python第三方库安装
安装方式有两种:(1)PyCharm自带的package管理工具(2)终端pip3安装;例如要安装:requests库一、使用PyCharm自带的package管理工具进行安装: Preferences->Project->Project Interpreter,点击左下角的“+” 直接搜索requests,安装 (2)终端输入:$ ...
2020-03-13 15:00:36 6921
原创 Mac 搭建python环境:Python3+PyCharm
一、安装python31.官网下载安装包:https://www.python.org/ mac默认自带python2.x版本。 (1)查看python版本号:终端输入:python (2)查看python安装路径:which python 2.安装python: 双击刚下载的安装包,按说明进行安装(默认)就行了。 安装完...
2020-03-13 14:24:45 1971 2
原创 C++ zoj1962 How Many Fibs?
一、题目大意: 有多组测试数据,每组测试数据占一行,每行给出a和b两个非负整数(a <= b <= 10^100),问a和b之间存在多少个Fibonacci数二、思路:(1)先生成498个Fibonacci数,存到二维数组fb[i]中。因为第498个Fibonacci数是104位,题目要求是100位范围内的,所以开辟的空间i(i存储第i+1个Fibonacc...
2019-08-28 13:24:43 601
原创 C++ 桶排序(BucketSort)
一、思路 是将[0,1]区间划分为n个等长的子区间。然后,将各个元素按照自己所属的区间放入相应的桶中,只需要将每个桶的元素排好序,依次输出各个桶内的元素,就得到了有序的元素序列。二、实现程序:#include <iostream>using namespace std;const int offset = 105; // 为桶的边界const int ...
2019-04-08 08:28:45 11251 4
原创 C++ 归并排序(MergeSort)
一、思路:稳定排序 (1)划分:一直调用划分过程,直到子序列为空或只有一个元素为止,共需log2(n); (2)归并:将两个子序列从小到大合并为一个序列二、实现程序:// 归并排序:(二路归并)// (1)递归分解数组;// (2)合并有序的序列#include <iostream>using namespace std;// 合并两...
2019-04-08 08:25:44 753
原创 C++ 冒泡排序(BubbleSort)
一、思路:冒泡排序算法原理:1.比较相邻的元素。如果第一个数比第二个数大,就交换他们两个。2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。(因为最后一个已经排好,是最大的数)4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。(接着排第二大的数,一直下去)...
2019-04-08 08:23:16 3399
原创 C++ 希尔排序(ShellSort)
一、思路: 希尔排序:又称缩小增量排序,是一种改进的插入排序算法,是不稳定的。 设排序元素序列有n个元素,首先取一个整数gap<n作为间隔,将全部元素分为gap个子序列,所有距离为gap的元素放在同一个子序列中,在每一个子序列中分别施行直接插入排序。然后缩小间隔gap,重复上述的子序列和排序工作。二、实现程序:#include <iostre...
2019-04-08 08:18:58 425
原创 C++ 折半插入排序(BinaryInsertSort)
一、思路: 较插入排序,减少了比较的次数,但是插入时间还是一样。 (1)按二分查找的方法,查找V[i]在V[0],V[1]…V[i-1]中插入的位置; (2)将插入位置的元素向后顺移。二、实现程序:// 二分插入:较插入排序,减少了比较的次数,但是插入时间还是一样// 时间复杂度还是:O(n*n)#include <iostream&g...
2019-04-08 08:15:53 572
原创 C++ 直接插入排序(InsertSort)
一、思路 当插入第i(i>=1)个元素时,前面的V[0], V[1], …,V[i-1]已经排好序。 用V[i]的排序码与V[i-1],V[i-2],…,的排序码顺序进行比较,找到插入位置。然后,将V[i]插入,原来位置上的元素向后顺移。二、实现程序:#include <iostream>using namespace std;const...
2019-04-08 08:13:45 4712
原创 C++ 堆排序(HeapSort)
一、思路:(1)将数组arr[0~n-1]调整形成最大堆; (2)取堆顶点(即取最大值)放到数组arr[n-1]的位置,即将arr[0]与arr[n-1]交换位置; (3)调整arr[0]到arr[n-2]重新形成最大堆; (4)同理,取堆顶arr[0](即取最大值)放到数组arr[n-2]位置,即交换arr[0]与arr[n-2]位置; (5)重复以上步...
2019-04-03 23:39:02 703
原创 C++ 选择排序(selectionSort)
一、思路 每次取剩下没排序的数中的最小数,然后,填到对应位置。(可以使用a[0]位置作为暂存单元) 如下: 二、实现程序:#include <iostream>using namespace std;const int maxSize = 100;template<class T>void Sele...
2019-04-03 23:00:00 364
原创 C++ AOE网络
一、思路(你可以用拓扑排序来做,但我这里没用拓扑排序) (1)求事件Vi的最早可能开始时间是从源点V0到顶点Vi的最长路径长度。 如V0=0, V1=6,V2=4,V3=5;V4事件要等V1和V2事件完成后才可以进行,所以要取事件用的最长的时间,即V4=6+1=7,同样道理得出其他时间。 (2)事件Vi的最迟允许开始时间Vl[i]是在保证汇点Vn...
2019-04-03 22:19:52 1178
原创 C++ 拓扑排序(AOV网络)
一、思路 先扫描所有顶点,把入度为0的顶点(如C,E)进栈。然后,取栈顶元素,退栈,输出取得的栈顶元素v(即入度为0的顶点v)。接着,把顶点v的邻接顶点w的入度减1,如果w的入度变为0,则进栈。接着,取顶点w的兄弟结点(即取顶点v的邻接顶点w的下一邻接顶点),做同样的操作。重复上面步骤,直到输出n个顶点。如上图:(1)扫描所有顶点,把入度为0的顶点进栈:将顶...
2019-04-01 21:13:45 1033
原创 C++ 所有顶点之间的最短路径(用Floyd算法)
一、思路: 不能出现负权值的边 用Floyd算法,总的执行时间为O(n的3次方) k从顶点0一直到顶点n-1, 如果,有顶点i到顶点j之间绕过k,使得两顶点间的路径更短,即dist[i][k] + dist[k][j] < dist[i][j],则修改:dist[i][j] 如:(1)当k=0时, 顶点2...
2019-03-30 16:25:10 1190
原创 C++ 求所有顶点之间的最短路径(用Dijkstra算法)
一、思路: 不能出现负权值的边 (1)轮流以每一个顶点为源点,重复执行Dijkstra算法n次,就可以求得每一对顶点之间的最短路径及最短路径长度,总的执行时间为O(n的3次方)(2)另一种方法:用Floyd算法,总的执行时间为O(n的3次方)(另一文章会写)二、实现程序: 1.Graph.h:有向图#ifndef Graph_h#define Gr...
2019-03-28 23:29:02 2318 2
原创 C++ 任意权值的单源最短路径(Bellman-Ford)
一、有Dijkstra算法求最短路径了,为什么还要用Bellman-Ford算法 Dijkstra算法不适合用于带有负权值的有向图。 如下图: 用Dijkstra算法求顶点0到各个顶点的最短路径: (1)首先,把顶点0添加到已访问顶点集合S中,选取权值最小的邻边<0, 2>,权值为5 记录顶...
2019-03-28 20:06:11 1231 1
原创 C++ 有向图最短路径之Dijkstra算法
一、思路 1.Dijkstra算法 每次都是从起始顶点v出发,找与v有关的有向边<v,u>。找到<v, u>之后,找有向边<u,k>,如果通过绕过顶点u而使从v到k的路径更短的话,就要修改v到k的路径。即v->u>k的路径比v->k的路径更短。 如上面的有向图:起始顶点为0 (1)先将顶点...
2019-03-26 22:01:42 8777 5
原创 C++ 有向图的邻接表表示
一、思路: 有向图的插入有向边、删除边、删除顶点和无向图的有区别。其他的和无向图的类似。 1.插入有向边<e1, e2> 只需要插入<e1, e2>边就行,不需要插入对称边<e2, e1> 2.删除边<e1,e2>: 只需要删除<e1, e2>边...
2019-03-26 19:56:22 4337
原创 C++ 最小生成树之Prim算法
一、思路: 和Kruscal类似,先从一个顶点u出发,找u的邻接顶点v,如果(u,v)权值最小且v顶点不在生成树顶点集合中(防止出现回路),则把边(u,v)存到最小生成树中;否则该顶点已经在生成树顶点集合中,舍弃该边,找权值次小的另一条边。然后,从顶点v出发,找下一条不会出现回路的边(v,w)。直到找到n-1条边。 1.假如从顶点A出发,找A的邻接顶点(不在生成树顶...
2019-03-25 19:43:25 3241
原创 C++ AVL树(高度平衡的二叉搜索树)
一、思路 1.创建AVL树: 每次输入一个数num,然后用Insert()函数,将num插入到AVL树中。// 创建AVL平衡树template <class T>void AVLTree<T>::CreateAVLTree() { T num; cout << "请输入数(以-1结束输入)建立平衡二叉树...
2019-03-25 13:05:18 661 3
原创 C++ 最小生成树之kruskal(克鲁斯卡尔)算法
一、思路: 总共选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。 意思就是:n个顶点,要取n-1条边,形成连通分量。每一次取权值最小的一条边,如果不形成回路就添加到最小生成树中;否则,舍弃这条边,取权值次小的边,重复前面步骤,直到取了n-1条边和所有顶结点被访问过。最小生成树:minimum-cost ...
2019-03-25 00:05:24 1559
原创 C++ 图的深度优先搜索(DFS)和广度优先搜索(BFS)
一、图的深度优先搜索和广度优先搜索 1.图的深度优先搜索: 类似树的前序遍历 2.图的广度优先搜索: 类似树的层次遍历二、实现程序:1.Graphlnk.h#ifndef Graphlnk_h#define Graphlnk_h#include <iostream>#include <queu...
2019-03-20 20:14:37 1503
原创 C++ 图的邻接表表示
一、实现程序:1.Graphlnk.h#ifndef Graphlnk_h#define Graphlnk_h#include <iostream>using namespace std;const int DefaultVertices = 30;template <class T, class E>struct Edge { // 边结点的定...
2019-03-20 18:38:04 1201 1
原创 C++ 图的邻接矩阵表示
1.遇到的问题:教材中写着子类Graphmtx(我用GrapMatrix)继承基类Graph 但是我在子类GraphMatrix中使用父类Graph的保护成员属性:maxVertices 显示没有声明(如下图)。 原来,c++中声明一个模板类及子类,在子类中如果需要访问父类的protected变量,需要使用父类的类作用域限定符,否则会报“identifier...
2019-03-20 13:19:09 2225 1
原创 C++ 最大堆
#include <iostream>#include <stack>const int DefaultSize = 100;template <class T>class MaxHeap{public: MaxHeap(int sz = DefaultSize); MaxHeap(T arr[], int n); ~Ma...
2019-03-14 12:53:17 2219 1
原创 C++ 最小堆
// 对最小堆的各种操作// 最小堆:完全二叉树,可以采用顺序存储结构#include <iostream>#include <stack>const int DefaultSize = 100;template <class T>class MinHeap{public: MinHeap(int sz = DefaultSiz...
2019-03-14 12:52:23 1702
原创 C++ 广义表转二叉树,二叉树转广义表
#include <iostream>#include <stack>struct BinTreeNode { char data; BinTreeNode *leftChild; BinTreeNode *rightChild;};// 前序遍历二叉树void PreOrder(BinTreeNode *p) { if(p ...
2019-03-14 12:50:56 1255 1
原创 C++ 二叉搜索树(Binary Search Tree)
// 二叉搜索树:// A.每个结点都有一个关键码,每个关键码互不相同;// B.左子树(若存在)上所有结点的关键码都小于根结点的关键码;// C.右子树(若存在)上所有结点的关键码都大于根结点的关键码;// D.左子树和右子树也是二叉搜索树//// 建立:采取插入建立// 遍历:采取中序遍历//// 测试数据:53 78 65 17 87 09 81 15 -...
2019-03-14 12:46:56 435
原创 C++ 并查集2(带路径压缩)
一、实现程序:#include <iostream>using namespace std;struct Node { // 并查集结点类 int data; // 保存数据 int parent; // 保存父结点};class UnionFindSets {public: UnionFindSets(int w[], int n); //...
2019-03-14 11:22:58 413
原创 C++ 并查集(Union-Find Sets)
一、实现程序:#include <iostream>using namespace std;struct Node { // 并查集结点类 int data; // 保存数据 int parent; // 保存父结点};class UnionFindSets {public: UnionFindSets(int w[], int n); //...
2019-03-14 10:15:47 495
原创 C++ 哈夫曼编码
1.哈夫曼编码的结点类:struct HuffmanNode { int weight; // 权重,出现的次数或者频率 char ch; // 存储符号 string code; // 存储该符号对应的编码 int leftChild, rightChild, parent; // 左、右孩子,父结点};2.思路:(1)统计输入的字符串中不同字...
2019-03-13 23:51:26 22769 10
原创 C++ 哈夫曼树(HuffmanTree)
如何建立哈夫曼树的,网上搜索一堆,这里就不写了,直接给代码。1.哈夫曼树结点类:HuffmanNode.h#ifndef HuffmanNode_h#define HuffmanNode_htemplate <class T>struct HuffmanNode { T weight; // 存储权值 HuffmanNode<T> *lef...
2019-03-12 19:48:57 2664
原创 C++ 线索二叉树
TreadTree.h#ifndef TreadTree_h#define TreadTree_h#include <iostream>#include <stack>using namespace std;/*ltag = 0 //lchild指向节点的左孩子ltag = 1 //lchild指向节点的前驱节点rtag = 0 //rchild指...
2019-03-12 11:48:06 655
原创 C++ 表(List容器类)
一、概念 头文件:#include <list> 又叫链表,是一种双线性链表,只能顺序访问(从前往后或从后往前) 他不支持随机访问。 二、方法 三、演示程序#include <iostream>#include <list>using namespace std;void Print(list&l...
2019-01-27 11:36:46 2007
原创 C++ 向量(vector容器类)
一、概念: 头文件:#include <vector> vector是一个动态数组,是基本数组的类模板 在尾部添加速度快,在中间插入慢。 二、方法: (这是我从一个小伙伴那里直接粘贴过来的,能看懂英文的可以直接具体看: http://www.cplusplus.com/reference/vector/vector...
2019-01-27 10:48:08 3480
原创 C++ 计算组合数(动态规划)
一、题目 二、思路: (1)如果m=n位置及n=0位置上元素为1:if(n == 0 || m == n) return 1;(2)其它情况: 按列计算,当列和行相同时填1; 当列为0时,也填1; 其它情况根据递推公式求:mat[i][j] = mat[i-1][j-1] ...
2019-01-26 21:12:42 13802 8
原创 C++ 字符串对称处理(动态规划)
一、题目: 二、思路 1.用string接收输入的字符串,并取得字符串的长度; 声明数组cost[i][j]:表示将串str从第j位开始长度为i的子串sub处理成对称的最小插入字符数2.当子串长度为0或1时,不需要做对称处理,所以此时cost的值为0:// 特殊情况:子串长度为i=0或i=1时cost取值均为0 for(j = 0...
2019-01-26 19:36:43 1998 2
原创 C++ 数字三角形(动态规划)
一、题目 有三种方法实现: 这里就求权值之和最大的,最小的类似就不分析了。 1.自底向上 缺点:算法复杂,重复计算 2.自顶向下 缺点:重复计算,浪费时间 3.动态规划 思路和自底向上、自顶向下一样,只不过开多一个数组opt存储计算过的到达a[i][j]的权值之和最大的数二、思路: 方法1:自底向上 1.从最后一行出...
2019-01-25 10:29:08 9556
原创 C++ Mason数(麦森数)
一、题目 二、思路 1.考虑需要解决的问题: (1)求出2^p-1的位数; (2)求出2^p-1的最后500位; (不用判断2的p次方减1和p是否是素数) 2.先解决第一个问题:求出2^p-1的位数 N = 10 -> 位数为2; N = 100 -> 位数...
2019-01-23 21:01:03 2297 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人