Hãy tưởng tượng cây nhị phân ngược với các nút A, B, C, D, E, F trên cấp 0. nút G, H, I ở mức 1, nút J ở mức 2, và nút K vào mức độ 3.Thực hiện một loại hàng đợi xử lý đặc biệt trong Python
Level 1: G = func (A, B), H = func (C, D), I = func (E, F)
Level 2: J = func (G, H)
Cấp 3: K = func (J, I). Mỗi cặp nút trên Mức 0 phải được xử lý theo thứ tự, Mỗi cặp nút trên Cấp 1 có thể được xử lý theo bất kỳ thứ tự nào nhưng kết quả phải ở cấp độ tiếp theo phải được xử lý như được hiển thị, v.v. cho đến khi chúng tôi kết thúc với kết quả cuối cùng, K.
Vấn đề thực tế là một vấn đề hình học tính toán trong đó một chuỗi các chất rắn được hợp nhất với nhau. A tiếp giáp với B tiếp giáp với C, v.v. Cầu chì kết quả của A và B (G) tiếp giáp với cầu chì của C và D (H). Cầu chì kết quả của J và I (K) là kết quả cuối cùng. Vì vậy bạn không thể hợp nhất G và tôi vì chúng không liền kề nhau. Nếu số lượng các nút trên một mức không phải là một sức mạnh của 2, bạn kết thúc với một thực thể lủng lẳng phải được xử lý thêm một cấp.
Vì quá trình cầu chì có tính toán tốn kém và bộ nhớ chuyên sâu nhưng rất song song, tôi muốn sử dụng gói đa xử lý Python và một số hình thức xếp hàng. Sau khi tính toán G = func (A, B), tôi muốn đẩy kết quả G vào hàng đợi cho phép tính J = func (G, H) tiếp theo. Khi hàng đợi trống, kết quả cuối cùng là kết quả cuối cùng. Hãy nhớ rằng mp.queue sẽ không nhất thiết tạo ra kết quả FIFO, vì I = func (E, F) có thể kết thúc trước H = func (C, D)
Tôi đã đưa ra một vài giải pháp nhưng tôi chắc chắn có một giải pháp thanh lịch ngay ngoài tầm tay của tôi. Gợi ý?
Tại sao mức = 0 phải được xử lý theo thứ tự, nhưng mức = 1 có thể được xử lý theo bất kỳ thứ tự nào? Nó không đủ để chọn hai lá đã biết và kết hợp chúng thành một nút duy nhất? – Stephen
Tôi không chính xác khi nói rằng các nút phải được xử lý theo thứ tự. Chúng phải được xử lý theo phương thức kề nhau. A là liền kề với B là tiếp giáp với C và như vậy cho cấp độ 0. Bạn có thể làm func (A, B) hoặc func (B, C) nhưng không func (A, C). Tương tự như vậy trên mức 1, G tiếp giáp với H tiếp giáp với I. Bạn có thể làm func (G, H) hoặc func (H, I) nhưng không func (G, I). – user90855