cuốn sách gpt4 ai đã làm

Lập kế hoạch gửi tin nhắn đến người tiêu dùng ở các mức giá khác nhau

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:55:13 26 4
mua khóa gpt4 Nike

Tôi đang tìm thuật toán tốt nhất để lập lịch tin nhắn. Ý tôi khi nhắc đến việc lập lịch gửi tin nhắn là khi chúng ta có nhiều người tiêu dùng gửi tin nhắn trên xe buýt với các mức giá khác nhau.

Ví dụ: Giả sử chúng ta có dữ liệu D1 đến Dn. D1 được gửi đến nhiều người tiêu dùng C1 cứ sau 5ms, C2 cứ sau 19ms, C3 cứ sau 30ms, Cn cứ sau 10ms, Cn cứ sau 50ms.

Thuật toán tốt nhất để lên lịch hoạt động này với hiệu suất tối ưu (CPU, bộ nhớ, IO) là gì?

lời chào

câu trả lời hay nhất

Tôi có thể nghĩ ra nhiều lựa chọn, mỗi lựa chọn đều có chi phí và lợi nhuận riêng. Nó thực sự phụ thuộc vào nhu cầu của bạn là gì - điều thực sự được định nghĩa là “tốt nhất”. Tôi đã mã hóa một số khả năng bên dưới để hy vọng giúp bạn bắt đầu.

Tùy chọn 1: Thực hiện như sau cho từng đơn vị thời gian (trong ví dụ của bạn là mili giây)

cuộc gọi vui vẻEachMs
thời gian = getCurrentTime()
cho mỗi mốc thời gian
cho mỗi khách hàng
nếu thời gian % datum.customer.rate == 0
gửiMsg()

Ưu điểm của việc này là không cần bộ nhớ được lưu trữ nhất quán - bạn chỉ cần kiểm tra tại mỗi đơn vị thời gian xem bạn có nên gửi tin nhắn hay không. Điều này cũng có thể xử lý việc không có mặt thời gian == 0 Tin nhắn đã gửi - chỉ lưu trữ tốc độ modulo thời gian mà tin nhắn ban đầu được gửi và thay thế điều kiện bằng nếu thời gian % mốc .customer.rate == data.customer.firstMsgTimeMod.

Nhược điểm của phương pháp này là nó phụ thuộc hoàn toàn vào việc được gọi với tốc độ 1 mili giây. Nếu một quá trình khác trên CPU gây ra sự chậm trễ và nó bỏ lỡ một chu kỳ, bạn có thể bỏ lỡ việc gửi toàn bộ tin nhắn (thay vì gửi nó sau).

Tùy chọn 2: Duy trì danh sách các bộ dữ liệu trong đó mỗi mục nhập thể hiện một nhiệm vụ cần hoàn thành trong vòng một phần nghìn giây đó. Tạo danh sách của bạn ít nhất bằng tốc độ tối đa chia cho đơn vị thời gian (nếu tốc độ tối đa của bạn là 50 mili giây và bạn muốn tính bằng mili giây thì danh sách của bạn phải dài ít nhất 50). Khi bạn bắt đầu chương trình, tin nhắn đầu tiên được đặt sẽ được gửi đến hàng đợi. Sau đó, mỗi lần bạn gửi tin nhắn, hãy cập nhật tin nhắn trong danh sách đó vào lần gửi tiếp theo.

func buildList(&list)
cho mỗi mốc thời gian
cho mỗi khách hàng
nếu list.size < mốc.customer.rate
list.resize(datum.customer.rate+1)
list[customer.rate].push_back(tuple(datum.name, customer.name))

func callEachMs(&list)
cho mỗi (datum.name, customer.name) trong danh sách[0]
gửiMsg()
list[customer.rate].push_back((datum.name, customer.name))
list.pop_front()
list.push_back(danh sách trống)

Điều này có ưu điểm là tránh được nhiều tính toán mô đun không cần thiết theo yêu cầu của phương án 1. Tuy nhiên, điều này đi kèm với chi phí sử dụng bộ nhớ tăng lên. Việc triển khai này cũng sẽ không hiệu quả nếu các tin nhắn khác nhau của bạn có tỷ lệ rất khác nhau (mặc dù bạn có thể sửa đổi nó để xử lý các thuật toán có tỷ lệ dài hơn hiệu quả hơn). Và nó vẫn phải được gọi mỗi mili giây.

Cuối cùng, bạn phải xem xét cấu trúc dữ liệu bạn sử dụng thật cẩn thận, vì điều này sẽ có tác động rất lớn đến hiệu quả của nó. Vì bạn đang bật lên từ phía trước và chèn từ phía sau vào mỗi lần lặp và kích thước của danh sách là cố định nên bạn có thể muốn triển khai một đệm tròn. để tránh sự dịch chuyển giá trị không cần thiết. Đối với danh sách các bộ dữ liệu, vì chúng sẽ chỉ được lặp đi lặp lại (không cần truy cập ngẫu nhiên) và được thêm vào thường xuyên, nên danh sách liên kết đơn có lẽ là giải pháp tốt nhất của bạn.

.

Rõ ràng là có nhiều cách hơn để bạn có thể thực hiện việc này nhưng hy vọng những ý tưởng này sẽ giúp bạn bắt đầu. Ngoài ra, hãy nhớ rằng bản chất của hệ thống bạn đang chạy có thể có tác động lớn đến việc phương pháp nào hoạt động tốt hơn hoặc liệu bạn có muốn làm điều gì đó hoàn toàn khác hay không. Ví dụ: cả hai phương pháp đều yêu cầu chúng có thể được gọi một cách đáng tin cậy ở một tỷ lệ cụ thể. Tôi cũng không mô tả cách triển khai song song hóa, đây có thể là lựa chọn tốt nhất nếu ứng dụng của bạn hỗ trợ chúng.

Về thuật toán - lên lịch gửi tin nhắn đến người tiêu dùng ở các mức giá khác nhau, 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/50698807/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress