จะจัดลำดับตัวแปรใหม่เพื่อสร้างเมทริกซ์แบนด์แบนด์วิดท์ขั้นต่ำได้อย่างไร


15

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

Ui1,j+Ui+1,j4Ui,j+Ui,j1+Ui,j+1=fi,j

ฉันรู้ว่าฉันสามารถแก้ปัญหาระบบนี้ได้โดยวิธีการวนซ้ำ แต่ความคิดนั้นเกิดขึ้นกับฉันว่าถ้าฉันสั่งตัวแปรอย่างเหมาะสมฉันอาจสามารถได้รับเมทริกซ์แถบสีซึ่งสามารถแก้ไขได้ด้วยวิธีโดยตรง (เช่นการกำจัดแบบเกาส์ w / o pivoting) เป็นไปได้ไหม มีกลยุทธ์ใดบ้างสำหรับการทำเช่นนี้กับคนอื่น ๆ ระบบที่กระจายน้อยลงหรือไม่?


2
ถ้าอย่างนั้น Cuthill-McKee
JM

น่าสนใจ ... ฉันไม่เคยได้ยินเกี่ยวกับอัลกอริธึมของ Cuthill-McKee มาก่อน! :)
เปาโล

1
นอกจากนี้ยังมี Reverse Cuthill-McKee อีกด้วย
Geoff Oxberry

1
ฉันหวังว่ามันชัดเจนจากคำตอบ แต่คุณไม่ต้องการใช้ตัวแก้ปัญหาแบบแบนด์สำหรับปัญหานี้หรือเลือกการสั่งซื้อที่ลดแบนด์วิดท์ให้เหลือน้อยที่สุด บางทีคำถามหรือคำตอบที่เลือกสามารถแก้ไขเพื่อให้ชัดเจนมิฉะนั้นฉันกลัวว่าตำนานนี้จะชุลมุน ผมให้เปรียบเทียบภาพและเติมเทียบในscicomp.stackexchange.com/a/880/119
Jed Brown

@JedBrown: อันที่จริงฉันไม่ได้ทำงานกับปัญหาปัวซองต่อ se ... ปัญหาของฉันมีโครงสร้างที่คล้ายกับปัวซองปัญหา ... ตัวบ่งชี้ของตัวแปร (i และ j's) จะเหมือนกันและ เมทริกซ์นั้นมีความโดดเด่นในแนวทแยงมุมกับรายการนอกแนวทแยงมุม (ภายในแถวเดียวกัน) บวกกับผลรวมของการเข้าในแนวทแยงมุมอย่างแน่นอน
พอล

คำตอบ:


13

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

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

จอร์จและหลิวแสดงให้เห็นในหนังสือคลาสสิกของพวกเขา ว่าการแก้ปัญหาเบาบางโดยตรง 2d เพียงต้องการการทำงานและO ( n log n )หน่วยความจำในขณะ 3d เบาบางโดยตรงต้องใช้O ( n 2 )การทำงานและO ( n 4 / 3 )หน่วยความจำO(n3/2)O(nlogn)O(n2)O(n4/3)


คุณมีการอ้างอิงสำหรับการอ้างอิง George และ Liu?
เปาโล

เพิ่ม; ฉันกำลังจะออกจากรถเมื่อฉันส่งมันครั้งแรก ฉันรู้ว่ามีหนังสือออนไลน์เวอร์ชันที่พร้อมใช้งานอย่างอิสระอยู่ที่ไหนสักแห่ง (Jed รู้ว่าอยู่ที่ไหน) แต่ฉันหาไม่เจอ
Jack Poulson

ฉันอัปเดตลิงก์ให้ชี้ไปที่ PDF ของหนังสือแทนที่จะเป็นบทวิจารณ์หนังสือ
Jed Brown

@JedBrown นั่นเป็นการอ้างอิงที่ดีมาก! ขอบคุณมาก! :)
เปาโล

1
@ อเล็กซานเดอร์ทุกคนให้ความสำคัญกับจอร์จและหลิวถึงสามมิติถึงแม้ว่าฉันจะไม่รู้ว่าพวกมันชี้ให้เห็นในหนังสือหรือไม่ มันชัดเจนจากทฤษฎีอย่างไรก็ตาม คั่นจุดสุดยอดที่น้อยที่สุดสำหรับตารางเป็นn 2 / 3 = เมตร×เมตร เมทริกซ์มีความหนาแน่นสูงที่เกี่ยวข้องกับ SuperNode ที่มี( n 2 / 3 ) 2 = n 4 / 3รายการและต้อง( n 2 / 3 ) 3 = n 2n=ม.×ม.×ม.n2/3=ม.×ม.(n2/3)2=n4/3(n2/3)3=n2ปัจจัยการดำเนินงาน ศัพท์ลอการิทึมในกรณี 2 มิตินั้นละเอียดกว่าและได้รับการปฏิบัติในบทที่ 8 เกี่ยวกับการผ่าซ้อนซึ่งทำให้ได้ขอบเขตที่ต่ำกว่า
Jed Brown

5

Cuthill-McKeeเป็นมาตรฐานอย่างแท้จริงสำหรับสิ่งที่คุณต้องการทำ หากคุณต้องการเล่นด้วยวิธีนี้มีการใช้อัลกอริทึมที่ใช้งานง่าย (และย้อนกลับ) ในBoost Graph Library (BGL) และเอกสารประกอบประกอบด้วยตัวอย่างวิธีการใช้


จริง ๆ แล้วกลับ Cuhill-McKee; มันมักจะให้เติมน้อย แต่การเรียงลำดับการคัดแยกซ้อนนั้นดีกว่าการสั่งแบนด์วิทต่ำมาก
Arnold Neumaier

4

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

อีกสิ่งหนึ่งที่ควรทราบ: ในบางปัญหาคุณสามารถฉลาดเกี่ยวกับการสั่งซื้อตัวแปรเพื่อให้ได้แถบสีหรือใกล้กับแถบสีรูปแบบซึ่งสามารถช่วยคุณประหยัดปัญหา (และเวลา CPU) ของการเรียกอัลกอริธึมเหล่านี้ อย่างไรก็ตามการจัดเรียงคำสั่งใหม่นี้ต้องใช้ความเข้าใจอย่างลึกซึ้งในส่วนของคุณและไม่มีอะไรใกล้เคียงเหมือนกับขั้นตอนวิธีการเรียงลำดับแบบอิงทฤษฎีกราฟที่ผู้คนพูดถึงในคำตอบของพวกเขาที่นี่


ยินดีต้อนรับคุณพอล ถ้าคุณชอบมันโหวตขึ้น
Geoff Oxberry

3

มีอัลกอริธึมที่เรียกว่า ADI (Alternating Direction Implicit) ในวงการคณิตศาสตร์ประยุกต์และผู้ดำเนินการแยกในวงการฟิสิกส์โดยทั่วไปแล้วสิ่งที่คุณอธิบาย มันเป็นวิธีการวนซ้ำและทำตามขั้นตอนพื้นฐานนี้:

  1. Yx

  2. xY

  3. ทำซ้ำ 1 และ 2 จนกว่าข้อผิดพลาดจะเล็กตามที่คุณต้องการ

ฉันไม่ทราบความซับซ้อนที่เป็นทางการของอัลกอริทึมนี้ แต่ฉันพบว่ามันมาบรรจบกันในการวนซ้ำน้อยกว่าสิ่งต่าง ๆ เช่น Jacobi และ Gauss-Seidel ทุกครั้งที่ฉันใช้มัน


2
หากคุณตัดสินใจที่จะไปตามเส้นทางแยกตัวดำเนินการสิ่งที่คุณต้องระวังคือการแยกตัวดำเนินการเป็นสาเหตุทำให้เกิดข้อผิดพลาดในการแก้ไขปัญหาแบบคงที่ในบางกรณี (หนึ่งในเพื่อนร่วมห้องของฉันได้พัฒนาวิธีที่จะเอาชนะความยากลำบากนี้ แต่ฉันไม่เชื่อว่าเขาได้เผยแพร่มัน) นอกจากนี้ยังมีการแยกตัวดำเนินการเพื่อให้เกิดข้อผิดพลาดเชิงตัวเลข มีวิธีการที่ดีขึ้นในการประมาณการผิดพลาดเหล่านี้posteriori ; Don Estep ทำงานได้ดีเยี่ยมในพื้นที่นั้น
Geoff Oxberry

@GeoffOxberry ดูเหมือนว่าคุณกำลังอ้างถึงการแยกที่แตกต่างกัน คุณสามารถใช้ ADI ในรูปแบบโดยนัยซึ่งไม่มีข้อผิดพลาดในการแยกเนื่องจากมันแก้ปัญหาระบบได้จริง นอกจากนี้ยังมีวิธี IMEX ที่ควบคุมข้อผิดพลาดในการแยกอย่างเคร่งครัด
Jed Brown

xY

ฉันไม่เคยได้ยินชื่อ Godunov และ Strang ฉันมักจะแบ่งผู้ปฏิบัติงานด้วยสูตร Baker-Campbell-Hausdorf นั่นคือสิ่งเดียวกันหรือไม่
Dan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.