- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi gặp một số khó khăn khi hiểu lập trình động, mặc dù tôi đã đọc qua rất nhiều tài nguyên để cố gắng hiểu.
Tôi hiểu ví dụ về lập trình động được đưa ra bằng thuật toán Fibonacci. Tôi hiểu rằng nếu bạn sử dụng phương pháp chia để trị thì bạn sẽ giải được một số bài toán con nhiều lần, trong khi lập trình động giải quyết vấn đề này bằng cách giải các bài toán con chồng chéo này, nhưng chỉ một lần (và lưu trữ chúng để tham khảo sau này). lập trình động trong lớp bằng cách sử dụng bài toán chiếc ba lô 0/1 làm ví dụ, nhưng tôi không thực sự hiểu ví dụ này hoặc cách nó minh họa lập trình động hoặc nó giống với ví dụ Fibonacci như thế nào.
Dưới đây là các slide có liên quan:
Hầu hết tôi đều hiểu chuyện gì đang xảy ra cho đến trang trình bày cuối cùng có ghi f(i,y) = max{....}
Tôi đã tìm thấy gì? Tại sao tôi lại tìm được giá trị lớn nhất của bất cứ thứ gì? Quan trọng nhất, điều này có liên quan gì đến lập trình động? Tôi không hiểu mối quan hệ này, giống như tôi đã hiểu khi xét đến ví dụ Fibonacci. Thực lòng tôi không biết vấn đề về chiếc ba lô này có liên quan gì đến lập trình động vì nó thậm chí không thể so sánh được với việc sử dụng ví dụ Fibonacci để minh họa cho lập trình động. Giống như tôi không thể thấy bất kỳ sự tương đồng hay bất cứ điều gì, nó thực sự không có nhiều ý nghĩa đối với tôi
câu trả lời hay nhất
Lập trình động chỉ đơn giản là xác định vấn đề theo các vấn đề con đơn giản hơn.
Đối với dãy Fibonacci, chúng ta định nghĩa bài toán theo hai thuật ngữ nhỏ hơn.
Trong trường hợp này, chúng ta xác định một bài toán với một số mục nhất định và một dung lượng nhất định theo một bài toán con chứa ít mục hơn và có thể có dung lượng nhỏ hơn.
Chúng tôi bắt đầu tính toán lợi nhuận cho tối đa 1 mặt hàng và theo công suất. Sau đó, chúng tôi tính toán lợi nhuận cho tối đa 2 mặt hàng và mỗi công suất. Sau đó, chúng tôi thực hiện việc này cho tối đa 3 mục, rồi 4 mục, v.v. Vì chúng ta đã xác định một bài toán theo các bài toán con có ít mục hơn nên chúng ta có thể chỉ cần tra cứu những gì chúng ta đã tính toán để xác định bất kỳ giá trị nào với 2, 3, 4 mục, v.v.
Có thể hữu ích khi coi đây như một lưới 2D vật lý, nơi bạn điền các giá trị từ hướng này sang hướng khác và mỗi lần bạn chỉ nhìn vào hướng mà tất cả các giá trị đã được điền.
Có các bài toán con chồng chéo nhau vì trong một trường hợp chúng ta sử dụng cùng một dung lượng và trong trường hợp khác chúng ta sử dụng một dung lượng nhỏ hơn. Dung lượng nhỏ hơn đôi khi phù hợp với các bài toán con khác nhau kiểm tra cùng một dung lượng. Nói cách khác, một vấn đề f(i+1, j)
sẽ bằng với câu hỏi khác f(i+1, y - w_i)
. Ví dụ, bạn có thể thấy f(11, 5)
Xuất hiện ở hai nơi:
f(10, 8) = max(f(11, 8), f(11, 5) + 77) // w_i = 3
f(10, 5) = max(f(11, 5), f(11, 2) + 77)
Trong trường hợp này, chúng tôi có X
Đã tính toán f(11,X)
, vì vậy chúng ta chỉ cần tìm những giá trị này.
Tôi nhận thấy rằng chúng tôi đã tăng Tôi
Có một chút khó hiểu khi định nghĩa vấn đề là f(i, j) = ...f(i+1, X)...
Và f(n,X)
Vì vậy hãy chứa tối đa 1 mục thay vì sử dụng giảm dần Tôi
và chứa tối đa 1 mụcf(1,X)
. Nhưng đó chỉ là ngữ nghĩa và không thay đổi được vấn đề theo bất kỳ cách nào.
f(i,y)
là một mục đi kèm Tôi
đến n
Lợi nhuận tối đa của một tập hợp con của , với công suất là y
.
Bây giờ chúng ta có thể định nghĩa nó để bao gồm hoặc loại trừ các mục Tôi
, sau đó lấy vật phẩm i+1
đến n
lợi nhuận tối đa.
Khi chúng tôi loại trừ các mục Tôi
, điều này không làm thay đổi trọng số, vì vậy chúng ta chỉ có thể xem xét lợi nhuận tối đa cho cùng một công suất, tức là f(i+1, y)
và lợi nhuận không thay đổi.
Khi chúng tôi bao gồm dự án Tôi
Điều này sẽ thay đổi trọng lượng của đồ vật, đặc biệt là Tôi
Trọng lượng của w_i
, vì vậy chúng ta phải tìm f(i+1, y - w_i)
. Nhưng sau đó chúng tôi cũng nhận được hàngTôi
lợi nhuận, vì vậy chúng ta cần cộng lợi nhuận của nó, nghĩa làp_i
.
Bây giờ, vì muốn có lợi nhuận tối đa nên chúng ta phải tìm giá trị lớn nhất của hai giá trị này, cho ta:
f(i, y) = max{f(i+1, j), f(i+1, y - w_i) + p_i}
Nếu bạn vẫn không thể tìm ra, tôi khuyên bạn nên tự mình xây dựng một ví dụ để làm điều đó - không có lời giải thích nào để thấy nó thực sự hoạt động và hãy sử dụng nó để có trực giác về lý do tại sao chúng ta làm mọi việc theo cách chúng ta làm. LÀM.
Về thuật toán - lập trình động và ba lô 0/1, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/23335783/
Tôi đã viết câu trả lời cho vấn đề về chiếc ba lô bị giới hạn với từng mục trong Scala và thử chuyển nó sang Haskell và nhận được kết quả như sau: ba lô :: [ ( Int, Int ) ] -> [ ( Int, Int ) ]
Tôi đang giải quyết vấn đề lập trình động này và tôi đang gặp khó khăn khi viết một giải pháp lặp lại bằng Java. Mục tiêu là tìm ra số lượng calo tối thiểu cần thiết để tiêu tốn X xu. Nếu chúng ta không thể chi chính xác X xu thì không có giải pháp nào cả. Chúng ta có N phần tử, mỗi phần tử
Theo Wikipedia và các tài nguyên khác mà tôi đã xem, bạn cần ma trận m[n][W]; n - số phần tử và W - tổng dung lượng của ba lô. Ma trận này trở nên rất lớn, đôi khi quá lớn để có thể xử lý được trong chương trình C. Tôi biết cơ sở của lập trình động là tiết kiệm thời gian bộ nhớ, tuy nhiên, có
Tôi đã tìm thấy mã này sử dụng cơ chế vũ lực để giải quyết vấn đề về chiếc ba lô (điều này chủ yếu dành cho việc học, vì vậy không cần phải chỉ ra rằng động lực học hiệu quả hơn). Tôi có mã làm việc và hiểu hầu hết về nó. hầu hết. Đây là vấn đề: Tôi nhận thấy hai điều kiện này và tôi không biết chúng hoạt động như thế nào và tại sao trong mã
Tôi phải thực hiện biến thể sau của bài toán chiếc ba lô. Mọi yếu tố trong ba lô đều có mức độ ưu tiên và trọng lượng. Bây giờ tôi ấn định trọng số X. Tôi phải biết tính toán tập hợp các mục nhỏ nhất có tổng trọng số ít nhất là X và có mức độ ưu tiên thấp nhất. Mỗi mục chỉ có thể được chọn một lần. Ví dụ: Knap
Vì vậy, tôi muốn biết cách tính toán tất cả các lời giải cho bài toán chiếc ba lô. Nghĩa là, tôi quan tâm đến việc tìm số tập con có thể có từ một tập hợp số có kích thước tối đa K. Ví dụ: chúng ta có một tập hợp các mục có kích thước {3, 2, 5, 6, 7} với kích thước tối đa là K = 13. Vì vậy
Tôi đang gặp sự cố khi thực hiện một nhiệm vụ. Tôi có cơ sở dữ liệu chứa tất cả các mục có giá trị "giá". Chúng được kết nối với các "vòng" khác nhau và các "vòng" có "tổng giá trị (giá trị)", trong đó các mục "giá" -giá trị (giá trị) này kết hợp với nhau xác định "tổng giá trị"
Vấn đề tôi gặp phải như sau: Cho một hàng gồm N phần tử, mỗi phần tử có trọng số và một hàng chứa K. Chúng ta cần chia các phần tử vào các thùng chứa theo thứ tự chúng xuất hiện. Ví dụ: mặt hàng thứ nhất chỉ có thể vào thùng thứ nhất, mặt hàng thứ hai có thể vào thùng thứ nhất
Câu hỏi như sau: Bạn có n độ dài chuyến đi tính bằng km nên chia cho m số ngày sao cho tối đa
Tối qua tôi đã gặp phải một vấn đề cụ thể khi đang phát triển một ứng dụng và tôi chắc chắn rằng ứng dụng đó có thể có thuật toán hiệu quả để giải quyết vấn đề đó. Ai có thể giới thiệu nó? Câu hỏi: TL;DR: Có thể một bức ảnh sẽ giúp ích: http://www.custom-foam-insert
Làm cách nào để có được danh sách thả xuống trong đó trình giữ chỗ hiển thị "Chọn danh mục" làm lựa chọn mặc định? Đoạn mã sau không hiển thị phần giữ chỗ $this->crud->addField([ // Select2 'label'
Vừa có một chiếc ba lô mới. Tôi đã tìm kiếm trên trang web chính thức và googled nhưng không tìm thấy câu trả lời Trong laravel 7, sử dụng Ba lô 4.1 Mô hình dữ liệu của tôi là: Khách hàng có nhiều mối quan hệ địa chỉ được định cấu hình trong mô hình khách hàng: public fu
Theo như tôi biết (vui lòng sửa cho tôi nếu tôi sai), ba lô chỉ xử lý các trường có thể điền $. Không phải toàn bộ vấn đề của laravel là về sự tách biệt giữa $fillable và $guarded sao? MWE: Trong User.php:
Sau khi xem bài giảng này, tôi đã tạo mã ba lô sau. Trong bài giảng, giáo sư nói rằng rất dễ xác định tập hợp từ giá trị tối ưu (19:00 phút), nhưng tôi không tìm ra cách thực hiện. Tôi đã cung cấp một ví dụ trong mã của mình trong đó các giá trị được thêm vào 21 và làm cách nào để xác định tập hợp dựa trên giá trị đó (trong trường hợp này
Tại sao phương pháp tham lam phù hợp cho các bài toán về chiếc ba lô liên tục nhưng lại không phù hợp cho các bài toán về chiếc ba lô 0-1? Câu trả lời hay nhất Đối với một chiếc ba lô liên tục, trong giải pháp tối ưu, bạn không thể có q > 0 phần tử với giá mỗi đơn vị c trong khi để lại q' > 0 với giá c' > c
Tôi gặp một số khó khăn khi hiểu lập trình động, mặc dù tôi đã đọc qua rất nhiều tài nguyên để cố gắng hiểu. Tôi hiểu ví dụ về lập trình động được đưa ra bằng thuật toán Fibonacci. Tôi hiểu rằng nếu bạn sử dụng phương pháp phân chia và chinh phục thì bạn sẽ giải quyết được một số vấn đề phụ nhiều lần, trong khi lập trình động thực hiện điều này bằng cách giải quyết các vấn đề chồng chéo này
Giả sử một vấn đề kinh điển về chiếc ba lô là 0-1, nhưng bạn có thể làm tràn/xuống ba lô và chịu một số hình phạt. Lợi nhuận X được khấu trừ cho mỗi đơn vị tràn (trọng lượng vượt quá công suất tối đa) và lợi nhuận Y được khấu trừ cho mỗi đơn vị tràn (trọng lượng thấp hơn công suất tối đa). Tôi muốn sắp xếp tất cả các yếu tố theo tỷ lệ lợi nhuận trên trọng lượng,
Tôi đang viết một biến thể của ba lô 0-1 với nhiều ràng buộc. Ngoài giới hạn về trọng lượng, tôi cũng có giới hạn về số lượng, nhưng trong trường hợp này tôi muốn giải bài toán về chiếc ba lô, vì tôi cần có chính xác n phần tử trong chiếc ba lô của mình có trọng lượng nhỏ hơn hoặc bằng W. Tôi hiện đang làm việc trên một dự án dựa trên Roset
Cho một mảng hoặc dãy số nguyên dương vô hạn, tìm năm số đầu tiên có tổng bằng 20. Từ việc đọc báo cáo vấn đề, ban đầu có vẻ như đó là vấn đề về Knapsack 0-1, nhưng tôi bối rối về toàn bộ thuật toán Knapsack 0-1 có thể được sử dụng trên luồng
Tôi muốn giải quyết vấn đề về chiếc ba lô 3D. Tôi có nhiều hộp với chiều rộng, chiều cao, chiều dài và giá trị khác nhau. Tôi có một không gian được chỉ định và tôi muốn đặt chiếc hộp vào không gian đó để có được lợi nhuận tối ưu. Tôi muốn dùng bạo lực để làm điều đó. Tôi đang sử dụng Java
Tôi là một lập trình viên xuất sắc, rất giỏi!