'da özel bir çok işlem kuyruğu gerçekleştirme Düzey 0'daki A, B, C, D, E, F düğümlerini içeren ters çevrilmiş bir ikili ağacı hayal edin. Düğüm G, H, I düzey 1, düğüm 2 Düzey 2, 3. seviyede ve düğümü K'dırPython
Seviye 1: G = işlev (A, B), H = işlev (C, D), J = işlev (E, F)
Seviye 2: J = işlev (G, H)
Seviye 3: K = func (J, I).
Düzey 0'daki her düğüm çifti sırayla işlenmelidir, 1. Seviyedeki her düğüm çifti herhangi bir sıraya göre işlenebilir, ancak sonuç sonraki seviyenin gösterildiği gibi işlenmeli ve sona erene kadar devam etmelidir Nihai sonuçla birlikte, K.
Asıl sorun, bir dizi katı maddenin birbirine kaynaştırıldığı bir hesaplama geometrisi problemidir. A, B'ye bitişik olan B'ye bitişiktir ve bu şekilde devam eder. Elde edilen A ve B (G) sigortası, C ve D (H) 'nin kaynağına bitişiktir. Elde edilen J ve I (K) sigortası son sonuçtur. Böylece, bitişik olmadıkları için G ve ben'i kaynaşamazsınız. Bir seviyedeki düğüm sayısı 2'nin gücü değilse, bir seviye ileride işlenmesi gereken sarkan bir varlıkla sonuçlanırsınız.
Sigorta işlemi hesaplama açısından pahalıdır ve bellek yoğun ama çok paralel olduğundan, Python çoklu işlem paketini ve bir sıra formunu kullanmak isterim. G = func (A, B) hesaplandıktan sonra, sonraki J = func (G, H) hesaplaması için G sonucunu sıraya itmek istiyorum. Sıra boş olduğunda, son sonuç son sonuçtur. Unutmayın ki mp.queue, FIFO sonucunu doğurmayacaktır çünkü I = func (E, F), H = func (C, D) 'dan önce bitirebilir. Birkaç (kötü) çözüm buldum. ama eminim ki kavrayışımın ötesinde zarif bir çözüm var. Öneriler?
Neden level = 0'ın sırayla işlenmesi gerekiyor, ancak level = 1 herhangi bir sırada işlenebilir? Bilinen iki yaprak seçmek ve bunları tek bir düğüme bağlamak yeterli değil mi? – Stephen
Düğümlerin sırayla işlenmesi gerektiğini söylerken hatalıyım. Komşuluk açısından işlenmelidirler. A, B'ye bitişik C'ye eşittir ve böylece 0 seviyesi için devam eder. Func (A, B) veya func (B, C) yapabilir, ancak func (A, C) yapamazsınız. Aynı şekilde, 1. seviyede, G, H'nin bitişiğindedir. I, func (G, H) veya func (H, I) yapabilir, ancak func (G, I) yapamazsınız. (Şekiller) def Isıtıcının: – user90855