COMBINATORIAL_BLAS 1.6
 
Loading...
Searching...
No Matches
graph_preprocessor.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <string>
3#include <utility>
4#include <map>
5#include <cstdio>
6#include <vector>
7#include <sys/file.h>
8#include <stdint.h>
9#include <algorithm>
10
11
12using namespace std;
13
14template<typename _ForwardIterator>
15bool is_sorted(_ForwardIterator __first, _ForwardIterator __last)
16{
17 if (__first == __last)
18 return true;
19
20 _ForwardIterator __next = __first;
21 for (++__next; __next != __last; __first = __next, ++__next)
22 if (*__next < *__first)
23 return false;
24 return true;
25}
26
27template<typename _ForwardIter, typename T>
28void iota(_ForwardIter __first, _ForwardIter __last, T __value)
29{
30 while (__first != __last)
31 *__first++ = __value++;
32}
33
34
35int main()
36{
37 int64_t nverts = 133633040;
38 int64_t nedges = 5507679822;
39 FILE * infp = fopen("uk-union.graph.bin", "rb");
40
41 uint32_t * gen_edges = new uint32_t[2*nedges];
42 fread(gen_edges, 2*nedges, sizeof(uint32_t), infp);
43 cout << "Read data" << endl;
44
45 vector< vector<uint32_t> > adj(nverts);
46 vector< uint32_t > shuffler(nverts);
47 iota(shuffler.begin(), shuffler.end(), static_cast<uint32_t>(0));
48 random_shuffle ( shuffler.begin(), shuffler.end() );
49
50 for(int64_t i=0; i< 2*nedges; i+=2)
51 {
52 adj[shuffler[gen_edges[i]]].push_back(shuffler[gen_edges[i+1]]);
53 adj[shuffler[gen_edges[i+1]]].push_back(shuffler[gen_edges[i]]);
54 }
55 cout << "Made adjacencies" << endl;
56 delete [] gen_edges;
57
58 FILE * outp = fopen("uk-union.symmetric.bin", "wb");
59
60 int64_t count = 0;
61 for(int64_t i=0; i< nverts; ++i)
62 {
63 uint32_t edge[2];
64 edge[0] = i;
65 sort(adj[i].begin(), adj[i].end());
66 vector<uint32_t>::iterator p_end = unique(adj[i].begin(), adj[i].end()); // move consecutive duplicates past the end, store the new end
67 for(vector<uint32_t>::iterator p = adj[i].begin(); p != p_end; ++p)
68 {
69 edge[1] = *p;
70 fwrite(edge, 1, 2*sizeof(uint32_t), outp);
71 ++count;
72 }
73 }
74 fclose(outp);
75 cout << "Number of edges: " << count << endl;
76}
77
void iota(_ForwardIter __first, _ForwardIter __last, T __value)
bool is_sorted(_ForwardIterator __first, _ForwardIterator __last)
int main()
unsigned int uint32_t
Definition stdint.h:80