วิธีวนซ้ำเวกเตอร์ตามลำดับความน่าจะเป็นในพื้นที่ขนาดเล็ก


12

พิจารณามิติเวกเตอร์โวลต์ที่วีฉัน{ 0 , 1 } สำหรับฉันแต่ละคนเรารู้ว่าp i = P ( v i = 1 )และให้เราถือว่าv iเป็นอิสระ การใช้ความน่าจะเป็นเหล่านี้มีวิธีที่มีประสิทธิภาพในการวนซ้ำเวกเตอร์ไบนารีnมิติตามลำดับจากที่เป็นไปได้น้อยที่สุด (ด้วยตัวเลือกโดยพลการสำหรับความสัมพันธ์) โดยใช้ช่องว่างย่อยในขนาดเอาต์พุตหรือไม่ nvvi{0,1}ipi=P(vi=1)vin

ใช้ตัวอย่างเช่น } เวกเตอร์ได้มากที่สุดคือ( 1 , 0 , 1 )และอย่างน้อยน่าเป็น{ 0 , 1 , 0 } p={0.8,0.3,0.6}(1,0,1){0,1,0}

สำหรับขนาดเล็กมากเราสามารถติดป้ายเวกเตอร์2 nแต่ละตัวด้วยความน่าจะเป็นและเรียงลำดับได้ง่าย แต่แน่นอนว่านี่จะยังไม่ใช้พื้นที่ sublinearn2n

แตกต่างอย่างใกล้ชิดของคำถามนี้ก็ถามว่าก่อนหน้านี้ที่/cs/24123/how-to-iterate-over-vectors-in-order-of-probability


มีเหตุผลใดที่คุณไม่ได้ถามคำถามติดตามที่นั่นด้วยหรือไม่ เป็นปัญหาหลักที่นี่หนึ่งในการทำเช่นนี้ในพื้นที่ sublinear?
Suresh Venkat

@SureshVenkat ใช่ปัญหาทั้งหมดเกี่ยวกับพื้นที่ sublinear (ในขนาดเอาต์พุต) ฉันถามที่นี่เพราะฉันคิดว่าคำถามอาจจะยากมาก
Lembik

การแก้ปัญหานี้ในพื้นที่และเวลาของดูเหมือนว่าต้องใช้เทคนิคที่คล้ายกับ SUBSET-SUM ดังนั้นจึงไม่น่าจะมีทางออกที่รวดเร็ว poly(n)
Geoffrey Irving

@GeoffreyIrving คุณคิดว่าสัญชาตญาณนี้สามารถทำให้เป็นทางการมากขึ้นได้หรือไม่?
Lembik

คำตอบ:


9

ต่อไปนี้จะช่วยให้อัลกอริทึมที่ใช้ประมาณเวลาและ2 n / 2พื้นที่2n2n/2

อันดับแรกให้ดูที่ปัญหาของการเรียงลำดับจำนวนเงินของรายการย่อยทั้งหมดของรายการn

พิจารณา subproblem นี้: คุณมีสองรายการที่เรียงลำดับของความยาวและคุณต้องการจะสร้างรายการที่เรียงลำดับของผลบวกจากจำนวนของตัวเลขในรายการ คุณต้องการทำเช่นนี้ในเวลาO ( m 2 ) (ขนาดเอาต์พุต) แต่เป็นพื้นที่ย่อย เราสามารถบรรลุO ( เมตร)พื้นที่ เราเก็บลำดับความสำคัญและดึงผลรวมออกจากลำดับความสำคัญเพื่อเพิ่มลำดับmO(m2)O(m)

ให้รายการและb 1b mเรียงลำดับตามลำดับที่เพิ่มขึ้น เราใช้เวลาเมตรเงินก้อนฉัน + 1 , ฉัน= 1 ... ม.และใส่ไว้ในคิวลำดับความสำคัญa1amb1bmmai+b1i=1m

ตอนนี้เมื่อเราดึงส่วนที่เหลือรวมที่เล็กที่สุดฉัน + ออกจากคิวลำดับความสำคัญถ้าเจ< เมตรเราแล้วใส่ผลรวมฉัน + 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

iS0p(vi=0)iS1p(vi=1)=1inp(vi=0)iS1p(vi=1)p(vi=0)=1inp(vi=0)exp(iS1logp(vi=1)p(vi=0)).

เรียงลำดับตัวเลขเหล่านี้เป็นเช่นเดียวกับการเรียงลำดับตัวเลขดังนั้นเราจึงมีการลดปัญหาที่จะเรียงลำดับผลรวมของส่วนย่อยของnรายการiS1logp(vi=1)logp(vi=0)n


มีการลดลงอย่างน่าเชื่อถือซึ่งจะทำให้การแก้ปัญหาเวลา / พื้นที่โพลีไม่น่าเชื่อถือ?
Lembik

คุณอาจจะไม่ได้รับโซลูชันที่ใช้เวลาน้อยกว่าเนื่องจากนั่นคือขนาดของเอาต์พุต (และโซลูชันของฉันใช้เวลาn2nเวลา) แม้ว่าฉันจะไม่มีขีด จำกัด ด้านล่างที่ดีสำหรับพื้นที่ n2n
Peter Shor

ขอบคุณ. ฉันไม่ได้หมายถึงเวลาโพลีแน่นอน แต่ค่อนข้างเชิงเส้นบางอย่างในขนาดเอาต์พุตและพื้นที่โพลี
Lembik

4

O(n)

  1. x{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nxp(x)>p(x)r(x)x
  2. kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. k02n1kxr(x)=k

(เราควรดูแลความสัมพันธ์ที่เป็นไปได้ แต่สิ่งนี้ไม่ยาก)


ขอบคุณ. นั่นคือค่อนข้างช้า แต่ขั้นตอนวิธี :)
Lembik

0

แก้ไข: คำตอบนี้ไม่ถูกต้อง ดูความคิดเห็นเพื่อดูรายละเอียด ~ gandaliter

O(2n)O(n)

  1. (i,pi)|0.5pi|

  2. vvi1pi>0.50vviv

  3. เรียกใช้ฟังก์ชันนี้ซ้ำในรายการที่เรียงลำดับและเวกเตอร์เปล่า

010.5

O(2n)O(n)nO(2n)O(n)O(2n)ขั้นตอนเวลา ดังนั้นอัลกอริทึมนี้จึงมีความซับซ้อนของตัวพิมพ์ใหญ่ที่สุด


คำตอบอื่น ๆ แตกต่างกันอย่างแน่นอนเนื่องจากต้องใช้ลำดับความสำคัญและด้วยเหตุนี้จึงใช้ Θ(2n)

ขอบคุณ เห็นได้ชัดว่าฉันไม่ได้อ่านอย่างละเอียดพอ! ฉันแก้ไขคำตอบของฉันแล้ว
gandaliter

3
คุณแน่ใจหรือว่าโซลูชันนี้ใช้งานได้? ฉันไม่สามารถหารายละเอียดของการเรียกซ้ำสองครั้ง (pseudocode ช่วยได้!) แต่ฉันไม่เห็นว่ามันจะทำงานได้อย่างไร โดยเฉพาะอย่างยิ่งการแก้ปัญหาของคุณน่าจะเป็นท้องถิ่น: ถ้ามันตั้งก็กำลังจะเอาท์พุท2 n - 1คำตอบกับโวลต์1 = 1 แต่คำตอบที่แท้จริงไม่ควรมองด้วยวิธีนี้ ในความเป็นจริงเท่าที่ฉันเข้าใจโซลูชันของคุณดูเหมือนว่าจะล้มเหลวแม้ในกรณีที่ง่ายที่สุดที่ทุกคนv1=12n1v1=1pi=0.5

คุณพูดถูกมันไม่ได้ผล ขออภัย!
gandaliter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.