[算法]操作系统进程通信(预防死锁)算法 Dijkstra银行家算法 C语言实现

银行家算法说明:最早由算法大师 迪杰克斯拉 (Edsger Dijkstra) 提出,银行家算法,顾名思义,它的原理来源于银行系统的存贷款发放管理,即银行(系统)要将一定的款项(资源)贷款(分配)给N个人(进程),当然不需要考虑信用问题(‘_’),在已经发放了一定的金额后,要使得银行的每一次放款(分配资源)都能使得银行(系统)的运行安全(可以这么理解吧),因此银行家要对现有的资金进行合理分配发放,基本要求要银行必须保留一定的存款不能低于一定的限度(临界资源),同时又不能不放贷款不然会让客户“饿死”(进程饥饿),客户在使用完贷款后要返还(释放)这笔贷款,当然是没有利息的,然后银行要再分配给客户,直到满足客户的多有贷款请求

[算法]简单的背包问题递归解法,C语言实现

今天讲点简单的算法,最简单的背包0算法,使用了递归的方法,相信看完代码的
朋友会发现这段代码很熟悉,不过CG提供这些代码的目的只是让全部背包算法的完整
提供地给大家,代码很简单,相信高手一看就懂,这里的背包算法只是考虑了物品的
重量,没有考虑物品的价值,是初学递归算法的朋友必看的代码,高手的话全当复习
一下吧。

[算法]图算法之骑士遍历问题(象棋中马的遍历问题)分析,C语言实现

实现棋盘上任意位置的一个棋子马,使它不重复的走过棋盘上的每一个棋盘格
分析:首先知道马在棋盘是怎么走的,根据国际象棋规则,马在一个起始位置共有8个
可用的行动位置,当然边界方面需要另外考虑,我们的马的行走必须考虑这8种类可
能性,排除不能使用的位置,走可用的位置,当8个位置不可以使用的时,需要考虑
返回上一步,这点有点像图的广度优先遍历相同,当马走完所有位置,同时没有可
用的位置用于行走的时候遍历结束。

[算法]背包问题的动态规划算法解答,C语言实现

今天继续背包问题相关解法,主要内容:动态规划
想到这个解法是想到了前几天的一道软考软件设计师考试的下午算法考题,我是参
加者,内容大概如下:通常每种食物往往有不同的营养价值,顾客往往需要一种算
法实现用最少的花费获得最高的营养价值,(食物不重复),现在要求在花费N元钱
获得最大营养价值

求输入的N(1~20)个整数(1~200000)的最大公约数算法

求输入的N(1~20)个整数(1~200000)的最大公约数算法
盐城师范学院软件协会 ACM/ICPC 试题
如需转载请保留相关作者注释,标明出处
说明:
算法使用了位运算的优化,减少MOD运算和除法运算的开销
实现一次遍历求出结果
算法时间复杂度O(n),最差情况O(Log2^C *N)C=所有数中最大数