当前位置:网站首页>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];
}
边栏推荐
- Deep learning environment configuration jupyter notebook
- Data sharing of the 835 postgraduate entrance examination of software engineering in Hainan University in 23
- Chapter II proxy and cookies of urllib Library
- pyflink的安装和测试
- Let's talk about 15 data source websites I often use
- Periodic flash screen failure of Dell notebook
- Stm32f407 ------- SPI communication
- 什么是时间
- 【批处理DOS-CMD命令-汇总和小结】-查看或修改文件属性(ATTRIB),查看、修改文件关联类型(assoc、ftype)
- Niuke cold training camp 6B (Freund has no green name level)
猜你喜欢

UI控件Telerik UI for WinForms新主题——VS2022启发式主题

Activereportsjs 3.1 Chinese version | | | activereportsjs 3.1 English version

线段树(SegmentTree)

Part VI, STM32 pulse width modulation (PWM) programming

Learn to use code to generate beautiful interface documents!!!

第六篇,STM32脉冲宽度调制(PWM)编程

Attention slam: a visual monocular slam that learns from human attention

Chapter II proxy and cookies of urllib Library

第五篇,STM32系统定时器和通用定时器编程
![[牛客] B-完全平方数](/img/bd/0812b4fb1c4f6217ad5a0f3f3b8d5e.png)
[牛客] B-完全平方数
随机推荐
Attention slam: a visual monocular slam that learns from human attention
[牛客] [NOIP2015]跳石头
Building a dream in the digital era, the Xi'an station of the city chain science and Technology Strategy Summit ended smoothly
[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
Five different code similarity detection and the development trend of code similarity detection
Deep understanding of distributed cache design
. Bytecode structure of class file
Summary of being a microservice R & D Engineer in the past year
Slow database query optimization
Set (generic & list & Set & custom sort)
There is an error in the paddehub application
Zabbix 5.0:通过LLD方式自动化监控阿里云RDS
城联优品入股浩柏国际进军国际资本市场,已完成第一步
5种不同的代码相似性检测,以及代码相似性检测的发展趋势
UI控件Telerik UI for WinForms新主题——VS2022启发式主题
Data processing of deep learning
The printf function is realized through the serial port, and the serial port data reception is realized by interrupt
Telerik UI 2022 R2 SP1 Retail-Not Crack
Provincial and urban level three coordinate boundary data CSV to JSON
String comparison in batch file - string comparison in batch file