Macaulay2 Engine
Loading...
Searching...
No Matches

◆ setSchreyerOrder()

void SchreyerFrame::setSchreyerOrder ( int lev)

Definition at line 572 of file res-schreyer-frame.cpp.

573{
574 auto& myframe = level(lev);
575 auto& myorder = schreyerOrder(lev);
576 myorder.mTieBreaker.resize(myframe.size());
577 // std::cout << "setSchreyerOrder: entering, lev=" << lev << ", nelems=" <<
578 // myframe.size() << std::endl;
579 if (lev == 0)
580 {
581 for (component_index i = 0; i < myorder.mTieBreaker.size(); i++)
582 myorder.mTieBreaker[i] = i;
583 return;
584 }
585
586 auto& prevorder = schreyerOrder(lev - 1);
587 long* tiebreakers = new long[myframe.size()];
588
589 auto n_frame_elems = myframe.size();
590 for (component_index i = 0; i < n_frame_elems; i++)
591 {
592 component_index comp = monoid().get_component(myframe[i].mMonom);
593 tiebreakers[i] = i + n_frame_elems * prevorder.mTieBreaker[comp];
594 }
595 std::stable_sort(tiebreakers, tiebreakers + n_frame_elems);
596
597 for (component_index i = 0; i < n_frame_elems; i++)
598 {
599 myorder.mTieBreaker[tiebreakers[i] % n_frame_elems] = i;
600 }
601 delete[] tiebreakers;
602 // std::cout << " setSchreyerOrder: exiting, lev=" << lev << std::endl;
603}
component_index get_component(res_const_packed_monomial m) const
const ResMonoid & monoid() const
std::vector< FrameElement > & level(int lev)
ResSchreyerOrder & schreyerOrder(int lev)
myword component_index

References ResMonoidDense::get_component(), level(), monoid(), and schreyerOrder().

Referenced by computeNextLevel(), and endLevel().