คำถาม:
มีขั้นตอนหรือทฤษฎีที่สร้างขึ้นสำหรับการสร้างรหัสที่ใช้การคูณเมทริกซ์เวกเตอร์อย่างมีประสิทธิภาพหรือไม่เมื่อเมทริกซ์นั้นหนาแน่นและเต็มไปด้วยเลขศูนย์และอันเดียว ตามหลักการแล้วรหัสที่ได้รับการปรับปรุงจะใช้ประโยชน์จากข้อมูลที่คำนวณก่อนหน้านี้อย่างเป็นระบบเพื่อลดงานซ้ำซ้อน
ในคำอื่น ๆ ฉันมีเมทริกซ์ และผมต้องการที่จะทำบาง precomputation ขึ้นอยู่กับที่จะทำให้การคำนวณเป็นที่มีประสิทธิภาพที่สุดเมื่อผมมารู้ทีหลังได้รับเวกเตอร์โวลต์
เป็นเมทริกซ์ไบนารีหนาแน่นที่เป็นรูปสี่เหลี่ยมผืนผ้าที่รู้จักกันใน "เวลารวบรวม" ในขณะที่เป็นเวกเตอร์จริงที่ไม่รู้จักซึ่งรู้จักกันใน "เวลารัน" เท่านั้น
ตัวอย่างที่ 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}
การคูณเมทริกซ์ - เวกเตอร์มาตรฐานจะคำนวณด้วยวิธีนี้ อย่างไรก็ตามงานนี้จำนวนมากซ้ำซ้อน เราสามารถทำการคำนวณเมทริกซ์เดียวกันโดยใช้ต้นทุนที่น้อยลงโดยติดตาม "ผลรวมสะสม " และเพิ่ม / ลบเพื่อให้ได้ตัวเลขถัดไป:
ตัวอย่างที่ 2: (โครงสร้างแบบลำดับชั้น)
ในตัวอย่างก่อนหน้านี้เราสามารถติดตามผลรวมสะสม อย่างไรก็ตามโดยทั่วไปแล้วจะต้องสร้างและเก็บต้นไม้ของผลลัพธ์ระดับกลาง ตัวอย่างเช่นพิจารณา
- Compute และและเพิ่มพวกเขาได้รับw_3
- Compute และและเพิ่มพวกเขาได้รับw_2
- เพิ่มและเพื่อรับw 3 w 1
โครงสร้างในตัวอย่างด้านบนนั้นมองเห็นได้ง่าย แต่สำหรับเมทริกซ์จริงที่ฉันสนใจโครงสร้างนั้นไม่ง่ายนัก
ตัวอย่างที่ 3: (อันดับต่ำ)
เพื่อกำจัดความสับสนบางอย่างการฝึกอบรมโดยทั่วไปจะไม่กระจัดกระจาย โดยเฉพาะวิธีการแก้ปัญหานี้จะต้องสามารถหาวิธีที่มีประสิทธิภาพในการใช้เมทริกซ์ที่มีบล็อกขนาดใหญ่เต็มไปด้วย ตัวอย่างเช่นพิจารณา
เมทริกซ์นี้สามารถจำแนกได้เป็นความแตกต่างของเมทริกซ์อันดับ 1,
ดังนั้นการกระทำของมันบนเวกเตอร์สามารถคำนวณได้อย่างมีประสิทธิภาพโดย, w 1
แรงจูงใจ:
ฉันกำลังทำงานกับวิธีเชิงตัวเลขสำหรับการประมวลผลภาพบางส่วนและมีเมทริกซ์หนาแน่นขนาดใหญ่หลายแห่งที่มีโครงสร้างที่แตกต่างกันซึ่งได้รับการแก้ไขตลอดเวลา หลังจากนั้นเมทริกซ์เหล่านี้จะต้องนำไปใช้กับเวกเตอร์ที่ไม่รู้จักจำนวนมากซึ่งจะขึ้นอยู่กับอินพุตของผู้ใช้ ตอนนี้ฉันกำลังใช้ดินสอและกระดาษเพื่อหาโค้ดที่มีประสิทธิภาพแบบต่อเมทริกซ์ แต่ฉันสงสัยว่ากระบวนการนี้อาจเป็นไปโดยอัตโนมัติหรือไม่
แก้ไข: (คำลงท้าย)
คำตอบทั้งหมดที่นี่จนถึงขณะนี้ (ณ วันที่ 9/5/58) มีความน่าสนใจ แต่ไม่มีใครตอบคำถามได้อย่างน่าพอใจอย่างที่ฉันหวังไว้ อาจเป็นไปได้ว่านี่เป็นคำถามวิจัยอย่างหนักและไม่มีใครรู้คำตอบที่ดี
ตั้งแต่เวลาหมดลงฉันจะมอบรางวัลให้กับคำตอบของ EvilJSเนื่องจากมันตอบคำถามที่ถูกต้อง อย่างไรก็ตามฉันต้องการคำตอบที่มีคำอธิบายที่ชัดเจนและมีรายละเอียดมากขึ้น
คำตอบของ tranisstorทำให้การเชื่อมต่อระหว่างคำถามนี้กับปัญหาการคูณเมทริกซ์ - เวกเตอร์แบบบูลออนไลน์ (OMv) ของออนไลน์ แต่การเชื่อมต่อไม่ตรงกับที่คำถามนี้ถาม โดยเฉพาะอย่างยิ่งข้อสันนิษฐานต่อไปนี้ไม่เหมาะกับ (ฉันเน้นตัวหนา)
ทีนี้สมมติว่าสำหรับทั้งหมดและเมทริกซ์เรารู้อัลกอริทึม , สำหรับเวกเตอร์ทั้งหมดคำนวณในเวลา subquadratic อย่างแท้จริงเช่นในเวลาสำหรับบาง0
ไม่ว่าจะมีอัลกอริทึม subquadratic สำหรับการฝึกอบรมทั้งหมดหรือไม่นั้นเป็นคำถามสำหรับการค้นหาอัลกอริทึมสำหรับเมทริกซ์เฉพาะที่เร็วที่สุด เมทริกซ์ 0-1 ส่วนใหญ่มีลักษณะเป็นแบบสุ่มและ (ถ้าฉันเดา) อาจไม่มีอัลกอริทึมย่อย อย่างไรก็ตามความจริงที่ว่ามีเมทริกซ์ไม่ดีจริง ๆ ก็ไม่ได้ป้องกันฉันจากการหาอัลกอริทึมที่รวดเร็วในเมทริกซ์ที่ดีตัวอย่างเช่นเมทริกซ์ "หน้าต่างบานเลื่อน"
ตอบ vzn ของคำตอบแรก , คำตอบที่สองเป็นที่น่าสนใจ (และในความคิดของฉันไม่สมควรได้รับ downvotes จำนวนมาก) แต่พวกเขาไม่ได้นำไปใช้กับคำถามสำหรับเหตุผลที่กล่าวไว้ในการแสดงความคิดเห็นที่มี