@@ -561,6 +561,7 @@ SpanningForest CCSketchAlg::calc_spanning_forest() {
561561 connected_components ();
562562
563563 SpanningForest ret (num_vertices, spanning_forest);
564+
564565#ifdef VERIFY_SAMPLES_F
565566 verifier->verify_spanning_forests (std::vector<SpanningForest>{ret});
566567#endif
@@ -573,24 +574,7 @@ void CCSketchAlg::filter_sf_edges(SpanningForest &sf) {
573574 dsu_valid = false ;
574575 shared_dsu_valid = false ;
575576
576- auto edges = sf.get_edges ();
577- size_t num = edges.size ();
578- edges.resize (2 * edges.size ());
579-
580- #pragma omp parallel for
581- for (size_t i = 0 ; i < num; i++) {
582- edges[i + num] = edges[i];
583- std::swap (edges[i + num].src , edges[i + num].dst );
584- }
585-
586- auto setup = std::chrono::steady_clock::now ();
587- std::cout << " Setup time = " << std::chrono::duration<double >(setup - start).count () << std::endl;
588-
589- // sort the edges
590- std::sort (edges.begin (), edges.end ());
591-
592- auto sort = std::chrono::steady_clock::now ();
593- std::cout << " Sort time = " << std::chrono::duration<double >(sort - setup).count () << std::endl;
577+ const std::vector<Edge> &edges = sf.get_sorted_adjacency ();
594578
595579#pragma omp parallel
596580 {
@@ -632,8 +616,6 @@ void CCSketchAlg::filter_sf_edges(SpanningForest &sf) {
632616 sketches[edge.src ]->update (static_cast <vec_t >(concat_pairing_fn (edge.src , edge.dst )));
633617 }
634618 }
635- auto del = std::chrono::steady_clock::now ();
636- std::cout << " Delete time = " << std::chrono::duration<double >(del - sort).count () << std::endl;
637619
638620 delete_time += std::chrono::steady_clock::now () - start;
639621}
@@ -644,20 +626,17 @@ std::vector<SpanningForest> CCSketchAlg::calc_disjoint_spanning_forests(size_t k
644626
645627 for (size_t i = 0 ; i < k; i++) {
646628 start = std::chrono::steady_clock::now ();
647- SpanningForest sf = calc_spanning_forest ();
648- SFs.push_back (sf);
629+ SFs.push_back (calc_spanning_forest ());
649630 query_time += std::chrono::steady_clock::now () - start;
650631
651- filter_sf_edges (sf );
632+ filter_sf_edges (SFs[SFs. size () - 1 ] );
652633 }
653634
654635 // revert the state of the sketches to remove all deletions
655636 for (auto &sf : SFs) {
656637 filter_sf_edges (sf);
657638 }
658639
659- std::cout << " Number of SFs: " << SFs.size () << std::endl;
660-
661640#ifdef VERIFY_SAMPLES_F
662641 verifier->verify_spanning_forests (SFs);
663642#endif
0 commit comments