- 博客(24)
- 收藏
- 关注
原创 (二叉树下)建堆、堆实现优先队列、堆排序、用堆实现的一种比快排时间复杂度还低的算法
满二叉树:树高为h且 结点总数完全二叉树:树高为h且 结点总数
2021-01-31 23:29:58 213
原创 最短路算法:插点法 Floyd、边松弛法 Dijkstra、点松弛法 Bellman_Ford、队列加速下的点松弛法SPFA
说在开头的话:其实这些最短路径的算法,包括常见的插点,边松弛(因为说他们的名字和他们的算法思想联系不起来,所以我都这样称呼,官方称呼是floyddijstra),他们就提出的时候的思想来定义他们的优缺点,但是编程又不是单纯的实现,如果想避免它的缺陷,完全可以加入自己需要的判定方法来避免它们的缺陷。并不是说,非黑即白,硬给他们划阵营。这样来总结更客观一些,因为我发现编程的时候可以既使用这个算法,又可以避免它本身的缺陷。介绍几个概念:负权回路:在一个图里每条边都有一个值(有正有负)如果..
2021-01-31 15:50:36 2422 1
原创 最优算法的意义
很多算法,发出来的时间复杂度一般是最优程序,优化最彻底(目前为止),即时间最快,空间占用最少。它们一般是由最初的思路作为基础,经过多次优化和改进得到的最终结果。优化对于程序来说,至关重要,它代表着科技的进步。所以,最优秀的程序才是最重要的。...
2021-01-31 12:49:48 757
原创 Bellman_Ford 可以检测到负权回路,但是带有负权边的非负权回路检测不出来
负权回路:在一个图里每条边都有一个值(有正有负)如果存在一个环(从某个点出发又回到自己的路径),而权且这个环上所有权值之和是负数,那这就是一个负权环,也叫负权回路存在负权回路的图是不能求两点间最短路的,因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。Bellman_Floyd 可以检测到负权回路,但是带有负权边的非负权回路检测不出来。...
2021-01-31 00:29:03 240
原创 邻接表用数组来实现的思路
测试程序#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int u[100],v[100],w[100];int first[100],next[100];int main(){ int n,m; scanf("%d %d",&n,&m); for(int i=1; i<=m; i++) {...
2021-01-30 17:24:54 261
原创 边松弛法解决单源最短路
边松弛法空间复杂度 O(M) 时间复杂度O((M+N)logN)适用于稠密图(顶点一定的情况下,边越多越划算)存在负权边的情况下,不能算出最短路径注释:N:图中顶点个数M:图中边的个数...
2021-01-30 14:28:20 175
原创 Floyd 可以在存在负权边的图中应用,求得多源最短路径;存在负权回路的图中无法求得多源最短路
很多人认为插点法不实用负权回路,这种说法其实不正确。
2021-01-29 14:34:12 969
原创 memset详解
第一:memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。第二:memset(void *s, int ch,size_t n);中ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节,比如int a[5]赋值memset(a,-1,sizeof(int )*5)与memset(a,511,sizeof(int )*5) 所赋值的结果是一样的都为-1;因为-1的二进制码为(11111111 1
2021-01-27 22:07:08 4150
原创 再谈——函数内无处不在的“栈”(程序语句在内存中是以栈的形式存储的)
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ int n[10]={1,2,3,4,5,6,7,8,9,10}; int i=0; while(i<=9) { printf("%d %d\n",n[i++],n[i++]); }}
2021-01-27 18:39:03 115
原创 c/c++中二维数组在内存中的存储
#include<stdio.h>#include<string.h>int main(){ int num[10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { printf("%x ",&num[i][j]); } printf("\n"); } for...
2021-01-25 19:00:34 1111
原创 malloc 挑战 栈的存储方式
第一次运行第二次运行第三次运行结论:void* 类型变量的地址不符合栈的存储方式。修改指针类型后第一次运行第二次运行仍然不符合栈的存储方式
2021-01-24 11:51:42 127
原创 static相关的一些编程心得
1. 使用static声明变量 :避免栈中数组越界导致不可预知错误#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ static int queue[100]; static int a[10]; static int b[10]; memset(queue,0,sizeof(queue)); ...
2021-01-23 23:22:03 182
原创 c中数组越界Process returned -1073741819 (0xC0000005)
数组越界会报错:Process returned -1073741819 (0xC0000005)debug:应该检查数组下标在何处超越定义的数组大小。
2021-01-23 19:53:47 2245
原创 函数scanf()和gets()的区别
#include<iostream>#include<string.h>using namespace std;int main(){ char a[101],s[101]; int i,len,mid,next,top; gets(a);// scanf("%s",&a); cout<<a<<endl; char ch; ch=getchar(); if(ch=='\n') .
2021-01-22 15:08:43 164
原创 c中int和long long的区别
注意:两位有 00=0 01=1 10=2 11=3 四个数,2^2-1=4-1=3(10进制)=11(二进制)int 4byte=32位 第一位符号位,即2^31-1=1111111 11111111 11111111 11111111(二进制)=2147483648-1(十进制)同理: long long (int) 8byte=64位。...
2021-01-21 21:27:11 252
原创 codeblocks 字体光标颜色设置
CODEBLOCK:是一款个人认为比较好的的编译器。大家在编写程序的时候,按照自己的喜好设置codebloock的背景颜色和光标的颜色之后,不仅显得美感许多,而且相信在一定程度上对学习效率 帮助,下面根据自己的经验写一下如何设置背景颜色:1、设置光标:Setting-->Editor-->margins and caret-->caret的color中设置。2、字体:setting->editor->syntax highlighting选择刚..
2021-01-21 21:14:51 1416
原创 一谈——一篇文章揭秘函数中变量在内存中的存储
#include<stdio.h>int main(){ int i; printf("sizeof(i)=%d \n",sizeof(i)); int a[10]; printf("sizeof(a[i])=%d\n",sizeof(a[1])); printf("&a[10]=%d\n",&a[10]); for (i = 0; i <= 10; ++i)//死循环 { a[i] = 0; .
2021-01-21 19:54:37 258
原创 就桶排和冒泡为例说说算法的时间复杂度
关于桶排时间复杂度的问题,计算的时候其实要看 m和n有没有关系,m是1~1000,那最外层就是1000次,里面哪个循环要判断通里面是否存取了数据,里面存的是频率,频率和最外层也就是1~1000有没有关系,此时,里层循环共需要多少次,n次。所以时间复杂度是m+n。冒泡就不一样了,冒泡每一趟需要n次比对,需要m趟,所以是m*n,也就是n方。我们假设计算机运行一行基础代码需要执行一次运算。int aFunc(void) { printf("Hello, World!\n"); ..
2021-01-20 14:12:51 124
原创 codeblocks修改背景颜色
复制以下代码到default.conf替换掉C:\Users\yourusername\AppData\Roaming\CodeBlocks目下下的default.confSettings>Editor>Syntax Highlighting在colour theme中选择自己喜欢的,比如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CodeBlocksConfig version="1".
2021-01-13 11:15:41 3374 2
原创 new关键字来创建c++中一维二维三维的动态数组及其相应的删除方法
一、C++创建一维数组type *p = new type [N] type是指具体的数据类型, N代表的是一维数组的列数 每次使用new后都要释放 delete[] p1; 二、C++创建二维数组 一般的格式:type (*p)[N] = new type [][N] type是指具体的数据类型, N代表的是二维数组的列数另一种格式:不需要写列数当然在每次使用完动态数组后,需要将其释放#include<iostream>#include<s
2021-01-01 21:49:15 662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人