การเพิ่มประสิทธิภาพอัตโนมัติของการคูณเวกเตอร์เมทริกซ์ 0-1


22

คำถาม:

มีขั้นตอนหรือทฤษฎีที่สร้างขึ้นสำหรับการสร้างรหัสที่ใช้การคูณเมทริกซ์เวกเตอร์อย่างมีประสิทธิภาพหรือไม่เมื่อเมทริกซ์นั้นหนาแน่นและเต็มไปด้วยเลขศูนย์และอันเดียว ตามหลักการแล้วรหัสที่ได้รับการปรับปรุงจะใช้ประโยชน์จากข้อมูลที่คำนวณก่อนหน้านี้อย่างเป็นระบบเพื่อลดงานซ้ำซ้อน

ในคำอื่น ๆ ฉันมีเมทริกซ์ และผมต้องการที่จะทำบาง precomputation ขึ้นอยู่กับที่จะทำให้การคำนวณเป็นที่มีประสิทธิภาพที่สุดเมื่อผมมารู้ทีหลังได้รับเวกเตอร์โวลต์MMMvv

Mเป็นเมทริกซ์ไบนารีหนาแน่นที่เป็นรูปสี่เหลี่ยมผืนผ้าที่รู้จักกันใน "เวลารวบรวม" ในขณะที่เป็นเวกเตอร์จริงที่ไม่รู้จักซึ่งรู้จักกันใน "เวลารัน" เท่านั้นv

ตัวอย่างที่ 1: (หน้าต่างบานเลื่อน)

ให้ฉันใช้ตัวอย่างเล็ก ๆ ง่ายๆเพื่ออธิบายประเด็นของฉัน พิจารณาเมทริกซ์ เผื่อว่าเราใช้เมทริกซ์นี้เพื่อเวกเตอร์จะได้รับW = Mv จากนั้นรายการของผลลัพธ์คือ \ start {align} w_1 & = v_1 + v_2 + v_3 + v_5 \\ w_2 & = v_2 + v_3 + v_4 + v_5 + v_6 \\ w_3 + = v_3 + v_3 + v_3 + v_3 + v_5 + v_5 + v_5 + v_5 + v_6 + v_7 \\ w_4 & = v_4 + v_5 + v_6 + v_7 + v_8 \ end {align}

M=[11111111111111111111].
vw=Mv
w1=v1+v2+v3+v4+v5w2=v2+v3+v4+v5+v6w3=v3+v4+v5+v6+v7w4=v4+v5+v6+v7+v8

การคูณเมทริกซ์ - เวกเตอร์มาตรฐานจะคำนวณด้วยวิธีนี้ อย่างไรก็ตามงานนี้จำนวนมากซ้ำซ้อน เราสามารถทำการคำนวณเมทริกซ์เดียวกันโดยใช้ต้นทุนที่น้อยลงโดยติดตาม "ผลรวมสะสม " และเพิ่ม / ลบเพื่อให้ได้ตัวเลขถัดไป:

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3

ตัวอย่างที่ 2: (โครงสร้างแบบลำดับชั้น)

ในตัวอย่างก่อนหน้านี้เราสามารถติดตามผลรวมสะสม อย่างไรก็ตามโดยทั่วไปแล้วจะต้องสร้างและเก็บต้นไม้ของผลลัพธ์ระดับกลาง ตัวอย่างเช่นพิจารณา

M=[111111111111111111111111]
หนึ่งสามารถคำนวณw=Mvอย่างมีประสิทธิภาพโดยใช้ต้นไม้ของผลกลาง:
  1. Compute w5และw7และเพิ่มพวกเขาได้รับw_3w3
  2. Compute w4และw6และเพิ่มพวกเขาได้รับw_2w2
  3. เพิ่มและเพื่อรับw 3 w 1w2w3w1

โครงสร้างในตัวอย่างด้านบนนั้นมองเห็นได้ง่าย แต่สำหรับเมทริกซ์จริงที่ฉันสนใจโครงสร้างนั้นไม่ง่ายนัก

ตัวอย่างที่ 3: (อันดับต่ำ)

เพื่อกำจัดความสับสนบางอย่างการฝึกอบรมโดยทั่วไปจะไม่กระจัดกระจาย โดยเฉพาะวิธีการแก้ปัญหานี้จะต้องสามารถหาวิธีที่มีประสิทธิภาพในการใช้เมทริกซ์ที่มีบล็อกขนาดใหญ่เต็มไปด้วย ตัวอย่างเช่นพิจารณา

M=[111111111111111111111111].

เมทริกซ์นี้สามารถจำแนกได้เป็นความแตกต่างของเมทริกซ์อันดับ 1,

M=[111111111111111111111111111111][111111]

ดังนั้นการกระทำของมันบนเวกเตอร์สามารถคำนวณได้อย่างมีประสิทธิภาพโดย, w 1w:=Mv

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

แรงจูงใจ:

ฉันกำลังทำงานกับวิธีเชิงตัวเลขสำหรับการประมวลผลภาพบางส่วนและมีเมทริกซ์หนาแน่นขนาดใหญ่หลายแห่งที่มีโครงสร้างที่แตกต่างกันซึ่งได้รับการแก้ไขตลอดเวลา หลังจากนั้นเมทริกซ์เหล่านี้จะต้องนำไปใช้กับเวกเตอร์ที่ไม่รู้จักจำนวนมากซึ่งจะขึ้นอยู่กับอินพุตของผู้ใช้ ตอนนี้ฉันกำลังใช้ดินสอและกระดาษเพื่อหาโค้ดที่มีประสิทธิภาพแบบต่อเมทริกซ์ แต่ฉันสงสัยว่ากระบวนการนี้อาจเป็นไปโดยอัตโนมัติหรือไม่01vi

แก้ไข: (คำลงท้าย)

คำตอบทั้งหมดที่นี่จนถึงขณะนี้ (ณ วันที่ 9/5/58) มีความน่าสนใจ แต่ไม่มีใครตอบคำถามได้อย่างน่าพอใจอย่างที่ฉันหวังไว้ อาจเป็นไปได้ว่านี่เป็นคำถามวิจัยอย่างหนักและไม่มีใครรู้คำตอบที่ดี

ตั้งแต่เวลาหมดลงฉันจะมอบรางวัลให้กับคำตอบของ EvilJSเนื่องจากมันตอบคำถามที่ถูกต้อง อย่างไรก็ตามฉันต้องการคำตอบที่มีคำอธิบายที่ชัดเจนและมีรายละเอียดมากขึ้น

คำตอบของ tranisstorทำให้การเชื่อมต่อระหว่างคำถามนี้กับปัญหาการคูณเมทริกซ์ - เวกเตอร์แบบบูลออนไลน์ (OMv) ของออนไลน์ แต่การเชื่อมต่อไม่ตรงกับที่คำถามนี้ถาม โดยเฉพาะอย่างยิ่งข้อสันนิษฐานต่อไปนี้ไม่เหมาะกับ (ฉันเน้นตัวหนา)

ทีนี้สมมติว่าสำหรับทั้งหมดและเมทริกซ์nn0n×nMเรารู้อัลกอริทึม , สำหรับเวกเตอร์ทั้งหมดคำนวณในเวลา subquadratic อย่างแท้จริงเช่นในเวลาสำหรับบาง0An,MvMvO(n2ε)ε>0

ไม่ว่าจะมีอัลกอริทึม subquadratic สำหรับการฝึกอบรมทั้งหมดหรือไม่นั้นเป็นคำถามสำหรับการค้นหาอัลกอริทึมสำหรับเมทริกซ์เฉพาะที่เร็วที่สุด เมทริกซ์ 0-1 ส่วนใหญ่มีลักษณะเป็นแบบสุ่มและ (ถ้าฉันเดา) อาจไม่มีอัลกอริทึมย่อย อย่างไรก็ตามความจริงที่ว่ามีเมทริกซ์ไม่ดีจริง ๆ ก็ไม่ได้ป้องกันฉันจากการหาอัลกอริทึมที่รวดเร็วในเมทริกซ์ที่ดีตัวอย่างเช่นเมทริกซ์ "หน้าต่างบานเลื่อน"

ตอบ vzn ของคำตอบแรก , คำตอบที่สองเป็นที่น่าสนใจ (และในความคิดของฉันไม่สมควรได้รับ downvotes จำนวนมาก) แต่พวกเขาไม่ได้นำไปใช้กับคำถามสำหรับเหตุผลที่กล่าวไว้ในการแสดงความคิดเห็นที่มี


1
หากเมทริกซ์ของคุณอยู่ในรูปแบบนี้TDMAนี่คือเมทริกซ์แบนด์, อัลกอริทึมโทมัส ยังไม่ 0-1 แต่ควรใช้คุณลักษณะนี้
Evil

@EvilJS เมทริกซ์เพิ่งเกิดขึ้นเพื่อเป็นสีสำหรับตัวอย่างเฉพาะ โดยทั่วไปมันจะไม่ถูกแบนด์ ฉันได้เพิ่มอีกตัวอย่างที่ไม่มีแถบ
Nick Alger

คุณมีเมทริกซ์คงที่ N x M จำนวนมากซึ่งเป็นไบนารีเวกเตอร์จริงและต้องการคำนวณเส้นทางการดำเนินการที่เหมาะสมที่สุดในระหว่างขั้นตอนการประมวลผลล่วงหน้าต่ออินสแตนซ์ใช่หรือไม่ ผลลัพธ์ของการดำเนินการดังกล่าวเป็นรหัสที่มีการดำเนินการ hardcoded ต่อเมทริกซ์และคุณต้องการวิธีการทำเช่นนั้น? ตามตัวอย่างผมหมายถึงต่อเมทริกซ์ เพียงตรวจสอบ
Evil

@EvilJS คำถามนี้เกี่ยวกับสถานการณ์ที่มีหนึ่งเมทริกซ์ไบนารีรู้จักซึ่งจะนำไปใช้กับเวกเตอร์จริงที่ไม่รู้จักจำนวนมากในเวลาต่อมา ขึ้นอยู่กับเท่านั้นเราต้องการคำนวณรหัสที่จะใช้ให้มีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้ดังนั้นในภายหลังเมื่อเราได้รับเราสามารถคำนวณโดยเร็วที่สุด ในแอปพลิเคชันเฉพาะที่กระตุ้นคำถามนี้ฉันมีการฝึกอบรมไบนารีจำนวนหนึ่งเช่นนี้ (12 จริง) ที่ได้รับการแก้ไขตลอดเวลาในขณะที่เวกเตอร์ไม่แน่นอนและขึ้นอยู่กับข้อมูลจากผู้ใช้ของโปรแกรม MviMMviMvivi
Nick Alger

1
เหนือสนามของสององค์ประกอบปัญหาของการคำนวณวงจร XOR-gate ขั้นต่ำที่จำลองการแปลงเชิงเส้นที่กำหนดคือ NP-hard ดูcstheory.stackexchange.com/a/32272/225
Ryan Williams

คำตอบ:


5

ถ้าเป็นไปได้ลองใช้ประโยชน์จากธรรมชาติของเมทริกซ์ tridiagonal สี
มิฉะนั้นหากเมทริกซ์มีค่าคงที่จำนวนมาก (ซึ่งแน่นอนว่าเป็นเลขฐานสอง) คุณควรลองใช้อัลกอริทึม Mailman (โดย Edo Liberty, Steven W. Zucker ในรายงานทางเทคนิคของมหาวิทยาลัยเยล # 1402): ปรับให้เหมาะสมกับพจนานุกรม จำกัด
กำจัด Subexpression สามัญเป็นที่รู้จักในบางครั้งเช่นการคูณหลายค่าคงที่ แต่การลงไปที่ระดับเกตเป็นตัวเลือก - รูปแบบที่ใช้ที่นี่สามารถใช้แยกกันเป็นวิธีแก้ปัญหาหรือผสานกับวิธีอื่น ๆ กระดาษสำหรับ "การปรับปรุงการกำจัดนิพจน์ทั่วไป อัลกอริทึมที่มีวิธีการคำนวณแบบเลื่อนระดับประตูใหม่ "โดย Ning Wu, Xiaoqiang Zhang, Yunfei Ye และ Lidong Lan ตีพิมพ์ใน" บทความของการประชุม World Congress on Engineering และวิทยาศาสตร์คอมพิวเตอร์ 2013 Vol II WCECS 2013, 23-25 ​​ตุลาคม, 2013, ซานฟรานซิสโกสหรัฐอเมริกา " ระดับประตู CSE

นอกจากนี้ยังมีวิธีการหยาบ แต่ทำงานเพื่อสร้างเมทริกซ์เชิงสัญลักษณ์ที่มีค่าคงที่เวกเตอร์ที่มีตัวแปรและเสียบเข้ากับ Static Single Assingment (SSA) จากคอมไพเลอร์ซึ่งกระบวนการอัตโนมัติของการเขียนเมทริกซ์ด้วยมือ

ต้นแบบอัลกอริทึมใหม่
สิ่งที่คุณทำกับผลรวม ให้การดำเนินงาน 10 ครั้งและด้วยความคิดเริ่มต้นของฉันที่จะใช้ Thomas มันเทียบเท่า สำหรับตอนนี้ฉันยังคงเขียนและทดสอบอัลกอริธึมใหม่และ runtimes ก็น่ารังเกียจแต่ผลการทดสอบครั้งแรกทำให้ฉันมีคำตอบที่น่าประหลาดใจ:

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3


tmp1=v2+v3+v4+v5w1=v1+tmp1w2=tmp1+v6w3=w2+v7v2w4=w3+v8v3

ซึ่งให้การดำเนินการ 9 รายการกำหนดเป็น + หรือ - คือ 1 และ = คือ 0

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

สิ่งนี้ให้การทำงาน 7 ครั้งผลลัพธ์ของอัลกอริทึมของฉันให้: ซึ่งให้การทำงาน 6 ครั้ง ตอนนี้ฉันสามารถบอกได้ว่าฉันกำลังใช้ Hamming distance & & | การใช้งานระดับบิตการนับประเพณีและการทำสิ่งที่คล้าย Cocke – Younger – Kasami (CYK) - "อัลกอริทึมการแยกวิเคราะห์สำหรับไวยากรณ์ที่ไม่มีบริบทได้รับการตั้งชื่อตามนักประดิษฐ์ John Cocke, Daniel Younger และ Tadao Kasami การเขียนโปรแกรม." - จาก Wikipedia นี่เป็นเทคนิคเดียวกับที่ฉันใช้ในการสร้างกลุ่มของตัวแปร

tม.p1=โวลต์1+โวลต์2+โวลต์3+โวลต์4เสื้อม.พี2=โวลต์5+โวลต์6W1=เสื้อม.พี1+เสื้อม.พี2W2=W1W3=W2-เสื้อม.พี2W4=W3W5=W4.


(re rev5) โปรดให้การอ้างอิงกับ "วิธีเอเวอร์กรีน" นอกจากนี้ SSA คืออะไร อัลกอริทึมแบบไดนามิก CYK?
vzn

ฉันได้รับรางวัลสำหรับคำตอบนี้และอธิบายว่าทำไมในการแก้ไขคำถามเดิมของฉัน
Nick Alger

8

สิ่งนี้เกี่ยวข้องกับคำถามการวิจัยแบบเปิดซึ่งเป็นที่รู้จักกันในชื่อ "ปัญหาการคูณเมทริกซ์แบบเวกเตอร์บูลีนออนไลน์ (OMv)" ปัญหานี้อ่านได้ดังต่อไปนี้ (ดู [1]): เมื่อรับไบนารีเมทริกซ์และเวกเตอร์คอลัมน์ไบนารีเราต้องคำนวณก่อนที่มาถึงM n v 1 , , v n M v ฉันv ฉัน+ 1n×nMnโวลต์1,...,โวลต์nMโวลต์ผมโวลต์ผม+1

ขอให้สังเกตว่าปัญหาที่เกิดขึ้นจากคำถามนั้นค่อนข้างกว้างกว่านี้: มันอนุญาตให้เมทริกซ์และเวกเตอร์มูลค่าจริง สังเกตว่าปัญหาของเมทริกซ์และเวกเตอร์บูลีนคือ "ง่ายขึ้น" เนื่องจากเป็นกรณีพิเศษn × nm×nn×n

เห็นได้ชัดว่าอัลกอริทึมไร้เดียงสาสำหรับปัญหาออนไลน์บูลีเมทริกซ์เวกเตอร์คูณ (ซึ่งก็ใช้มาตรฐานเมทริกซ์เวกเตอร์ multipliction) ต้องใช้เวลา3) มีการคาดเดา (ดูเช่น [1]) ว่าสิ่งนี้ไม่สามารถทำได้เร็วกว่าอย่างแท้จริง (ในรายละเอียดเพิ่มเติมการคาดเดานี้มีดังต่อไปนี้: ไม่มีอัลกอริธึม subcubic อย่างแท้จริงซึ่งแก้ปัญหาการคูณเมทริกซ์ Boolean เมทริกซ์ - เวกเตอร์ออนไลน์นั่นคือไม่มีอัลกอริทึมที่มีเวลาทำงานสำหรับ )O ( n 3 ) O ( n 3 - ε ) ε > 0O(n3)O(n3)O(n3ε)ε>0

เป็นที่รู้จักกันว่าอัลกอริทึมวิลเลียมส์จะช่วยแก้ปัญหานี้ในเวลาn) ดูรายละเอียดเพิ่มเติม [2]O(n3/log2n)

มันจะเป็นความก้าวหน้าในพื้นที่ที่ต่ำกว่าเงื่อนไขถ้าใครสามารถพิสูจน์หรือพิสูจน์หักล้างการคาดการณ์ข้างต้น

[1] การรวมและเพิ่มความแข็งสำหรับปัญหาไดนามิกผ่านการคาดเดาการคูณเมทริกซ์ - เวกเตอร์ออนไลน์ โดย Henzinger, Krinninger, Nanongkai และ Saranurak
[ http://eprints.cs.univie.ac.at/4351/1/OMv_conjecture.pdf ]

[2] การคูณเมทริกซ์ - เวกเตอร์ในเวลากำลังสองย่อย: (จำเป็นต้องมีการประมวลผลล่วงหน้า) โดย Williams
[ http://dl.acm.org/citation.cfm?id=1283383.1283490 ]

ปรับปรุง

หนึ่งในคำถามในความคิดเห็นมีดังนี้: เรารู้ว่าในเวลารวบรวม เราไม่สามารถปรับอัลกอริทึมของเราให้เหมาะสมกับดังนั้นปัญหา OMv (การคาดเดา) จึงไม่สามารถนำมาใช้หรือไม่ เราจะเห็นว่านี่ไม่ใช่กรณีเว้นแต่ว่า OMv จะล้มเหลวเอ็มMM

แนวคิดการพิสูจน์นั้นง่าย: สมมติว่าเราสามารถให้อัลกอริทึมที่รวดเร็วสำหรับเมทริกซ์ทั้งหมดถึงขนาดบางขนาด (เช่นการแยกเคสที่เป็นไปได้ทั้งหมด) หลังจากขนาดที่แน่นอนนี้เราใช้การหารและพิชิต

นี่คือรายละเอียด:
แก้ไขบางซึ่ง (โดยไม่สูญเสียความสามารถทั่วไป) คือพลังของ 2 และใหญ่กว่า 2 ทีนี้สมมติว่าสำหรับและ matricesเรารู้ว่าอัลกอริทึม , ว่าสำหรับเวกเตอร์ทั้งหมดคำนวณในเวลา subquadratic อย่างแท้จริงเช่นในเวลาสำหรับบาง0 (โปรดสังเกตว่าสิ่งนี้อนุญาตให้อัลกอริทึมแต่ละรายการสำหรับแต่ละเมทริกซ์ได้ถึงขนาด ) n n 0 n × n M A n , M v M v O ( n 2 - ε ) ε > 0 n 0 × n 0n0Nnn0n×nMAn,MvMvO(n2ε)ε>0n0×n0

ตอนนี้เราจะแก้ปัญหา OMv ในเวลา subcubic อย่างแท้จริง:
ด้วยเมทริกซ์ไบนารีมีขนาดโดยที่สำหรับและเราใช้กลยุทธ์แบ่งและพิชิต เราแบ่งเป็นสี่ submatricesขนาด{k-1} หากเราจะใช้อัลกอริทึมมิฉะนั้นเราจะเรียกเก็บเงินอีกครั้ง (เนื่องจากเป็นจำนวนคงที่เราสามารถเลือกอัลกอริทึมที่ถูกต้องในเวลาคงที่)Mn×nn=2kkn>n0MM1,M2,M3,M42k1×2k12k1n0A2k1,Min0

โปรดสังเกตว่าเราจะต้องมีขั้นตอนการเรียกซ้ำมากที่สุด นอกจากนี้สำหรับเวกเตอร์เราจะคำนวณดังนั้นในการประมวลผลทั้งหมดคูณเมทริกซ์เวกเตอร์ที่เราจะต้องใช้เวลาในการคำนวณรวมของn)O(logn)nv1,,vnnO(n3εlogn)

เป็นที่ทราบกันดีว่าลอการิทึมเติบโตช้ากว่าพหุนามใด ๆ (โดยเฉพาะช้ากว่ารากใด ๆ ) แก้ไขด้วยเราจะเห็นว่าการคำนวณทั้งหมดของเรากำลังทำงานในเวลา subcubic อย่างแท้จริง (โดยเฉพาะในเวลา ) ดังนั้นการคาดคะเน OMv จะผิดε~>0ε~<εO(n3ε~)

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

สรุป: หากคุณสามารถใช้ความแตกต่างของตัวพิมพ์เล็กบนเมทริกซ์อินพุตเพื่อรับอัลกอริธึมที่รวดเร็วคุณสามารถปรับปรุงการคาดเดา OMv ได้


ดังที่ผู้เขียนและ vzn ชี้ว่านี่ไม่ใช่กรณีที่เวกเตอร์ไม่ใช่ไบนารีเมทริกซ์ไม่จำเป็นต้องมี N x N และผู้เขียนต้องการทำการคำนวณล่วงหน้าและไม่จำเป็นต้องมีการประมวลผลออนไลน์ จากการคาดเดานั้นไม่เพียงพอ เอกสารทั้งสองนั้นไม่เกี่ยวข้องกับคำถาม กรณีนี้คือการคำนวณเมทริกซ์คงที่ล่วงหน้าเพื่อให้มีจำนวนการดำเนินการน้อยที่สุด จะมีวิธีการที่เป็นไปได้ที่แตกต่างกันสำหรับกรณีเต็มรูปแบบแถบสีสมมาตร
Evil

@EvilJS: ถ้าคุณอนุญาตให้เมทริกซ์ M x N และเวกเตอร์ที่มีมูลค่าจริง ๆ ปัญหาก็จะยากขึ้นกว่าที่ฉันให้ไว้ในคำตอบ (เช่นการคูณเมทริกซ์ Boolean ออนไลน์กับเมทริกซ์เวกเตอร์จะเป็นกรณีพิเศษ) หากคุณสามารถแก้ปัญหาทั่วไปได้เร็วกว่า O (n ^ 3) อย่างแท้จริงคุณจะต้องปรับปรุงการคาดเดา (ซึ่งจะเป็นข่าวใหญ่!) ยิ่งไปกว่านั้นผู้เขียนกล่าวว่าในความคิดเห็นสำหรับคำถามที่เวกเตอร์ไม่รู้จักในตอนแรก หากคุณรู้จักเวกเตอร์ทั้งหมดล่วงหน้าคุณก็สามารถใช้การคูณเมทริกซ์อย่างรวดเร็ว (เช่นอัลกอริทึมของ Strassen)
tranisstor

ฉันเพิ่งชี้กรณีผู้เขียน "เวกเตอร์จริง" ดูเมทริกซ์โทมัส - กรณีพิเศษของเมทริกซ์ใน O (n) ฉันไม่ได้บ่งบอกถึงกรณีทั่วไป และถ้าเมทริกซ์ที่มีอย่างต่อเนื่องและเป็นที่รู้จักกันเป็นพาหะคุณ hardcode คำตอบที่ไม่ใช้ Strassen (
Evil

@EvilJS: ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณกำลังพูด แน่นอนว่าสำหรับเมทริกซ์ชนิดพิเศษเช่นเมทริกซ์โทมัสคุณสามารถเร่งความเร็วได้อย่างมีนัยสำคัญ แต่โดยทั่วไปมันจะยากกว่า บางทีฉันควรจะชี้ให้เห็นว่าปัญหาที่ฉันแนะนำจะพิจารณาขั้นตอนก่อนการประมวลผล (ก่อนที่เวกเตอร์ใด ๆ มาถึง) หากคุณสามารถบอกฉันถึงวิธีการ "ฮาร์ดโค้ด" อัลกอริทึมของคุณสำหรับเมทริกซ์ใด ๆ ที่ฉันให้คุณคุณสามารถปรับปรุงการคาดเดา (เนื่องจากคุณสามารถใช้ขั้นตอนการเข้ารหัสนี้เป็นขั้นตอนการประมวลผลล่วงหน้า
tranisstor

เห็นด้วยมันใช้งานได้; อย่างไรก็ตามการอ้างอิงที่ 2 โดยวิลเลียมส์ดูเหมือนจะไม่พิจารณาเมทริกซ์ไบนารี่เป็นพิเศษ fyi เขาสไลด์ที่นี่
vzn

-2

นี่คือการวิจัยระดับ - CS ปัญหาคือการศึกษาอย่างน้อยสอง guises หนึ่งในการคูณของเมทริกซ์กระจัดกระจาย (ตัวอย่างกระดาษเพิ่งอ้างถึง) และยังมีการศึกษากรณีพิเศษของ 2 ครั้งกรณีที่เป็นที่รู้จักกันว่าจะเกี่ยวข้องกับการเพิ่มประสิทธิภาพของโปรแกรมเส้นตรง โปรแกรมขั้นต่ำอาจเป็น DAG ที่มี "ประตู" สองประเภทเพิ่มและเพิ่มทวีคูณดังนั้นวรรณกรรมการย่อขนาดวงจรอาจเชื่อมต่อกับสิ่งนี้และอาจเป็น "ซอฟต์แวร์ที่อยู่นอกชั้นวาง" เพื่อปรับใช้เพื่อวัตถุประสงค์ ที่นี่เป็นโทษที่เฉพาะเจาะจงใน 2 ครั้งกรณีและยังเป็นคำถามเดียวกันในcstheoryกับบางการศึกษาเชิงประจักษ์พื้นฐานเบื้องต้น


1
O(n)O(n2)

refs อยู่บนเป็นชื่อระบุเมทริกซ์เบาบาง บางทีคุณอาจมีคำจำกัดความที่แตกต่างจากในเอกสาร? หากคุณมีความอ่อนไหวต่อคำจำกัดความที่แน่นอนของ sparsity (ส่วนใหญ่มีความสัมพันธ์คร่าว ๆ / เกือบจะแทนกันได้) ควรระบุไว้ในคำถาม
vzn

1
เมทริกซ์ที่ฉันสนใจคือเมทริกซ์หนาแน่น ถึงแม้ว่าฉันจะไม่คิดว่าวิธีนี้จะตอบคำถามของฉันได้ทั้งหมด แต่ฉันก็ยินดีที่ได้รับคำตอบ
Nick Alger

โอเคขอโทษ! สับสนวุ่นวายไม่รู้คำถามที่แน่นอน ในคร่าวๆดูตัวอย่างของคุณ # 2 มีน้อยกว่า½เติม & มอง "เบาบาง" สำหรับฉัน & คิดว่าบางทฤษฎีการหร็อมแหร็มบางอย่างจะค่อนข้างเหมาะสม โดยพื้นฐานยิ่งเมทริกซ์มีความหนาแน่นมากขึ้นการดำเนินการที่น้อยที่สุดก็สามารถปรับให้เหมาะสมได้ดังนั้นทฤษฎีส่วนใหญ่เกี่ยวกับการเพิ่มประสิทธิภาพประเภทนี้จึงเน้นไปที่เมทริกซ์กระจัดกระจาย
vzn

-3

ไม่แน่ใจว่าปัญหานี้ได้รับการศึกษาอย่างแน่นอน แต่งานวิจัยนี้เกี่ยวข้องและดูเหมือนว่าจะเป็นผู้นำ / เริ่มต้นที่เหมาะสม มันดูที่การสลายตัวของไฮเปอร์กราฟสำหรับการคูณเมทริกซ์เบาบาง เมทริกซ์ไบนารีเป็นกรณีพิเศษของวิธีการนี้ วิธีนี้จะค้นหากลยุทธ์ที่เหมาะสมกว่าวิธีการคูณแบบ "ตรง" การปรับให้เหมาะสมเพิ่มเติม (ภายในกรอบงานนี้) อาจเป็นไปได้ขึ้นอยู่กับคุณสมบัติของเมทริกซ์ไบนารี


2
ฉันไม่เห็นสิ่งนี้เกี่ยวข้องกับคำถาม กระดาษนั้นเกี่ยวกับการแบ่งเมทริกซ์การแบ่งพาร์ติชันระหว่างระบบกระจายสำหรับการคำนวณแบบขนานเพื่อลดปริมาณการสื่อสารระหว่างโปรเซสเซอร์ คำถามนี้เกี่ยวข้องกับอะไร? คำถามดูเหมือนจะไม่พูดถึงอะไรเกี่ยวกับการคำนวณแบบขนานหรือการสื่อสารระหว่างโปรเซสเซอร์ ฉันขอแนะนำให้คุณแก้ไขคำตอบเพื่อให้การเชื่อมต่อชัดเจนยิ่งขึ้น
DW

afaik ปัญหาเดียวกันและลดการคำนวณแบบขนานยังช่วยลดการใช้หน่วยประมวลผลเดียวของการคำนวณเดียวกัน อย่างน้อยผู้ถามไม่ได้ออกกฎการใช้งานแบบคู่ขนาน
vzn

1
ขอบคุณสำหรับลิงค์ อย่างไรก็ตามฉันสงสัยในวิธีการของปัญหานี้เพราะมันไม่ได้ใช้ประโยชน์จากความจริงที่ว่ารายการของเมทริกซ์นั้นมีเพียงศูนย์และคนในขณะที่คุณสมบัตินี้มีความสำคัญมากเท่าที่ฉันสามารถบอกได้ ตัวอย่างเช่นอัลกอริทึม "รวมทั้งหมด" ในตัวอย่างแรกจะใช้ได้เฉพาะเมื่อรายการที่ไม่ใช่ศูนย์ทั้งหมดในคอลัมน์ที่กำหนดของเมทริกซ์มีค่าเท่ากัน
Nick Alger

NA การสังเกตการณ์ / คัดค้านของคุณได้รับการแก้ไขในคำตอบ การปรับให้เหมาะสมเพิ่มเติมอาจเป็นไปได้โดยใช้คุณสมบัติ 0/1 วิธีนี้ดูเหมือนว่าจะลดจำนวน # ของการดำเนินการเพิ่ม / การคูณทั้งหมดให้น้อยที่สุดภายใต้หน้ากากของการทำให้เป็นคู่ขนาน การดำเนินการเพิ่มเติม / การคูณสามารถถูกมองว่าเป็น "ประตู" ใน DAG และเทคนิคคือการย่อขนาดประตูให้เล็กที่สุด ความซับซ้อนที่สำคัญของกระดาษเผยให้เห็นบางส่วนของความซับซ้อนลึก / เป็นชิ้นเป็นอันของกระบวนการเพิ่มประสิทธิภาพนี้ ตามที่ระบุไว้คำตอบไม่ได้ตั้งใจที่จะสรุปในปัญหาที่ยากนี้เพียงแค่ "ดีกว่าไม่มีอะไร"
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.