《C算法》——递归和动态规划
来源:互联网 发布:网络银行什么时候有的 编辑:程序博客网 时间:2024/06/11 19:53
递归
动态规划可以非常容易的将一个指数时间的递归问题转化为线性时间。下面是两个简单的例子。
----------------------------------------------------------------------------------------------------
斐波纳契数(递归实现)不可行
int F(int i)
...{
if(i < 1) return 0;
if(i == 1) return 1;
return F(i-1) + F(i-2);
}
...{
if(i < 1) return 0;
if(i == 1) return 1;
return F(i-1) + F(i-2);
}
-----------------------------------------------------------------------------------------------------
斐波纳契数(动态规划)
int F(int i)
...{
int t;
if(knownF[i] != unknown) return knownF[i];
if(i == 0) t = 0;
if(i == 1) t = 1;
if(i > 1) t = F(i-1) + F(i-2);
return (knownF[i] = t);
}
...{
int t;
if(knownF[i] != unknown) return knownF[i];
if(i == 0) t = 0;
if(i == 1) t = 1;
if(i > 1) t = F(i-1) + F(i-2);
return (knownF[i] = t);
}
-----------------------------------------------------------------------------------------------------
背包问题(递归实现)不可行
typedef struct
...{
int size;
int val;
} Item;
Item items[N];
int knap(int cap)
...{
int i, space, max, t;
for(i = 0, max = 0; i < N; i++)
...{
if((space = cap - items[i].size) >= 0)
if((t = knap(space) + items[i].val) > max)
max = t;
}
return max;
}
...{
int size;
int val;
} Item;
Item items[N];
int knap(int cap)
...{
int i, space, max, t;
for(i = 0, max = 0; i < N; i++)
...{
if((space = cap - items[i].size) >= 0)
if((t = knap(space) + items[i].val) > max)
max = t;
}
return max;
}
-----------------------------------------------------------------------------------------------------
背包问题(动态规划)
int knap(int cap)
...{
int i, space, max, maxi, t;
if(maxKnown[cap] != unknown) return maxKnown[cap];
for(i = 0, max = 0; i < N; i++)
...{
if((space = cap - items[i].size) >= 0)
...{
if((t = knap(space) + items[i].val) > max)
...{
max = t;
maxi = i;
}
}
}
maxKnown[cap] = max;
return max;
}
...{
int i, space, max, maxi, t;
if(maxKnown[cap] != unknown) return maxKnown[cap];
for(i = 0, max = 0; i < N; i++)
...{
if((space = cap - items[i].size) >= 0)
...{
if((t = knap(space) + items[i].val) > max)
...{
max = t;
maxi = i;
}
}
}
maxKnown[cap] = max;
return max;
}
- 《C算法》——递归和动态规划
- 《C算法》——递归和动态规划[转贴]
- 算法——动态规划(分治递归)
- 动态规划和递归
- 递归和动态规划
- 动态规划和递归
- 递归和动态规划
- 递归和动态规划
- 递归和动态规划
- 数据结构和算法——动态规划
- 递归和动态规划的算法题(1)
- 经典算法题:数字三角形寻找最大路径——动态规划和递归调用两种解法
- 算法题——Unique Paths(C++)动态规划
- 算法——动态规划
- 算法——动态规划
- 算法——动态规划
- 算法——动态规划
- 算法——动态规划
- Linux的核心启动流程(FC5)转
- 用sniffer抓icmp包来分析
- 介绍 devfs
- JsmartWatch项目总结
- 在内存上运行的操作系统
- 《C算法》——递归和动态规划
- 我的25年嵌入式生涯
- 创建自己的操作系统开发环境
- Sniffer抓包软件学习
- PB函数大全
- 命令模式
- Hibernate实践
- DataWindow自动匹配多个Retrieve参数
- 一个高效简洁的Struts分页方法