当前位置:网站首页>Dynamic planning idea "from getting started to giving up"
Dynamic planning idea "from getting started to giving up"
2022-07-07 01:04:00 【rabbit_ zli】
Definition of dynamic programming
Break up the original problem into several sub problems , At the same time, save the answers to the sub questions , So that each subproblem can be solved only once , Finally get the answer to the original question .
The general process of Dynamic Planning

Example 1: Dynamic programming of one-dimensional space
subject : Find the Fibonacci sequence
- Violent recursive solution
// Use recursion to solve
int fibonacci(int i) {
return i <= 1 : i : fibonacci(i - 1) + fibonacci(i - 2);
}
The time complexity of violent recursion is exponential , We need to use memory search to solve this problem
- Memory search ( Dynamic planning ideas )
// Using the idea of dynamic planning Memory search
int fibonacci(int fib) {
// Define an array Store the N Fibonacci number of items
int[] cache = new int[fib + 1];
// Traverse
for (int i = 0; i < cache.length; i++) {
if (fib <= 1) {
cache[i] = i;
continue;
}
cache[i] = cache[i - 2] + cache[i - 1];
}
return cache[fib];
}
Complex dynamic programming
Complex dynamic programming :
- Dimensions have changed It may be two-dimensional or three-dimensional space ;
- There may be a trade-off optimal substructure in the middle
subject 2: Different paths
Title Description : A robot is in a m x n The top left corner of the grid ( The starting point is marked as “Start” ).
The robot can only move down or right one step at a time . The robot tries to reach the bottom right corner of the grid ( In the figure below, it is marked as “Finish” ).
Ask how many different paths there are in total ?
For the above questions , Because you can only Right or down go , So we can turn it into a sub problem :
Sub problem 1: about A How to get to the lower right corner
Sub problem 2: about B How to get to the lower right corner
So the total walking method is equal to 【A】 The solution of the subproblem +【B】 The solution of the subproblem
- Solution 1 : Use the conventional recursive solution
// Using recursive solutions
int paths(int m, int n) {
// Define a two-dimensional mesh
int[][] table = new int[m][n];
// Call recursive functions
return dfs(table, 0, 0);
}
int dfs(int[][] table, int row, int col) {
// Recursive termination condition
// 1.1 Dealing with boundary values
if (row < 0 || row >= table.length || col < 0 || col >= table[0].length) {
return 0;
}
// 1.2 If you go to your destination Then return to 1
if (row == table.length - 1 && col == table[0].length - 1) {
return 1;
}
// Transform into the solution of the subproblem
return dfs(table, row + 1, col) + dfs(table, row, col + 1);
}
- Solution 2 : Memory search
/** Use the idea of dynamic programming to solve You can find The number of paths in each grid is determined by the total number of paths in the upper grid and the left grid */
int paths(int m, int n) {
// Define a two-dimensional matrix
int[][] table = new table[m][n];
// First initialize the first row and first column
for (int i = 0; i < m; i++) {
table[m][0] = 1;
}
for (int i = 0; i < n; i++) {
table[0][n] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
table[i][j] = table[i - 1][j] + table[i][j - 1];
}
}
return table[m - 1][n - 1];
}
边栏推荐
- Summary of being a microservice R & D Engineer in the past year
- 深度学习简史(二)
- Three methods to realize JS asynchronous loading
- Stm32f407 ------- SPI communication
- Batch obtain the latitude coordinates of all administrative regions in China (to the county level)
- [batch dos-cmd command - summary and summary] - jump, cycle, condition commands (goto, errorlevel, if, for [read, segment, extract string]), CMD command error summary, CMD error
- Slam d'attention: un slam visuel monoculaire appris de l'attention humaine
- Informatics Orsay Ibn YBT 1172: find the factorial of n within 10000 | 1.6 14: find the factorial of n within 10000
- 做微服务研发工程师的一年来的总结
- 深度学习框架TF安装
猜你喜欢

pytorch之数据类型tensor

Part 7: STM32 serial communication programming

Trace tool for MySQL further implementation plan
![[software reverse automation] complete collection of reverse tools](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[software reverse automation] complete collection of reverse tools

ActiveReportsJS 3.1中文版|||ActiveReportsJS 3.1英文版

《安富莱嵌入式周报》第272期:2022.06.27--2022.07.03

资产安全问题或制约加密行业发展 风控+合规成为平台破局关键

Stm32f407 ------- SPI communication

Deep learning environment configuration jupyter notebook
做微服务研发工程师的一年来的总结
随机推荐
【批处理DOS-CMD命令-汇总和小结】-字符串搜索、查找、筛选命令(find、findstr),Find和findstr的区别和辨析
Set (generic & list & Set & custom sort)
The printf function is realized through the serial port, and the serial port data reception is realized by interrupt
Configuring the stub area of OSPF for Huawei devices
from .cv2 import * ImportError: libGL.so.1: cannot open shared object file: No such file or direc
新手如何入门学习PostgreSQL?
A brief history of deep learning (I)
深度学习之环境配置 jupyter notebook
[HFCTF2020]BabyUpload session解析引擎
New feature of Oracle 19C: automatic DML redirection of ADG, enhanced read-write separation -- ADG_ REDIRECT_ DML
第七篇,STM32串口通信编程
Threejs image deformation enlarge full screen animation JS special effect
pyflink的安装和测试
fastDFS数据迁移操作记录
Attention SLAM:一种从人类注意中学习的视觉单目SLAM
Attention slam: a visual monocular slam that learns from human attention
Return to blowing marshland -- travel notes of zhailidong, founder of duanzhitang
Rainstorm effect in levels - ue5
学习光线跟踪一样的自3D表征Ego3RT
Explain in detail the implementation of call, apply and bind in JS (source code implementation)