Prima pagină » Cum se dezvoltă »
Sprintul din ianuarie 2010¶
- Compilarea Temeliei în ținte
- shared object (.so) [OK]
- dynamic-link library (.dll) [FAIL]
- Implementarea unei noi structuri de date: matrice rară (sparse matrix)
- Diverse implementări de graf
- Cu listă de adiacență
- Cu matrice rară
Descriere¶
Evoluție¶
- [19-01-2010] Matrice rară implementată
- De ce țin 2 păduri de arbori în oglindă ?
- Pentru că poți decide unde să cauți o cheie: deasupra diagonalei principale sau sub ea
1 /*!
2 * @brief Returns key at position in a sparse_matrix.
3 * Complexity O(min(rows, columns))
4 *
5 * @param Sparse matrix
6 * @param Row
7 * @param Column
8 * @param Additional info about the distribution of matrix elements; -1
9 * for row dense matrix, 1 for column dense matrix and 0 if you don't
10 * have any opinion about your matrix
11 */
12 void *sparse_matrix_get_key_at(sparse_matrix_t sparse_matrix, int row,
13 int column, int preference);
- Pentru că numărul de chei este foarte mic și oglindirea ar trebui să fie mică
1 struct _sparse_matrix_t
2 {
3 /*! tree of rows with not null keys */
4 red_black_tree_t *rows;
5
6 /*! tree of columns with not null keys */
7 red_black_tree_t *columns;
8
9 /*! number of rows */
10 int n_rows;
11
12 /*! number of columns */
13 int n_columns;
14
15 /*! maximum not null keys */
16 int size;
17
18 /*! number of not null keys */
19 int not_null;
20 };
21
22 struct _sparse_matrix_key_t
23 {
24 int index;
25 void *key;
26 };
- Pentru fiecare linie și coloană țin un arbore roșu negru în care inserez informații lipsă: cheie și index
- Un index îl știu deja pentru arborele este deja referit.
- De ce pădure de arbori și nu o variantă mai simplă, standard, bazată pe liste sau vectori ?
- Pentru că Temelia este o bibliotecă cu utilizare generică, nu are o anumită țintă și operațiile pe arborii Roșu-Negru sunt echilibrat implementate
- Din testele de performanță reiese că arborii Roșu-Negru obțin cei mai buni timpi pentru operațiile de uz general: inserție, căutare, ștergere
- [20-01-2010] Îmbunătățire matrici rare
- 3 variante de matrici rare
samples(SPARSE_MATRIX_ROW_DENSE);
samples(SPARSE_MATRIX_COLUMN_DENSE);
samples(SPARSE_MATRIX_ROW_DENSE | SPARSE_MATRIX_COLUMN_DENSE);
- Fiecare varianta alocă o listă de arbori Roșu-Negru, în care ține vecinii
- Varianta ROW_DENSE folosește o pădure de arbori doar pentru reținerea liniilor, pădurea de arbori pentru coloane este nulă
- Varianta COLUMN_DENSE este asemănătoare cu ROW_DENSE, diferența fiind entitatea asupra căreia lucrează: coloană sau linie
- ROW_DENSE | COLUMN_DENSE activează cele două păduri de arbori
ROW_DENSE: total heap usage: 110 allocs, 110 frees, 1,648 bytes allocated
COLUMN_DENSE: total heap usage: 124 allocs, 124 frees, 2,336 bytes allocated
ROW_DENSE | COLUMN_DENSE: total heap usage: 225 allocs, 225 frees, 3,664 bytes allocated
- Diferența între ROW_DENSE și COLUMN_DENSE este dată de numărul de arbori alocați; matricile de test nu sunt toate pătratice
Disponibil și în:
HTML
TXT