• 🚀 Đăng ký ngay để không bỏ lỡ những nội dung chất lượng! 💯 Hoàn toàn miễn phí!

Có Video Toán và thuật toán mỗi ngày

Mày làm thuật toán xuất ra công thức tổng quát Vieta's formula general cho bất kỳ đa thức nào với các hệ số nguyên ở bất kỳ bậc nào đi như đa thức bậc 10 chẳng hạn
 
Bài dễ: Bãi xe có N chỗ đỗ xe cạnh nhau. Tính xác xuất để xe thứ K và K+1 đỗ cạnh nhau ( 0 < K < N -1 )
bài này K tương đương với ith à? vd N = 5 thì 1,2,4,3,5 là một trường hợp à hay K bất kì nếu thế thì 1,2,... là một trường hợp à?
 
ta xét K, và K + 1 là một khối khi đó ta có 1 khối và N-2 chỗ còn lại => để sắp xếp K và K+1 ta có (N-2 + 1)! = (N-1)! . Mà mỗi cách sắp xếp có thể thoán đổ vd K, K+1 và K+1, K => có 2*(N-1)! cách. với N thì ta có N! cách sắp xếp => 2*(N-1)!/N! =2*(N-1)!/N*(N-1)! = 2/N

=> P(K, K+1) = 2/N
 
bài này K tương đương với ith à? vd N = 5 thì 1,2,4,3,5 là một trường hợp à hay K bất kì nếu thế thì 1,2,... là một trường hợp à?
N = 5 thì có các trường hợp:
[1] [2] [X] [X] [X]
[ X] [1] [2] [X] [X]
[ X [X][1] [2] [X]
[ X] [X][X] [1] [2]
trong đó [1] và [2] là [k] và [K+1], [X] ứng với chỗ khác (trống hoặc có xe khác).
[1][2] và [2] [1] là tương đương.
 
Solution bài combination sum II
Python:
class Solution:
    def backtracking(self, candidates: List[int], index, target, sum, result, combination):
        if sum == target:
            result.append(combination.copy())
            return
        if sum > target:
            return
        for i in range(index, len(candidates)): 
            if i > index and candidates[i] == candidates[i - 1]:
                continue
            combination.append(candidates[i])
            sum += candidates[i]
            self.backtracking(candidates, i+1, target, sum, result, combination)
            sum -= candidates[i]
            combination.pop()
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        result = []
        combination = []
        candidates.sort()
        if len(candidates) == 0:
            return result
        self.backtracking(candidates, 0, target, 0, result, combination)
        return result
 
Python:
# Python program to construct tree using
# inorder and postorder traversals

class Node:
    def __init__(self, x):
        self.data = x
        self.left = None
        self.right = None

# Function to find index of value in arr[start...end]
# The function assumes that value is present in in[]
def search(arr, start, end, value):
    for i in range(start, end + 1):
        if arr[i] == value:
            return i
    return -1

# Recursive function to construct binary tree of size n
# from Inorder traversal in[] and Postorder traversal
# post[]. Initial values of inStrt and inEnd should
# be 0 and n - 1.
def build_util(inorder, postorder, in_start, in_end, post_index):
    if in_start > in_end:
        return None

    # Pick current node from Postorder traversal using
    # postIndex and decrement postIndex
    node = Node(postorder[post_index[0]])
    post_index[0] -= 1

    # If this node has no children then return
    if in_start == in_end:
        return node

    # Else find the index of this node in Inorder traversal
    in_index = search(inorder, in_start, in_end, node.data)

    # Using index in Inorder traversal, construct left and
    # right subtrees
    node.right = build_util(inorder, postorder, in_index + 1, in_end, post_index)
    node.left = build_util(inorder, postorder, in_start, in_index - 1, post_index)

    return node

# This function mainly initializes index of root
# and calls buildUtil()
def buildTree(inorder, postorder):
    n = len(inorder)
    post_index = [n - 1]
    return build_util(inorder, postorder, 0, n - 1, post_index)

# Print the preorder of a binary tree
def print_preorder(node):
    if node is None:
        return
    print(node.data, end=" ")
    print_preorder(node.left)
    print_preorder(node.right)

if __name__ == "__main__":
    inorder = [4, 8, 2, 5, 1, 6, 3, 7]
    postorder = [8, 4, 5, 2, 6, 7, 3, 1]

    root = buildTree(inorder, postorder)
    print_preorder(root)
 
Python:
# Python program to construct tree using
# inorder and postorder traversals

class Node:
    def __init__(self, x):
        self.data = x
        self.left = None
        self.right = None

# Function to find index of value in arr[start...end]
# The function assumes that value is present in in[]
def search(arr, start, end, value):
    for i in range(start, end + 1):
        if arr[i] == value:
            return i
    return -1

# Recursive function to construct binary tree of size n
# from Inorder traversal in[] and Postorder traversal
# post[]. Initial values of inStrt and inEnd should
# be 0 and n - 1.
def build_util(inorder, postorder, in_start, in_end, post_index):
    if in_start > in_end:
        return None

    # Pick current node from Postorder traversal using
    # postIndex and decrement postIndex
    node = Node(postorder[post_index[0]])
    post_index[0] -= 1

    # If this node has no children then return
    if in_start == in_end:
        return node

    # Else find the index of this node in Inorder traversal
    in_index = search(inorder, in_start, in_end, node.data)

    # Using index in Inorder traversal, construct left and
    # right subtrees
    node.right = build_util(inorder, postorder, in_index + 1, in_end, post_index)
    node.left = build_util(inorder, postorder, in_start, in_index - 1, post_index)

    return node

# This function mainly initializes index of root
# and calls buildUtil()
def buildTree(inorder, postorder):
    n = len(inorder)
    post_index = [n - 1]
    return build_util(inorder, postorder, 0, n - 1, post_index)

# Print the preorder of a binary tree
def print_preorder(node):
    if node is None:
        return
    print(node.data, end=" ")
    print_preorder(node.left)
    print_preorder(node.right)

if __name__ == "__main__":
    inorder = [4, 8, 2, 5, 1, 6, 3, 7]
    postorder = [8, 4, 5, 2, 6, 7, 3, 1]

    root = buildTree(inorder, postorder)
    print_preorder(root)
ChatGPT hả mày
 
Quy hoạch động là gì?
Quy hoạch động (Dynamic Programming - DP) là một kỹ thuật tối ưu hóa, giúp giải quyết các bài toán phức tạp bằng cách chia nhỏ chúng thành các bài toán con đơn giản hơn, lưu trữ kết quả của những bài toán con này để sử dụng lại sau, tránh tính toán lại nhiều lần.

Ứng dụng của quy hoạch động
Quy hoạch động được sử dụng rộng rãi trong các bài toán kinh điển như bài toán con đường ngắn nhất, chuỗi con chung dài nhất, ba lô, chuỗi con tăng dài nhất, và nhiều bài toán tối ưu hóa khác.

Các bước cơ bản để giải quyết bài toán quy hoạch động
Xác định trạng thái (State)**: Xác định các tham số cần thiết để định nghĩa trạng thái của bài toán.
Xác định hàm chuyển trạng thái (State Transition Function)**: Xác định cách trạng thái hiện tại chuyển sang trạng thái tiếp theo.
Xác định điều kiện gốc (Base Case)**: Xác định giá trị ban đầu cho các trạng thái cơ sở.
Kết luận kết quả (Final Result)**: Xác định cách trích xuất kết quả cuối cùng từ các trạng thái đã lưu.

Ví dụ về quy hoạch động
Bài toán chuỗi con chung dài nhất (Longest Common Subsequence - LCS)
Giả sử ta có hai chuỗi \( X = "AGGTAB" \) và \( Y = "GXTXAYB" \). Ta cần tìm chiều dài của LCS của chúng.

**Bước 1: Xác định trạng thái**
- \( dp[j] \): Độ dài LCS của hai chuỗi con \( X[0:i-1] \) và \( Y[0:j-1] \).

**Bước 2: Hàm chuyển trạng thái**
- Nếu \( X[i-1] == Y[j-1] \) thì \( dp[j] = dp[i-1][j-1] + 1 \).
- Nếu \( X[i-1] \neq Y[j-1] \) thì \( dp[j] = \max(dp[i-1][j], dp[j-1]) \).

**Bước 3: Điều kiện gốc**
- \( dp[0] = 0 \) với mọi \( i \).
- \( dp[0][j] = 0 \) với mọi \( j \).

**Bước 4: Kết luận kết quả**
- Kết quả cuối cùng sẽ nằm ở \( dp[m][n] \), với \( m \) và \( n \) là độ dài của \( X \) và \( Y \).

**Bảng điều kiện:**

| | G | X | T | X | A | Y | B |
|------|---|---|---|---|---|---|---|
| **A**| 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| **G**| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| **G**| 1 | 2 | 2 | 2 | 2 | 2 | 2 |
| **T**| 1 | 2 | 2 | 3 | 3 | 3 | 3 |
| **A**| 1 | 2 | 2 | 3 | 4 | 4 | 4 |
| **B**| 1 | 2 | 2 | 3 | 4 | 4 | 5 |

Tối ưu hóa không gian
Trong nhiều bài toán quy hoạch động, ta chỉ cần lưu trữ một số lượng nhỏ các trạng thái tại mỗi thời điểm. Do đó, có thể tối ưu hóa bằng cách sử dụng mảng một chiều thay vì hai chiều.

Các bài toán điển hình khác sử dụng quy hoạch động
- **Bài toán Ba Lô (Knapsack Problem)**: Tìm tập hợp vật phẩm để tối đa hóa giá trị mà không vượt quá trọng lượng cho phép.
- **Dãy con tăng dài nhất (Longest Increasing Subsequence)**: Tìm dãy con có các phần tử theo thứ tự tăng dần và có độ dài lớn nhất.
- **Biến đổi chuỗi (Edit Distance)**: Tính số bước tối thiểu để biến đổi chuỗi này thành chuỗi khác.

Kết luận
Quy hoạch động là một công cụ mạnh mẽ trong thuật toán và tối ưu hóa, cho phép giải quyết nhiều bài toán phức tạp một cách hiệu quả. Nắm vững quy hoạch động giúp bạn dễ dàng hơn trong việc phân tích và giải quyết các vấn đề tối ưu hóa trong lập trình.
 
Đệ quy là một kỹ thuật lập trình mà một hàm tự gọi chính nó để giải quyết các bài toán nhỏ hơn của chính nó. Để sử dụng đệ quy hiệu quả, cần có hai thành phần chính: **trường hợp cơ sở** (base case), kết thúc đệ quy để tránh vòng lặp vô tận, và **quy tắc đệ quy** (recursive rule), định nghĩa cách hàm gọi lại chính nó.

Ví dụ kinh điển là tính giai thừa của một số \( n \), ký hiệu là \( n! \):

```python
def giai_thua(n):
if n == 0:
return 1
else:
return n * giai_thua(n - 1)
```

Trong ví dụ này, \( giai_thua(0) = 1 \) là trường hợp cơ sở, và \( giai_thua(n) = n * giai_thua(n - 1) \) là quy tắc đệ quy. Đệ quy rất hữu ích khi giải quyết các bài toán có cấu trúc lặp lại.
 
Hi các bác,

Em đang có 1 bài tập về machine learning.
có 1 file dữ liệu đường kính của sản phẩm. Em cần tìm ra độ dài của khoảng em vẽ màu đỏ.
Mỗi 1 dòng dữ liệu tương đương 0.1mm.
Khi đo bất kì 1 sản phẩm, máy sẽ đo được khoảng cách kia.
Nhờ các bác tư vấn ạ.

Data thì em có thể thu thập được nhiều.
Nhưng phương pháp em chưa biết làm thế nào.
ZEnVksY.png

minaminoJ

taokhongcoten19xx

 
Hi các bác,

Em đang có 1 bài tập về machine learning.
có 1 file dữ liệu đường kính của sản phẩm. Em cần tìm ra độ dài của khoảng em vẽ màu đỏ.
Mỗi 1 dòng dữ liệu tương đương 0.1mm.
Khi đo bất kì 1 sản phẩm, máy sẽ đo được khoảng cách kia.
Nhờ các bác tư vấn ạ.

Data thì em có thể thu thập được nhiều.
Nhưng phương pháp em chưa biết làm thế nào.
ZEnVksY.png

minaminoJ

taokhongcoten19xx

Vẫn chưa hiêủ lắm, bài này thì liên quan gì tới ML nhỉ
 
Vẫn chưa hiêủ lắm, bài này thì liên quan gì tới ML nhỉ
đại khái là khi đo sản phẩm. phần mềm sẽ tự động nhận biết được vị trí trong vùng màu đỏ.
có thê không cần ml nhưng ý là t muốn nó hiểu được vị trí cần đo.
 

Có thể bạn quan tâm

Top