ต่อไปนี้จะช่วยให้อัลกอริทึมที่ใช้ประมาณเวลาและ2 n / 2พื้นที่2n2n/2
อันดับแรกให้ดูที่ปัญหาของการเรียงลำดับจำนวนเงินของรายการย่อยทั้งหมดของรายการn
พิจารณา subproblem นี้: คุณมีสองรายการที่เรียงลำดับของความยาวและคุณต้องการจะสร้างรายการที่เรียงลำดับของผลบวกจากจำนวนของตัวเลขในรายการ คุณต้องการทำเช่นนี้ในเวลาO ( m 2 ) (ขนาดเอาต์พุต) แต่เป็นพื้นที่ย่อย เราสามารถบรรลุO ( เมตร)พื้นที่ เราเก็บลำดับความสำคัญและดึงผลรวมออกจากลำดับความสำคัญเพื่อเพิ่มลำดับmO(m2)O(m)
ให้รายการและb 1 … b mเรียงลำดับตามลำดับที่เพิ่มขึ้น เราใช้เวลาเมตรเงินก้อนฉัน + ข1 , ฉัน= 1 ... ม.และใส่ไว้ในคิวลำดับความสำคัญa1…amb1…bmmai+b1i=1…m
ตอนนี้เมื่อเราดึงส่วนที่เหลือรวมที่เล็กที่สุดฉัน + ขญออกจากคิวลำดับความสำคัญถ้าเจ< เมตรเราแล้วใส่ผลรวมฉัน + ขJ + 1ลงในคิวลำดับความสำคัญ พื้นที่ถูกครอบงำโดยคิวลำดับความสำคัญซึ่งมักจะมีจำนวนไม่เกินm และเวลาคือO ( m 2 log m )เนื่องจากเราใช้O ( log m )สำหรับการดำเนินการลำดับความสำคัญแต่ละครั้ง นี่แสดงให้เห็นว่าเราสามารถทำปัญหาย่อยในO ( m 2 ได้ai+bjj<mai+bj+1mO(m2logm)O(logm)เวลาและ O ( เมตร)พื้นที่O(m2logm)O(m)
ตอนนี้ในการจัดเรียงผลรวมของส่วนย่อยทั้งหมดของหมายเลขเราเพียงแค่ใช้ subroutine นี้ที่รายการฉันคือชุดของผลรวมของส่วนย่อยในช่วงครึ่งแรกของรายการและรายการขฉันคือชุดของผลรวมของส่วนย่อย ของครึ่งหลังของรายการ เราสามารถค้นหารายการเหล่านี้ซ้ำด้วยอัลกอริทึมเดียวกันnaibi
ตอนนี้เราจะพิจารณาปัญหาเดิม ให้เป็นชุดของพิกัดซึ่งเป็น0และS 1เป็นชุดของพิกัดที่1 จากนั้น
∏ i ∈ S 0 p ( v i = 0 ) ∏ i ∈ S 1 p ( v i = 1 )S00S11
∏i∈S0p(vi=0)∏i∈S1p(vi=1)==∏1≤i≤np(vi=0)∏i∈S1p(vi=1)p(vi=0)∏1≤i≤np(vi=0)exp(∑i∈S1logp(vi=1)p(vi=0)).
เรียงลำดับตัวเลขเหล่านี้เป็นเช่นเดียวกับการเรียงลำดับตัวเลขดังนั้นเราจึงมีการลดปัญหาที่จะเรียงลำดับผลรวมของส่วนย่อยของnรายการ∑i∈S1logp(vi=1)−logp(vi=0)n