1 Σποραδικές Μήτρες (Sparse Matrices) Αθανάσιος Μυγδαλ ας ΑΠΘ 17 Μαρτίου 2010 c Α.Μ. /1
30 Τρόποι αποθήκευσης σποραδικών µητρών Υπάρχουν πολλοί τρόποι αποθήκευσης σποραδικών µητρών αναλόγως των δοµικών χαρακτηριστικών τους (π.χ. συµµετρική µήτρα, ασύµµετρη µήτρα, ταινιοειδής µήτρα) και της επιλογής µεθόδου επίλυσης του συστήµατος εξισώσεων. (Π.χ. στις επαναληπτικές µεθόδους, η επιλογή τρόπου αποθήκευσης γίνεται κυρίως µε αναφορά στην αλγοριθµική απόδοση του γινοµένου µήτρας-διανύσµατος.) 17 Μαρτίου 2010 c Α.Μ. /30
-058>24.2;<:8982*98103.=;.2;;98:*-23A650<:A6 ;=592.;5.60*98103.=;03*<*;<82?8=; SQTVIWWIH6S[7XSVEKI ;=592.;5.60*98103.=;03*<*;<04.; SQTVIWWIH SPYQR7XSVEKI *98103.=;0;.<=?*2*-2*<*703*<*<:2948<0<.;6ERHSQ7XSVEKISJ8VMTTPIXW <*2628.2-0;*98103.=;0&ERH7XSVEKI 5.<*+40<0<*2628.2-0;*98103.=;0:EVMEFPI&ERH7XSVEKI7O]PMRI7XSVEKI -2*6=;5*<230*98103.=;0,QI\OU[XWYILQRFTF\YI br\r _YO[QTWXWQWeTMEUILQDU][TI:09)RIQ IXWPORMeW]TM\W[\WQ_MGWMNIXd\WU[\WG_WMRIQ\OU[\FSO NaZ:09)0 0PE[OMN\W][\WQ_MGW]IXWPORMeM\IQ[EUIIREYIQWLQDU][TI437-8-32aZ MNR[\W[\WQ_MGW437-8-320 9*:*-.2,5*! 5..35.<*44.=;0;=55.<:2*; 3*2<06-2*,A628?A:2;<* 0 :09) 437-8-32?A:2;.35.<*44.=;0;=55.<:2*; 0 :09) 437-8-32 (-+320
;98:*-23050<:* A;-2*<*70;<82?.2A6 ;.;?.;05.,:*>05*,.6230.2-23.; 3*<*48,8; 42;<.; 9.:29<A;0 9.:29<A;.2; <87A6,.2<62*;.A; 50<:* 5.<*1.;0; -2*,A628; 50<:* <:2,A6230 50<:* <*2628-0; 50<:* ;=55.<:230 *;=55.<:0 50<:* 50<:* <=?*2* -2*<*70 >=;230*=78=;* -2*<*70 9.:29<A;.2; *98103.=;0 ;=55.<:2* -2*<*70 5.:8; -2*,A628; 3I\D;\WG_W]Z 940:0;?aYQ[\D 3I\D;\FSMZ 6*28?2 <=?*2*>=;230 *6A<:2,A6230 &_Q_aYQ[\D 3I\D<YQXSd\O\MZ 3*<A<:2,A6230 5WUDLMZ ;\OUXMYGX\a[OI]\FLMUIXWPORMeM\IQOLQIKfUQWZ
.6-.?85.60-850-.-85.6A6;<06*SVXVER,.62309.:29<A;05..6;A5*<A5.60-2*,A628*[eTTM\YOF[]TTM\YQRFXMYGX\a[O 8=4)49&0-7TEVWIC1EXVM\ 6)0003 8&0)(-1)27-32:EPYI -28)+)6003 8&0)(-1)27-324SWMXMSR -28)+)63VHIV1E\7M^I2SR>IVSIW )2(8=4),.62309.:29<A;05.<06-2*,A628?A:2;<**[eTTM\YOF[]TTM\YQRFXMYGX\a[O 8=4)49&0-7TEVWIC1EXVM\ 6)0003 8&0)(-1)27-32:EPYI(MEKSREP -28)+)6003 8&0)(-1)27-324SWMXMSR -28)+)63VHIV1E\7M^I2SR>IVSIW )2(8=4).ULM_WTEUaZXYW[PFROIUIKUfYQ[OZ\aUXMYQX\f[MaUXSFYOI[eTTM\YOXSFYOF RI\D\WFTQ[][]TTM\YQRFIXWPFRM][ORSX 0LMe\MYOLWTFIXW\MSMGMXER\I[O\OZXYf\OZWXd\MPITXWYWe[MUIU\QRI\I[\IPMG IXd <=4))<8)2(77TEVWIC1EXVM\49&0-7TEVWIC1EXVM\C[C(MEKSREP 6)0003 8&0)(-1)27-32(MEKSREP )2(8=4) 8YGNM\IQE\[QORSD[O 7TEVWIC1EXVM\ RIQWQWXWQM[LFXW\MTEPWLWQIUIX\]_PWeU PITXWYWeUUIM^IYTW[PWeURIQ[\OULWTF 7TEVWIC1EXVM\C[C(MEKSREP
*6*3*<*;3.=0;<82?8=3*2;<040; <8=;<82?.28=MN 0[\FSO NIU\Q[\WQ_MG[\WUTQRYd\MYWIREYIQWIYQPTd 437-8-320R RIQW[\WG_WZM]XWSWKGNM\IQaZ M!437-8-320NR 9*:*-.2,5*,QI0!E_WTM437-8-32!!" ;\FSON!?437-8-32RA!?A!!";\WG_WZM!437-8-32NR!!!YI:09) IU\Q[\WQ_MG[\W *9*2<0;.2;56050;,.62309.:29<A;0 Q ;=55.<:2305.?A:2;<0-2*,A628 Q Q!94018;5050-.623A6;<82?.2A6 523:8<.:.;*9*2<0;.2;56050;*984.;<2;.6*44*3<23.; 9:*7.2;,2*<06<*=<89820;0.68;;<82?.28= -MUTW]MGUIQKUa[\EZRDXWQMZ[]KRYG[MQZ
<:2,A623050<:* *XWPFRM][ORD\a\YQKaUQRFZRI\D[\WG_W]Z[MLQDU][TIRR [\WQ_MGaU 0 0! 0 0!"?0 00 0RRA 0R 0R 0RR 8S0MNIXWPORMeM\IQ[\OUPE[OMMN < 9*:8582A;KQIDUa\YQKaUQRF9!0.XG[OZIUDSWKOIXWPFRM][ORI\D[\FSMZ![RO[O 50<:*,)77)2&)6+,! \\\\\\\ \ \\\\\\ \ \\\\\ \ \\\\ \ \\\ \ \\ \ \ *XWPFRM][ORI\D[\WG_W]Z[MLQDU][TI RR [\WQ_MGaU!"?,,R,,R,RR,RRA 8S,MNIXWPORMeM\IQ[\OUPE[OMRMRN
<*2628.2-.2;50<:.; PWF[!! YWF[! \\\ \\\\ \\\\\ \\\\\ \\\\ \\\ 9SD\WZ\IQUGIZFERH[MHXL! XSD\WZRD\aOTQ\IQUGIZ PS[IVWIQMFERH[MHXL XSD\WZDUaOTQ\IQUGIZ YTTIVWIQMFERH[MHXL ReYQILQIKfUQWZQEMRHMEKSREP >*3.448;*98103.=;0; 7XSVEKI)RZIPSTI,2*;=55.<:230<*2628.2-050<:*!! <YQLQIKfUQMZTF\YMZ[MLQD\IVO R\ <*262.;5.<*+40<8=94*<8=;:EVMEFPIFERH[MHXLWO]PMRIWXSVEKI
*XWPFRM][ORI\D[\WG_W]Z\OZRD\a\YQKaUQRFZ? A 8QPE[MQZ\aULQIKaUGaU[\WQ_MGaUIXWLGLWU\IQTM\WIREYIQWLQDU][TI (-+320C437-8-32!?A <W[\WQ_MGW*MNIXWPORMeM\IQ[\OUPE[O(-+320C437-8-32MNM *U\Q[\WG_aZIXWPFRM][ORI\D[\FSMZ*XWPFRM][O\OZDUa\YQKaUQRFZ 3I\D[\FSMZ?** *** *** ** *A (-+320C437-8-32!? A R[\WQ_MGI (-+320C437-8-32N(-+320C437-8-32N!XSFPWZTOTOLMUQRfU[\WQ_MGaU [\OU[\FSO N #\[QMVOKMG\IQOXYW[PFROMUdZIRdTO[\WQ_MGW][\WLQDU][TI (-+320C437-8-32 <WXYd[PM\W[\WQ_MGW[\W\ESWZ\W]LQIUe[TI\WZE_MQXDU\W\M\QTFQ dxw]q\wxsfpwz\autotolmuqrfu[\wq_mgau\oztf\yiz
32 Συµπιεσµένη αποθήκευση κατά στοίχους ή στήλες Συµπιεσµένη αποθήκευση κατά στοίχους ή στήλες προσφέρει το γενικώτερο σχήµα αποθήκευσης σποραδικών µητρών διότι δεν ϑέτει προϋποθέσεις στα δοµικά χαρακτηριστικά της σποραδικότητας. Από την άλλη πλευρά δεν είναι και η πιο αποδοτική για το σχηµατισµό γινοµένων µήτρας-διανύσµατος. Βασίζεται στην αντίληψη της σποραδικής µήτρας µε την µορφή γραφήµατος! /32
33 Σποραδικές Μήτρες και Γραφήµατα Εστω η σποραδική µήτρα A = [a ij ] n n. Η δοµική σποραδικότητα της µήτρας δύναται ν αποδοθεί µε µία αντίστοιχη µήτρα N = [n ij ] n n, όπου n ij = 1 εφόσον a ij 0 και n ij = 0 διαφορετικά. Στην N αναγνωρίζουµε µία µήτρα παρακείµενων κόµβων ή µήτρα γειτνίασης (node adjacency matrix) και συνεπώς ένα αντίστοιχο γράφηµα. Άρα οποιαδήποτε δοµή δεδοµένων για την αναπαράσταση του γραφήµατος στην µνήµη του Η/Υ δύναται να χρησιµοποιηθεί και για την αναπαράσταση της σποραδικής µήτρας. /33
34 Εστω η σποραδική µήτρα : Παράδειγµα A = 5 0 0 0 4 0 9 2 0 0 0 8 0 4 7 6 0 0 7 0 3 2 9 0 0 6 0 7 8 2 0 3 0 0 4 3 /34
35 Μήτρα δοµής σποραδικότητας ή µήτρα παρακείµενων κόµβων N = 1 0 0 0 1 0 1 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 1 0 0 1 1 /35
36 Αντίστοιχο γράφηµα : Πρώτη µορφή Οι κόµβοι αντιστοιχούν σε στοίχους/στήλες. Τα τόξα αντιστοιχούν στις µονάδες. Φορά των τόξων από στοίχο προς στήλη. 1 2 4 5 3 6 /36
37 Συµπιεσµένη αποθήκευση κατά στοίχους οµή δεδοµένων αναπαράστασης του γραφήµατος µε πρόσω αστέρα (forward star) ή πρόσω κατάλογο γειτνίασης (forward adjacency list) είκτης στοίχου : row_ptr 1 3 6 9 13 17 20 είκτης στήλης: col_ptr 1 5 1 2 6 2 4 5 6 2 5 6 Τιµές: val 5 4 9 2 8 6 7 8-2 -3-4 3 Σε περίπτωση συµµετρικής µήτρας αποθηκεύουµε µόνον το άνω τριγωνικό τµήµα της µήτρας. /37
38 Αντίστοιχο γράφηµα : εύτερη µορφή Οι κόµβοι αντιστοιχούν σε στοίχους/στήλες. Τα τόξα αντιστοιχούν στις µονάδες. Φορά των τόξων από στήλη προς στοίχο. 1 2 4 5 3 6 /38
39 Συµπιεσµένη αποθήκευση κατά στήλες ή σχήµα Harwell-Boeing οµή δεδοµένων αναπαράστασης του πρώτου γραφήµατος µε οπίσω αστέρα (backward star) ή οπίσω κατάλογο γειτνίασης (backward adjacency list). Ουσιαστικά αποθήκευση κατά στοίχους της A T. είκτης στήλης: col_ptr 1 4 8 10 13 17 20 είκτης στοίχου : row_ptr 1 2 4 2 3 5 6 1 4 5 6 2 5 6 Τιµές: val 5 9 7 2 4 6-3 4 9 8-4 8-2 3 Σε περίπτωση συµµετρικής µήτρας αποθηκεύουµε µόνον το κάτω τριγωνικό τµήµα της µήτρας. /39
40 Παρατηρήσεις Κάθε τόξο του γραφήµατος αντιστοιχεί σ ένα µη-µηδενικό στοιχείο της µήτρας. Η αποθήκευση απαιτεί n + 1 + 2m στοιχεία, όπου n το πλήθος στοίχων (στηλών) και m το πλήθος µη-µηδενικών στοιχείων. Ο δείκτης row_ptr(i) (αντιστοίχως col_ptr(i)) αποθηκεύει την ϑέση του col_ptr και val (αντίστοίχως row_ptr και val) όπου αποθηκεύονται η στήλη (ο στοίχος) και η τιµή του πρώτου µη-µηδενικού στοιχείου του στοίχου (στήλης) i. Το πλήθος µη-µηδενικών στοιχείων στον στοίχο (στήλη) i δίδεται από row_ptr(i+1) row_ptr(i) (αντιστοίχως col_ptr(i+1) col_ptr(i)). /40
41 Τυχαία αποθήκευση (Random Storage) Ουσιαστικά παραλλαγή των προηγουµένων σχηµάτων αποθήκευσης. Αντιστοιχεί σε ϱητό κατάλογο των τόξων του γραφήµατος. Απαιτούνται και πάλι τρία διανύσµατα, ένα για τους αρχικούς κόµβους των τόξων, ένα για τους τερµατικούς κόµβους και ένα για τις µη-µηδενικές τιµές. Ετσι για κάθε µη-µηδενικό στοιχείο της µήτρας αποθηκεύουµε τρία στοιχεία : τον στοίχο και την στήλη που το περιέχουν και την τιµή του. Οι τριπλέττες µπορούν ν αποθηκευθούν µε παντελώς τυχαία σειρά. Ενα πλεονέκτηµα είναι ότι νέα µη-µηδενικά στοιχεία δύνανται να εισαχθούν στην µήτρα προσθέτοντάς τα στο τέλος του καταλόγου. Απαιτήσεις µνήµης: 3m /41
42 row col val 1 1 5 2 6 8 3 4 6 4 3 3 5 2 6 6 2-3... 2 1 9 5 5 8 1 5 4 /42
43 Για την συστηµατική σάρωση των µη-µηδενικών στοιχείων της µήτρας απαιτείται η εισαγωγή ενός ακόµη διανύσµατος δεικτών (next). Οι δείκτες αυτοί υποδεικνύουν το αµέσως επόµενο στοιχείο (κατά στοίχο ή στήλη) προς τα εµπρός ή προς τα πίσω, ορίζοντας ουσιαστικά µία αλυσίδα την οποία µπορούµε να διατρέξουµε για την ανεύρεση κάποιου συγκεκριµένου στοιχείου a ij. Το επόµενο σχήµα αποθήκευσης της µήτρας είναι της µορφής «κατά στοίχο προς τα εµπρός». Η αλυσίδα διακόπτεται καταχωρώντας την µηδενική τιµή στον δείκτη του τελευταίου στοιχείου. Η αναζήτηση του στοιχείου a ij γίνεται σειριακά εκκινώντας από την διεύθυνση (ϑέση) i εάν i < j ή από την διεύθυνση i 1 εάν j < i και ακολουθώντας τους δείκτες next έως ότου ευρεθεί το Ϲητούµενο στοιχείο a ij ή αποδειχθεί πως η τιµή του είναι µηδενική µε την άφιξη στο τέρµα της αλυσίδας των δεικτών next. Απατήσεις µνήµης: 4m /43
44 row col val next 1 1 5 19 2 6 8 15 3 4 6 11 4 3 3 12 5 2 6 9 6 2-3 8.... 2 1 9 16 5 5 8 10 1 5 4 17 /44
45 Μειονεκτήµατα Μεγαλύτερη απαίτηση µνήµης. Μέθοδος δηµιουργίας των δεικτών ; Σπατάλη χρόνου σε σειριακές αναζητήσεις. Αλλοι τρόποι αποθήκευσης Η συµπιεσµένη διαγώνια αποθήκευση, η οδοντωτή διαγώνια αποθήκευση και η µεταβλητή ταινιοειδής αποθήκευση αφορούν σε µήτρες ταινιοεδούς δοµής και ϑα εξεταστούν χωριστά. /45
46 Τµηµατική αποθήκευση κατά στοίχους Οταν η σποραδική (n n)-µήτρα A αποτελείται από τετράγωνα πυκνά τµήµατα (υποµήτρες) δοµικά οργανωµένες, µπορούµε τότε να εκµεταλλευθούµε αυτό το γεγονός για την αποθήκευσή της. Ας είναι n s η διάσταση του κάθε τετραγώνου και K το πλήθος τους. Τότε η απαίτηση µνήµης είναι Kn 2 s. Θέσε n b = n/n s. Η αποθήκευση της A, σε αναλογία µε την συµπιεσµένη αποθήκευση κατά στοίχους, απαιτεί µία µήτρα val(1 : K,1 : n s,1 : n s ) για τις τιµές, ένα διάνυσµα col_ptr(1 : K) για την στήλη του πρώτου στοιχείου κάθε τετραγώνου και ένα διάνυσµα row_ptr(1 : n b + 1) για τους δείκτες που καταδεικνύουν την αρχή κάθε στοίχου τετραγώνου στοval και στο col_ptr. Τα κέρδη σε µνήµη αλλά και σε χρόνο πρόσβασης στα στοιχεία είναι σηµαντικά σε σύγκριση µε την συµπιεσµένη αποθήκευση για µεγάλο n s. /46
49 Ασκήσεις 1. Ν αναπτυχθούν αλγόριθµοι υπολογισµού του γινοµένου µήτρας-διανύσµατος Ab όταν η A είναι σποραδική και αποθηκευµένη α) συµπιεσµένη κατά στοίχους, ϐ) συµπιεσµένη κατά στήλες, γ) τυχαία, δ) τυχαία µε δείκτες σάρωσης. 2. Ν αναπτυχθεί αλγόριθµος που µετατρέπει την τυχαία αποθήκευση σε τυχαία µε δείκτες σάρωσης. 3. Ν αναπτυχθεί αλγόριθµος που µετατρέπει την τυχαία αποθήκευση µε δείκτες σάρωσης σε συµπιεσµένη κατά στοίχους. /49
50 4. Ν αναπτυχθεί αλγόριθµος που µετατρέπει τη συµπιεσµένη αποθήκευση κατά στοίχους σε κατά στήλες. 5. Υπόθεσε ότι η συµµετρική σποραδική µήτρα A έχει αποθηκευµένο το άνω τριγωνικό τµήµα της κατά στοίχους. Να επεκταθεί η δοµή έτσι ώστε ν αποθηκευτούν και τα υπό την διαγώνιο στοιχεία της. Ν αναπτυχθεί αλγόριθµος και για το αντίστροφο. 6. Ν αναπτυχθούν αλγόριθµοι πρόσθεσης δύο σποραδικών µητρών για τις περιπτώσεις της 1. 7. Ν αναπτυχθούν αλγόριθµοι αναστροφής σποραδικής µήτρας για τις περιπτώσεις της 1. /49
1 οµές εδοµένων στην Fortran TYPE, PUBLIC : : Sparse_Matrix INTEGER, ALLOCATABLE, DIMENSION ( : ) : : Fi rs t, Adjacent REAL, ALLOCATABLE, DIMENSION ( : ) : : Value INTEGER : : NumRows, NumCols, NonZeroes, MaxSize END TYPE TYPE, EXTENDS( Sparse_Matrix ), PUBLIC : : Sparse_Matrix_w_Diagonal REAL, ALLOCATABLE, DIMENSION ( : ) : : Diagonal END TYPE April 9, 2011 A.M. /1
2 Η δεύτερη δοµή έχει νόηµα µόνον για τετραγωνικές µήτρες (NumRows=NumCols=Order) και δη για συµµετρικές. Το MaxSize NonZeroes στην πρώτη και MaxSize NonZeroes-Order στην δεύτερη περίπτωση. Η ίδια δοµή για αποθήκευση κατά στοίχο, κατά στήλη ή κατά τριπλότητα! Η ίδια δοµή για την σύµµετρη και την συµµετρική περίπτωση. Ενδεχοµένως ϑα έπρεπε ν αποθηκεύεται και η περίπτωση. /2
3 Ιεραρχία από τα γραφήµατα Είναι δυνατόν ν αναπτυχθούν οι σποραδικές µήτρες στα πλαίσια µιας ιεραρχίας κλάσεων εκκινώντας από µία δοµή για γραφήµατα : TYPE, PUBLIC : : Adjacency_List INTEGER, ALLOCATABLE, DIMENSION ( : ) : : FirstOut, Adjacent INTEGER : : NumNodes, NumArcs, MaxSize END TYPE TYPE, EXTENDS( Adjacency_List ), PUBLIC : : Weighted_Graph REAL, ALLOCATABLE, DIMENSION ( : ) : : Weight END TYPE /3
4 TYPE, EXTENDS( Weighted_Graph ), PUBLIC : : Sparse_Matrix INTEGER : : NumCols END TYPE TYPE, EXTENDS( Sparse_Matrix ), PUBLIC : : Sparse_Matrix_w_Diagonal REAL, ALLOCATABLE, DIMENSION ( : ) : : Diagonal END TYPE Ταυτοποιούµε NumNodes (πλήθος κόµβων) µε το πλήθος στοίχων και NumArcs (πλήθος τόξων) µε το πλήθος µη-µηδενικών στοιχείων. /4