- 博客(16)
- 资源 (2)
- 收藏
- 关注
原创 排序算法—插入排序
/******************************** *插入排序:最坏情况下,输入数组逆序,时间复杂度O(n^2) * * 最好情况下,输入数组正序,时间复杂度O(n) * *由于插入排序在输入数组正序的情况下时间复杂度较小因此 *当数组比较小且基本有序的情况下我们可以使用插入排序 *应用:优化排序,可以在快速排序的过程结合插入排序提高效率 * *此外:在内层
2015-10-31 00:00:42 453
原创 hdu3567 Eight II(IDA*+康托展开)
题目链接:点击打开链接题意描述:经典八数码问题,给定起始状态和目标状态,经过d、l、r、u移动,求解如何移动能使起始状态到达目标状态?1、移动的次数尽可能少2、如果移动次数相同,求解移动序列的最小字典序?解题思路:典型的IDA*题目估值函数:从当前状态移动到目标状态所需的最小步数(我们可以通过曼哈顿距离进行估值),用于剪枝迭代:此处我们不再使深度每次加1,而是在搜索
2015-10-28 21:18:18 920
转载 ping 原理与ICMP协议
ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。 ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据
2015-10-28 16:28:50 1696 1
转载 声明与定义的区别
声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:extern int bar;extern int g(int, int);double f(int, double); // 对于函数声明,extern关键字是可以省略的。class foo; //
2015-10-27 21:35:12 323
原创 C语言关键字解析
ANSI标准定义的C语言关键字共32个1、数据类型关键字基本数据类型:void char int float double 类型修饰关键字 short long signed unsigned 复杂类型 struct union enum typedef sizeof存储级别关键字:auto static register extern const volatile
2015-10-27 21:26:02 997
转载 寄存器与缓存的区别
这里的缓存是指的CPU的缓存。按与CPU远近来分,离得最近的是寄存器,然后缓存,最后内存。所以,寄存器是最贴近CPU的,而且CPU只与寄存器中进行存取。(寄存的意思是,暂时存放数据,不中每次从内存中取,它就是一个临时放数据的空间,火车站寄存处就是这个意思)而寄存器的数据又来源于内存。于是 CPU寄存器内存 这就是
2015-10-26 15:27:44 3841 1
原创 poj2449 Remmarguts' Date(K短路:A*算法)
题目链接:点击打开链接题意描述:给定一张图,求从点s出发到点t的第k短路?解题思路:A*算法首先预处理使用Dijkstra求出从图中任意一点到点t的最短路径,然后使用A*算法求解即可A*算法中g为从出发点s到当前所走过的实际距离,h为从当前点到目标点t的最短距离,每次我们扩展g+h最小的点即可思考:本题我是用剪枝:记录一个maxdis表示第k短路的一个上界,使用
2015-10-25 11:39:23 437
转载 Linux下c语言多线程编程
引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用
2015-10-18 11:50:37 329
转载 堆与栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2015-10-17 23:39:36 279
转载 C语言书写规范
写程序就像写文章,怎么样才可以让你的程序更受"芯片们"的欢迎!语言代码书写规范总则 常量、变量、函数名的定义可以采用英文单词或中文全拼表示,尽量采用采用英文单词或全部中文全拼表示,若出现英文单词和中文混合定义时,使用连字符“_”将英文与中文割开。 for语句的循环指针可以采用I,j,t等单个字母变量定义; 常量定义 规范
2015-10-14 21:04:58 750
原创 hdu1043 Eight(A*/双向BFS/单项BFS打表+康托展开)
题目链接:点击打开链接题意描述:经典八数码问题,给定八数码的初始序列,求经过u、r、l、d四种操作到达1 2 3 4 5 6 7 8 x的状态,打印出操作序列?解题思路:A*/双向BFS/单项BFS打表+康托展开 202msAC方法一:BFS逆向打表+康托展开:从1 2 3 4 5 6 7 8 x逆向扩展,记录哪些状态可以到达,以及到达给状态操作代码:#includ
2015-10-11 17:42:22 2135
转载 康拓展开(八数码编码、排列组合)
康拓展开及应用 题目:给出n个互不相同的字符, 并给定它们的相对大小顺序,这样n个字符的所有排列也会有一个顺序. 现在任给一个排列,求出在它后面的第i个排列.这是一个典型的康拓展开应用,首先我们先阐述一下什么是康拓展开。(1)康拓展开 所谓康拓展开是指把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+..
2015-10-11 15:05:57 2160
原创 hihocoder1238 Total Highway Distance(DFS+二分查找/map)
题目链接:点击打开链接题意描述:给定一棵树,树上每条边有一个权值,记树上任意两点之间路径权值之和为Sx,求所有点对之间Sx之和ans?有下面两种操作1、修改某条边的权值2、求ans解题思路:DFS+二分查找分析:首先多个点对可能经过同一条边,因此我们只需要统计树上的每条边被用了多少次即可,这样ans=求和(w(边的权值)* tt(边出现的次数))对于操作1:更新an
2015-10-09 20:40:38 1506
原创 #1050 : 树中的最长路(两次BFS)
题目链接:点击打开链接题意描述:求树上的最长路?解题思路:任找一点u作为根节点BFS找出距离该点最远的点v,然后以v为根节点BFS可找出树上的最长路代码:#include #include #include #define MAXN 100010#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int h
2015-10-09 00:17:29 895
原创 hihocoder #1041 : 国庆出游(DFS bitset保存子树集合用于指导DFS遍历过程)
题目链接:点击打开链接题意描述:小Hi和小Ho准备国庆期间去A国旅游。A国的城际交通比较有特色:它共有n座城市(编号1-n);城市之间恰好有n-1条公路相连,形成一个树形公路网。小Hi计划从A国首都(1号城市)出发,自驾遍历所有城市,并且经过每一条公路恰好两次——来回各一次——这样公路两旁的景色都不会错过。令小Hi苦恼的是他的小伙伴小Ho希望能以某种特定的顺序游历其中m个城市。例如按3-2
2015-10-08 17:40:25 1859 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人