iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Software Development

C# 學習之路系列 第 24

[DAY23] C#基礎與實作(常見演算法-動態規劃)

  • 分享至 

  • xImage
  •  

C# 程式基礎

常見演算法:

動態規劃(Dynamic Programming,簡稱DP):

  • 基本概念:
    • 基本思想是將原始問題分解成較小的子問題,然後解決這些子問題,最後結合子問題的解來解決原始問題。
    • 與分治法(Divide and Conquer)不同點於,動態規劃的關鍵是儲存子問題的解,以便在需要時重複使用,並節省計算成本。
  • 基本步驟:
    1. 定義子問題:
      確定如何將原始問題分解成較小的子問題。這通常需要一些創造性,以找到適當的子問題。
    2. 建立狀態表格:
      創建一個表格或陣列,用於儲存子問題的解。這個表格的維度和大小取決於子問題的性質。
    3. 初始化:
      將表格中的一些初始值設置為已知的值,通常是一些基本情況。
    4. 遞迴計算:
      使用遞迴或迴圈計算每個子問題的解,並將結果儲存在表格中。
    5. 合併結果:
      根據子問題的解合併出原始問題的解。
  • 程式實作(Fibonacci):
    static long Fibonacci(int n)
    {
        if (n <= 1)
            return n;
    
        long[] dp = new long[n + 1];
        dp[0] = 0;
        dp[1] = 1;
    
        for (int i = 2; i <= n; i++)
        {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
    
        return dp[n];
    }
    
    static void Main(string[] args)
    {
        int n = 10;
        long result = Fibonacci(n);
        Console.WriteLine($"Fibonacci數列的第 {n} 個數是 {result}");
        //Fibonacci數列的第 10 個數是 55
    }
    

程式實作練習:

leetcode-70. Climbing Stairs
https://ithelp.ithome.com.tw/upload/images/20231006/20163217xk48HEyffs.png
  以上的解法不一定是最好的,但可以依照上方的方法學習、練習,
 並期望自己找到更好的方法,持續進步><

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. 圖解資料結構 × 演算法:運用C#
  5. leetcode
  6. algo

期望挑戰30天持續更新成功 ~ DAY23


上一篇
[DAY22] C#基礎與實作(常見演算法-貪心.迭代)
下一篇
[DAY24] C#基礎與實作(常見演算法-深度優先搜尋)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言