18namespace layer1_foundations {
19namespace data_structures {
28ostream&
operator<<(ostream& ost, partitionstack& p)
107 int f_v = (verbose_level >= 1);
111 cout <<
"partitionstack::allocate n=" <<
n << endl;
125 cout <<
"partitionstack::allocate startCell" << endl;
135 cout <<
"partitionstack::allocate subset_first" << endl;
145 for (i = 0; i <
n; i++) {
155 cout <<
"partitionstack::allocate done" << endl;
161 int f_v = (verbose_level >= 1);
164 cout <<
"partitionstack::allocate_with_two_classes n=" <<
n <<
" v=" << v <<
" b=" << b << endl;
173 cout <<
"partitionstack::allocate_with_two_classes done" << endl;
190 cout <<
"partitionstack::is_discrete ht > n" << endl;
203 int min_size = 0, cell, i;
206 for (i = 0; i <
ht; i++) {
210 if (cell == -1 ||
cellSize[i] < min_size) {
216 cout <<
"partitionstack::smallest_non_discrete_cell "
217 "partition is discrete" << endl;
224 int max_size = 0, cell, i;
227 for (i = 0; i <
ht; i++) {
231 if (cell == -1 ||
cellSize[i] > max_size) {
237 cout <<
"partitionstack::biggest_non_discrete_cell "
238 "partition is discrete" << endl;
245 int min_size = 0, cell, i;
249 for (i = 0; i <
ht; i++) {
253 if (
startCell[i] >= first_column_element) {
256 if (cell == -1 ||
cellSize[i] < min_size) {
269 int max_size = 0, cell, i;
273 for (i = 0; i <
ht; i++) {
277 if (
startCell[i] >= first_column_element) {
280 if (cell == -1 ||
cellSize[i] > max_size) {
297 while (i < from + len) {
310 for (i = 0; i < size; i++) {
330 for (i = 0; i <
ht; i++) {
338 int i, first, len, a;
345 cout <<
"before sort, cell " << cell <<
" : " << endl;
346 for (i = 0; i < len; i++) {
353 cout <<
"after sort, cell " << cell <<
" : " << endl;
354 for (i = 0; i < len; i++) {
361 for (i = 0; i < len; i++) {
362 for (j = i + 1; j < len; j++) {
372 for (i = 0; i < len; i++) {
380 int i, j, first, len, half_len, a, b;
385 for (i = 0; i < half_len; i++) {
392 for (i = 0; i < len; i++) {
402 for (i = 0; i <
n; i++) {
405 cout <<
"partitionstack::check "
406 "invPointList corrupt" << endl;
407 cout <<
"i=" << i <<
" pointList[i]=a=" << a
420 cout <<
"ht = " <<
ht << endl;
421 cout <<
"i : first : len " << endl;
422 for (i = 0; i <
ht; i++) {
425 cout << setw(5) << i <<
" : " << setw(5) << first
426 <<
" : " << setw(5) << len << endl;
428 cout <<
"i : pointList : invPointList : cellNumber" << endl;
429 for (i = 0; i <
n; i++) {
430 cout << setw(5) << i <<
" : " << setw(5) <<
pointList[i]
445 ost <<
"C_{" << idx <<
"} of size " << len
446 <<
" descendant of " <<
parent[idx] <<
" is ";
447 for (j = 0; j < len; j++) {
452 ost <<
"_{" << len <<
"}" << endl;
460 for (i = 0; i <
ht; i++) {
463 ost <<
"$\\\\" << endl;
477 ost <<
"C_{" << idx <<
"} = ";
478 for (j = 0; j < len; j++) {
482 for (j = 0; j < len; j++) {
483 S[j] -= first_column_element;
488 for (j = 0; j < len; j++) {
494 ost <<
"_{" << len <<
"}" << endl;
508 ost <<
"C_{" << idx <<
"} of size " << len
509 <<
" descendant of C_{" <<
parent[idx] <<
"} is ";
510 for (j = 0; j < len; j++) {
514 for (j = 0; j < len; j++) {
515 S[j] -= first_column_element;
526 for (j = 0; j < len; j++) {
533 ost <<
"_{" << len <<
"}" << endl;
541 for (i = 0; i <
ht; i++) {
550 for (i = 0; i <
ht; i++) {
557 int i, j, first, len, a, prev_pt, j0;
558 int f_erroneous2 =
FALSE;
563 for (i = 0; i <
ht; i++) {
570 for (j = 1; j <= len; j++) {
572 if (j == len ||
pointList[first + j] != prev_pt + 1) {
581 cout <<
pointList[first + j0] <<
"-" << prev_pt;
600 ost <<
" ) height " <<
ht <<
" class sizes: (";
601 for (i = 0; i <
ht; i++) {
609 for (i = 0; i <
ht; i++) {
614 cout <<
"erroneous partition stack: invPointList corrupt" << endl;
627 for (j = 0; j < len; j++) {
643 for (j = 0; j < len; j++) {
653 int *&cell,
int &cell_sz,
int verbose_level)
655 int f_v = (verbose_level >= 1);
660 cout <<
"partitionstack::get_cell i=" << i << endl;
665 for (j = 0; j < cell_sz; j++) {
673 cout <<
"partitionstack::get_cell i=" << i <<
" done" << endl;
678 long int *&cell,
int &cell_sz,
int verbose_level)
680 int f_v = (verbose_level >= 1);
685 cout <<
"partitionstack::get_cell_lint i=" << i << endl;
690 for (j = 0; j < cell_sz; j++) {
699 cout <<
"partitionstack::get_cell_lint i=" << i <<
" done" << endl;
705 int f_v = (verbose_level >= 1);
709 cout <<
"partitionstack::get_row_classes" << endl;
735 for (i = 0; i < nb_row_classes; i++) {
751 cout <<
"partitionstack::get_row_classes" << endl;
758 int f_v = (verbose_level >= 1);
762 cout <<
"partitionstack::get_column_classes" << endl;
788 for (i = 0; i < nb_col_classes; i++) {
796 for (j = 0; j < cell_sz; j++) {
797 cell[j] -= first_column_element;
807 cout <<
"partitionstack::get_column_classes" << endl;
814 std::string &fname,
int verbose_level)
816 int f_v = (verbose_level >= 1);
822 cout <<
"partitionstack::write_cell_to_file "
823 "writing cell " << i <<
" to file " << fname << endl;
828 for (j = 0; j < len; j++) {
836 std::string &fname,
int verbose_level)
838 int f_v = (verbose_level >= 1);
839 int j, first, len, m = 0;
844 cout <<
"partitionstack::write_cell_to_file_points_or_lines "
845 "writing cell " << i <<
" to file " << fname << endl;
853 for (j = 0; j < len; j++) {
877 int size,
long int *set,
int verbose_level)
879 int f_v = (verbose_level >= 1);
883 cout <<
"partitionstack::refine_arbitrary_set_lint" << endl;
889 cout <<
"partitionstack::refine_arbitrary_set_lint done" << endl;
895 int size,
int *set,
int verbose_level)
897 int f_v = (verbose_level >= 1);
898 int f_vv = (verbose_level >= 2);
900 int i, sz, sz2, a, c, d;
903 cout <<
"partitionstack::refine_arbitrary_set" << endl;
911 for (i = 0; i < size; i++) {
921 for (i = 1; i < sz; i++) {
939 cout <<
"partitionstack::refine_arbitrary_set finished" << endl;
959 int set_size,
int f_front,
int verbose_level)
961 int f_v = (verbose_level >= 1);
962 int f_vv = (verbose_level >= 2);
971 cout <<
"split_multiple_cells() for subset { ";
972 for (i = 0; i < set_size; i++) {
973 cout << set[i] <<
" ";
981 for (i = 0; i < set_size; i++) {
984 for (i = 0; i < set_size; i++) {
991 cout <<
"cell_nb : ";
996 while (nb_done < set_size) {
997 for (i = 0; i < set_size; i++) {
1005 for (; i < set_size; i++) {
1006 if (!f_done[i] && cell_nb[i] == c) {
1007 set2[set2_sz++] = set[i];
1013 cout <<
"splitting set of size " << set2_sz <<
" which is ";
1015 cout <<
" from class " << c << endl;
1019 cout <<
"after split:" << endl;
1029 int *set,
int set_size,
int f_front,
int verbose_level)
1031 int f_v = (verbose_level >= 1);
1032 int first_column_element =
startCell[1];
1036 cout <<
"partitionstack::split_line_cell_front_or_back" << endl;
1039 for (i = 0; i < set_size; i++) {
1040 set2[i] = set[i] + first_column_element;
1047 int *set,
int set_size,
int f_front,
int verbose_level)
1049 int f_v = (verbose_level >= 1);
1050 int f_vv = (verbose_level >= 2);
1051 int a, b, c, f, l, j, pos_a, new_pos, i;
1054 cout <<
"split_cell_front_or_back for subset { ";
1055 for (i = 0; i < set_size; i++) {
1056 cout << set[i] <<
" ";
1058 cout <<
"}" << endl;
1061 if (set_size <= 0) {
1062 cout <<
"partitionstack::split_cell_front_or_back "
1063 "set_size <= 0" << endl;
1072 cout <<
"split_cell_front_or_back c=" << c <<
" f=" << f
1073 <<
" l=" << l << endl;
1075 if (set_size == l) {
1079 else if (set_size > l) {
1080 cout <<
"split_cell_front_or_back "
1081 "subset_size > cellSize" << endl;
1082 cout <<
"split_cell_front_or_back for subset { ";
1083 for (i = 0; i < set_size; i++) {
1084 cout << set[i] <<
" ";
1086 cout <<
"}" << endl;
1091 for (j = 0; j < set_size; j++) {
1092 a = set[set_size - 1 - j];
1098 new_pos = f + l - 1 - j;
1101 cout <<
"split_cell_front_or_back: a=" << a
1102 <<
" pos_a=" << pos_a <<
" new_pos="
1105 if (pos_a != new_pos) {
1124 for (j = 0; j < l - set_size; j++) {
1139 cout <<
"split_cell_front_or_back() done" << endl;
1144 int *set,
int set_size,
int verbose_level)
1146 int f_v = (verbose_level >= 1);
1149 cout <<
"partitionstack::split_cell" << endl;
1156 int i, f1, f2, l1, l2, p;
1164 if (f1 + l1 != f2) {
1165 cout <<
"partitionstack::join_cell f1 + l1 != f2" << endl;
1166 cout <<
"cell = " << p << endl;
1171 for (i = 0; i < l2; i++) {
1186#ifdef SPLIT_MULTIPLY
1200#ifdef SPLIT_MULTIPLY
1206 for (i = 0; i < len; i++)
1217 int first_column_element =
startCell[1];
1220 cout <<
"partitionstack::is_row_class c >= ht, fatal" << endl;
1234 cout <<
"partitionstack::is_col_class c >= ht, fatal" << endl;
1246 int *&row_classes,
int *&row_class_inv,
int &nb_row_classes,
1247 int *&col_classes,
int *&col_class_inv,
int &nb_col_classes,
1257 col_classes, nb_col_classes, verbose_level - 1);
1258 for (i = 0; i <
ht; i++) {
1259 row_class_inv[i] = col_class_inv[i] = -1;
1261 for (i = 0; i < nb_row_classes; i++) {
1263 row_class_inv[c] = i;
1265 for (i = 0; i < nb_col_classes; i++) {
1267 col_class_inv[c] = i;
1272 int *row_classes,
int nb_row_classes,
1273 int *col_classes,
int nb_col_classes,
1274 int *row_perm,
int *row_perm_inv,
1275 int *col_perm,
int *col_perm_inv)
1277 int i, j, c, a, f, l, pos;
1278 int first_column_element =
startCell[1];
1281 for (i = 0; i < nb_row_classes; i++) {
1285 for (j = 0; j < l; j++) {
1287 row_perm_inv[pos] = a;
1293 for (i = 0; i < nb_col_classes; i++) {
1297 for (j = 0; j < l; j++) {
1298 a =
pointList[f + j] - first_column_element;
1299 col_perm_inv[pos] = a;
1307 int *row_classes,
int &nb_row_classes,
1308 int *col_classes,
int &nb_col_classes,
int verbose_level)
1311 int f_v = (verbose_level >= 1);
1312 int f_vv = (verbose_level >= 2);
1315 cout <<
"partitionstack::get_row_and_col_classes n = " <<
n << endl;
1320 for (c = 0; c <
ht; c++) {
1322 row_classes[nb_row_classes++] = c;
1325 col_classes[nb_col_classes++] = c;
1333 cout << i <<
" : " << c << endl;
1336 row_classes[nb_row_classes++] = c;
1339 col_classes[nb_col_classes++] = c;
1347 int *V,
int nb_V,
int *B,
int nb_B,
int verbose_level)
1349 int f_v = (verbose_level >= 1);
1353 cout <<
"partitionstack::initial_matrix_decomposition "
1364 for (i = 1; i < nb_V; i++) {
1371 for (i = 1; i < nb_B; i++) {
1378 cout <<
"partitionstack::initial_matrix_decomposition "
1386 int ancestor_cell,
int verbose_level)
1388 int f_v = (verbose_level >= 1);
1392 cout <<
"is_descendant_of: cell=" << cell << endl;
1395 if (cell == ancestor_cell) {
1397 cout <<
"is_descendant_of: "
1398 "cell == ancestor_cell, so yes" << endl;
1405 cout <<
"is_descendant_of: c=" << c << endl;
1407 if (c == ancestor_cell) {
1409 cout <<
"is_descendant_of: "
1410 "c == ancestor_cell, so yes" << endl;
1416 cout <<
"is_descendant_of: parent[c] == c, so no" << endl;
1422 int ancestor_cell,
int level,
int verbose_level)
1424 int f_v = (verbose_level >= 1);
1428 cout <<
"is_descendant_of_at_level: cell=" << cell
1429 <<
" ancestor_cell = " << ancestor_cell
1430 <<
" level = " << level << endl;
1432 if (cell == ancestor_cell) {
1434 cout <<
"is_descendant_of_at_level: "
1435 "cell == ancestor_cell, so yes" << endl;
1442 cout <<
"is_descendant_of_at_level: "
1443 "c < level, so no" << endl;
1450 cout <<
"is_descendant_of_at_level: c=" << c << endl;
1452 if (c == ancestor_cell) {
1454 cout <<
"is_descendant_of_at_level: "
1455 "c == ancestor_cell, so yes" << endl;
1461 cout <<
"is_descendant_of_at_level: "
1462 "c < level, so no" << endl;
1468 cout <<
"is_descendant_of_at_level: "
1469 "parent[c] == c, so no" << endl;
1478 for (i = level; i <
ht; i++) {
1494 int *row_classes,
int nb_row_classes,
1495 int *col_classes,
int nb_col_classes)
1497 int i, j, c, f, l, a;
1498 int first_column_element =
startCell[1];
1500 for (i = 0; i < nb_row_classes; i++) {
1504 ost <<
"${\\cal V}_" << i <<
" = \\{";
1505 for (j = 0; j < l; j++) {
1511 if ((j + 1) % 25 == 0) {
1512 ost <<
"\\\\" << endl;
1515 ost <<
"\\}$ of size " << l <<
"\\\\" << endl;
1517 for (i = 0; i < nb_col_classes; i++) {
1521 ost <<
"${\\cal B}_" << i <<
" = \\{";
1522 for (j = 0; j < l; j++) {
1523 a =
pointList[f + j] - first_column_element;
1528 if ((j + 1) % 25 == 0) {
1529 ost <<
"\\\\" << endl;
1532 ost <<
"\\}$ of size " << l <<
"\\\\" << endl;
1537 int *row_classes,
int nb_row_classes,
1538 int *col_classes,
int nb_col_classes,
1539 int *scheme,
int marker1,
int marker2)
1543 if (marker1 >= 0) ost <<
" ";
1544 if (marker2 >= 0) ost <<
" ";
1547 for (j = 0; j < nb_col_classes; j++) {
1549 ost << setw(6) <<
cellSize[c] <<
"_{" << setw(3) << c <<
"}";
1553 if (marker1 >= 0) ost <<
"--";
1554 if (marker2 >= 0) ost <<
"--";
1555 ost <<
"---------------";
1556 for (i = 0; i < nb_col_classes; i++) {
1557 ost <<
"------------";
1560 for (i = 0; i < nb_row_classes; i++) {
1562 ost << setw(6) <<
cellSize[c] <<
"_{" << setw(3) << c <<
"}";
1581 for (j = 0; j < nb_col_classes; j++) {
1582 ost << setw(12) << scheme[i * nb_col_classes + j];
1591 int *row_classes,
int nb_row_classes,
1592 int *col_classes,
int nb_col_classes,
1597 ost <<
"\\begin{align*}" << endl;
1598 ost <<
"\\begin{array}{r|*{" << nb_col_classes <<
"}{r}}" << endl;
1600 for (j = 0; j < nb_col_classes; j++) {
1603 ost << setw(6) <<
cellSize[c] <<
"_{" << setw(3) << c <<
"}";
1605 ost <<
"\\\\" << endl;
1606 ost <<
"\\hline" << endl;
1607 for (i = 0; i < nb_row_classes; i++) {
1609 ost << setw(6) <<
cellSize[c] <<
"_{" << setw(3) << c <<
"}";
1611 for (j = 0; j < nb_col_classes; j++) {
1612 ost <<
" & " << setw(12) << scheme[i * nb_col_classes + j];
1614 ost <<
"\\\\" << endl;
1616 ost <<
"\\end{array}" << endl;
1617 ost <<
"\\end{align*}" << endl;
1621 int *row_classes,
int nb_row_classes,
1622 int *col_classes,
int nb_col_classes,
1623 int *row_scheme,
int *col_scheme,
int f_print_subscripts)
1626 row_classes, nb_row_classes,
1627 col_classes, nb_col_classes,
1628 row_scheme, col_scheme, f_print_subscripts);
1632 ostream &ost,
int f_enter_math_mode,
1633 int *row_classes,
int nb_row_classes,
1634 int *col_classes,
int nb_col_classes,
1635 int *row_scheme,
int *col_scheme,
int f_print_subscripts)
1639 if (f_enter_math_mode) {
1640 ost <<
"\\begin{align*}" << endl;
1642 ost <<
"\\begin{array}{r|*{" << nb_col_classes <<
"}{r}}" << endl;
1644 for (j = 0; j < nb_col_classes; j++) {
1648 if (f_print_subscripts) {
1649 ost <<
"_{" << setw(3) << c <<
"}";
1652 ost <<
"\\\\" << endl;
1653 ost <<
"\\hline" << endl;
1654 for (i = 0; i < nb_row_classes; i++) {
1657 if (f_print_subscripts) {
1658 ost <<
"_{" << setw(3) << c <<
"}";
1661 for (j = 0; j < nb_col_classes; j++) {
1662 ost <<
" & " << setw(12) << row_scheme[i * nb_col_classes + j]
1663 <<
"\\backslash " << col_scheme[i * nb_col_classes + j];
1665 ost <<
"\\\\" << endl;
1667 ost <<
"\\end{array}" << endl;
1668 if (f_enter_math_mode) {
1669 ost <<
"\\end{align*}" << endl;
1674 std::ostream &ost,
int f_enter_math_mode,
1675 int *row_classes,
int nb_row_classes,
1676 int *col_classes,
int nb_col_classes,
1677 int *row_scheme,
int f_print_subscripts)
1681 ost <<
"%{\\renewcommand{\\arraycolsep}{1pt}" << endl;
1682 if (f_enter_math_mode) {
1683 ost <<
"\\begin{align*}" << endl;
1685 ost <<
"\\begin{array}{r|*{" << nb_col_classes <<
"}{r}}" << endl;
1686 ost <<
"\\rightarrow ";
1687 for (j = 0; j < nb_col_classes; j++) {
1691 if (f_print_subscripts) {
1692 ost <<
"_{" << setw(3) << c <<
"}";
1695 ost <<
"\\\\" << endl;
1696 ost <<
"\\hline" << endl;
1697 for (i = 0; i < nb_row_classes; i++) {
1700 if (f_print_subscripts) {
1701 ost <<
"_{" << setw(3) << c <<
"}";
1704 for (j = 0; j < nb_col_classes; j++) {
1705 ost <<
" & " << setw(12) << row_scheme[i * nb_col_classes + j];
1707 ost <<
"\\\\" << endl;
1709 ost <<
"\\end{array}" << endl;
1710 if (f_enter_math_mode) {
1711 ost <<
"\\end{align*}" << endl;
1713 ost <<
"%}" << endl;
1717 ostream &ost,
int f_enter_math_mode,
1718 int *row_classes,
int nb_row_classes,
1719 int *col_classes,
int nb_col_classes,
1720 int *col_scheme,
int f_print_subscripts)
1724 ost <<
"%{\\renewcommand{\\arraycolsep}{1pt}" << endl;
1725 if (f_enter_math_mode) {
1726 ost <<
"\\begin{align*}" << endl;
1728 ost <<
"\\begin{array}{r|*{" << nb_col_classes <<
"}{r}}" << endl;
1729 ost <<
"\\downarrow ";
1730 for (j = 0; j < nb_col_classes; j++) {
1734 if (f_print_subscripts) {
1735 ost <<
"_{" << setw(3) << c <<
"}";
1738 ost <<
"\\\\" << endl;
1739 ost <<
"\\hline" << endl;
1740 for (i = 0; i < nb_row_classes; i++) {
1743 if (f_print_subscripts) {
1744 ost <<
"_{" << setw(3) << c <<
"}";
1747 for (j = 0; j < nb_col_classes; j++) {
1748 ost <<
" & " << setw(12) << col_scheme[i * nb_col_classes + j];
1750 ost <<
"\\\\" << endl;
1752 ost <<
"\\end{array}" << endl;
1753 if (f_enter_math_mode) {
1754 ost <<
"\\end{align*}" << endl;
1756 ost <<
"%}" << endl;
1760 ostream &ost,
int f_enter_math_mode,
1761 int *row_classes,
int nb_row_classes,
1762 int *col_classes,
int nb_col_classes,
1763 int f_print_subscripts)
1767 if (f_enter_math_mode) {
1768 ost <<
"\\begin{align*}" << endl;
1770 ost <<
"\\begin{array}{r|*{" << nb_col_classes <<
"}{r}}" << endl;
1772 for (j = 0; j < nb_col_classes; j++) {
1776 if (f_print_subscripts) {
1777 ost <<
"_{" << setw(3) << c <<
"}";
1780 ost <<
"\\\\" << endl;
1781 ost <<
"\\hline" << endl;
1782 for (i = 0; i < nb_row_classes; i++) {
1785 if (f_print_subscripts) {
1786 ost <<
"_{" << setw(3) << c <<
"}";
1789 for (j = 0; j < nb_col_classes; j++) {
1792 ost <<
"\\\\" << endl;
1794 ost <<
"\\end{array}" << endl;
1795 if (f_enter_math_mode) {
1796 ost <<
"\\end{align*}" << endl;
1801 int ht0,
int *data,
int depth,
int hash0)
1803 int cell, i, j, first, len, ancestor;
1814 for (cell = 0; cell <
ht0; cell++) {
1824 for (i = 0; i < depth; i++) {
1825 h = Algo.
hashing(h, data[j * depth + i]);
1828 for (cell =
ht0; cell <
ht; cell++) {
1830 h = Algo.
hashing(h, ancestor);
1838 for (i = 0; i < depth; i++) {
1839 h = Algo.
hashing(h, data[j * depth + i]);
1846 int *data,
int depth,
int hash0)
1848 int cell, i, j, first, len, ancestor;
1858 for (cell = 0; cell <
ht0; cell++) {
1868 for (i = 0; i < depth; i++) {
1869 h = Algo.
hashing(h, data[j * depth + i]);
1872 for (cell =
ht0; cell <
ht; cell++) {
1874 h = Algo.
hashing(h, ancestor);
1882 for (i = 0; i < depth; i++) {
1883 h = Algo.
hashing(h, data[j * depth + i]);
1890 int ht0,
int *data,
int depth)
1892 int cell, j, first, ancestor;
1894 cout <<
"the old col parts:" << endl;
1895 for (cell = 0; cell <
ht0; cell++) {
1901 cout <<
"cell " << cell <<
" of size " <<
cellSize[cell] <<
" : ";
1908 cout <<
"no splitting" << endl;
1911 cout <<
"the " <<
ht -
ht0
1912 <<
" n e w col parts that were split off are:" << endl;
1913 for (cell =
ht0; cell <
ht; cell++) {
1917 cout <<
"cell " << cell <<
" of size " <<
cellSize[cell]
1918 <<
" ancestor cell is " << ancestor <<
" : ";
1928 int ht0,
int *data,
int depth)
1930 int cell, j, first, ancestor;
1932 cout <<
"the old row parts:" << endl;
1933 for (cell = 0; cell <
ht0; cell++) {
1939 cout <<
"cell " << cell <<
" of size " <<
cellSize[cell] <<
" : ";
1946 cout <<
"no splitting" << endl;
1949 cout <<
"the " <<
ht -
ht0 <<
" n e w row parts "
1950 "that were split off are:" << endl;
1951 for (cell =
ht0; cell <
ht; cell++) {
1955 cout <<
"cell " << cell <<
" of size " <<
cellSize[cell]
1956 <<
" ancestor cell is " << ancestor <<
" : ";
1967 int length,
int radix,
int verbose_level)
1969 int ma, mi, i, lo, mask;
1970 int f_v = (verbose_level >= 1);
1973 cout <<
"radix sort radix = " << radix
1974 <<
", left = " << left <<
", right = " << right << endl;
1976 if (radix == length) {
1979 if (left == right) {
1982 ma = mi = C[
pointList[left] * length + radix];
1983 for (i = left + 1; i <= right; i++) {
1988 cout <<
"radix sort radix=" << radix
1989 <<
", minimum is " << mi
1990 <<
" maximum is " << ma << endl;
1993 radix_sort(left, right, C, length, radix + 1, verbose_level);
1998 cout <<
"log2 = " << lo << endl;
2000 mask = (1 << (lo - 1));
2002 cout <<
"mask = " << mask << endl;
2008 int *C,
int length,
int radix,
int mask,
int verbose_level)
2011 int f_v = (verbose_level >= 1);
2014 cout <<
"partitionstack::radix_sort_bits() mask = " << mask
2015 <<
" left=" << left <<
" right=" << right << endl;
2017 if (left >= right) {
2021 radix_sort(left, right, C, length, radix + 1, verbose_level);
2027 while (l <= right) {
2028 if (!(C[
pointList[l] * length + radix] & mask)) {
2034 if ((C[
pointList[r] * length + radix] & mask)) {
2045 cout <<
"l = " << l <<
" r = " << r << endl;
2053 if (r == left - 1) {
2055 cout <<
"radix_sort_bits no splitting, all bits 0" << endl;
2058 length, radix, mask, verbose_level);
2060 else if (l == right + 1) {
2062 cout <<
"radix_sort_bits no splitting, all bits 1" << endl;
2065 length, radix, mask, verbose_level);
2069 cout <<
"radix_sort_bits splitting "
2070 "l=" << l <<
" r=" << r << endl;
2073 len = right - l + 1;
2074 for (i = 0; i < len; i++) {
2093 perm_inv[perm[i]] = i;
2094 perm_inv[perm[j]] = j;
2109 int *orbit_first,
int *orbit_len,
int *orbit,
2113 int f_v = (verbose_level >= 1);
2114 int f_vv = (verbose_level >= 2);
2115 int i, j, f, l, cell_idx, cell_size;
2119 cout <<
"partitionstack::split_by_orbit_partition" << endl;
2123 for (i = 0; i < nb_orbits; i++) {
2127 cout <<
"partitionstack::split_by_orbit_partition "
2128 "orbit " << i <<
" first=" << f
2129 <<
" length=" << l << endl;
2131 for (j = 0; j < l; j++) {
2132 Set[j] = orbit[f + j] + offset;
2141 cout <<
"partitionstack::split_by_orbit_partition "
2142 "the subset is not subset of a cell of the "
2143 "partition, error" << endl;
2147 if (l < cell_size) {
2150 cout <<
"orbit " << i <<
" of length=" << l
2151 <<
" is split off from cell " << cell_idx
2152 <<
" to form a n e w cell C_{" <<
ht <<
"}, so "
2153 << cell_size <<
" = " << cell_size - l
2154 <<
" + " << l << endl;
2161 cout <<
"partitionstack::split_by_orbit_partition done" << endl;
catch all class for algorithms
int hashing(int hash0, int a)
void set_print(std::ostream &ost, int *v, int len)
void subset_continguous(int from, int len)
void get_row_and_col_classes(int *row_classes, int &nb_row_classes, int *col_classes, int &nb_col_classes, int verbose_level)
void print_column_refinement_info(int ht0, int *data, int depth)
void get_column_classes(set_of_sets *&Sos, int verbose_level)
int nb_partition_classes(int from, int len)
void print_decomposition_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes)
int smallest_non_discrete_cell()
void split_cell(int verbose_level)
void allocate_and_get_decomposition(int *&row_classes, int *&row_class_inv, int &nb_row_classes, int *&col_classes, int *&col_class_inv, int &nb_col_classes, int verbose_level)
void split_multiple_cells(int *set, int set_size, int f_front, int verbose_level)
void print_tactical_decomposition_scheme_tex_internal(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int *col_scheme, int f_print_subscripts)
void get_cell(int i, int *&cell, int &cell_sz, int verbose_level)
void get_row_and_col_permutation(int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_perm, int *row_perm_inv, int *col_perm, int *col_perm_inv)
int parent_at_height(int h, int cell)
int is_descendant_of(int cell, int ancestor_cell, int verbose_level)
int biggest_non_discrete_cell_rows_preferred()
int smallest_non_discrete_cell_rows_preferred()
void print_classes_points_and_lines(std::ostream &ost)
void split_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
void split_line_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
std::ostream & print(std::ostream &ost)
void print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int f_print_subscripts)
void print_tactical_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int *col_scheme, int f_print_subscripts)
void print_class(std::ostream &ost, int idx)
void get_cell_lint(int i, long int *&cell, int &cell_sz, int verbose_level)
void print_non_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int f_print_subscripts)
void radix_sort(int left, int right, int *C, int length, int radix, int verbose_level)
void reverse_cell(int cell)
void reduce_height(int ht0)
int is_subset_of_cell(int *set, int size, int &cell_idx)
void split_by_orbit_partition(int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int offset, int verbose_level)
void print_class_point_or_line(std::ostream &ost, int idx)
void print_row_refinement_info(int ht0, int *data, int depth)
void radix_sort_bits(int left, int right, int *C, int length, int radix, int mask, int verbose_level)
void print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *col_scheme, int f_print_subscripts)
int hash_column_refinement_info(int ht0, int *data, int depth, int hash0)
void write_cell_to_file(int i, std::string &fname, int verbose_level)
void swap_ij(int *perm, int *perm_inv, int i, int j)
int hash_row_refinement_info(int ht0, int *data, int depth, int hash0)
void allocate_with_two_classes(int n, int v, int b, int verbose_level)
int cellSizeAtLevel(int cell, int level)
void get_row_classes(set_of_sets *&Sos, int verbose_level)
void initial_matrix_decomposition(int nbrows, int nbcols, int *V, int nb_V, int *B, int nb_B, int verbose_level)
void print_classes(std::ostream &ost)
int is_descendant_of_at_level(int cell, int ancestor_cell, int level, int verbose_level)
void refine_arbitrary_set_lint(int size, long int *set, int verbose_level)
void print_cell_latex(std::ostream &ost, int i)
void print_classes_tex(std::ostream &ost)
void write_cell_to_file_points_or_lines(int i, std::string &fname, int verbose_level)
void print_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme)
int biggest_non_discrete_cell()
void isolate_point(int pt)
void refine_arbitrary_set(int size, int *set, int verbose_level)
void print_decomposition_scheme(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme, int marker1, int marker2)
void allocate(int n, int verbose_level)
void print_class_tex(std::ostream &ost, int idx)
void init_simple(int underlying_set_size, int nb_sets, int verbose_level)
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
void int_vec_quicksort_increasingly(int *v, int len)
void lint_vec_heapsort(long int *v, int len)
a collection of functions related to file io
void write_set_to_file(std::string &fname, long int *the_set, int set_size, int verbose_level)
data_structures::int_vec * Int_vec
#define Lint_vec_copy_to_int(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
std::ostream & operator<<(std::ostream &ost, class discreta_base &p)
the orbiter library for the classification of combinatorial objects