-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAutoAnnotator.h
36 lines (32 loc) · 1.21 KB
/
AutoAnnotator.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright (c) 2016 Simon Racz <simonracz@gmail.com>
#pragma once
#include <vector>
class AutoAnnotator {
private:
std::vector<int> mQueues;
int mDimension;
int mLength;
std::vector<int> mBestDistribution;
int mBestWaste;
bool taskIsEmpty(int taskId);
int calculateWaste(const std::vector<int>& distribution);
void calculateOptimum(std::vector<int>& workQueue, std::vector<int>& distribution, int taskId);
std::vector<int> formatDistribution(std::vector<int> distribution);
bool tryAssignTaskToNode(std::vector<int>& workQueue, int taskId, int nodeId);
void removeAssignedTaskFromNode(std::vector<int>& workQueue, int taskId, int nodeId);
void checkAndSaveDistribution(const std::vector<int>& distribution);
public:
AutoAnnotator(const std::vector<int>& queues, int dimension)
: mQueues(queues), mDimension(dimension), mLength(queues.size() / 2 / dimension) {
mBestDistribution = std::vector<int>(mLength, mLength);
mBestWaste = calculateWaste(mBestDistribution);
}
/**
Calculates one optimal solution.
*/
std::vector<int> annotate();
/**
Pretty prints the stored best distribution.
*/
void printDistribution();
};