⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compressor.cpp

📁 用data miming技术进行false prediction
💻 CPP
字号:
#include "Compressor.h"

struct ltstr {
    bool operator() (const size_t h1, const size_t h2) const {
        return (h1 < h2);
    }
};

void Compressor::doTemporalCompression() {
    //cout << "size before temporal compression: " << recordList->size() << endl;

    map<const size_t, vector<Record>* , ltstr> clusterMap;
    hash<string> string_hash;

    vector<Record>::iterator iter;
    for (iter = recordList->begin(); iter != recordList->end(); iter++) {
        Record r = *iter;

        size_t h = string_hash(r.getLocation() + r.getJobId());

        //cout << r << "; hash: " << h << endl;

        map<const size_t, vector<Record>* , ltstr>::iterator curr = clusterMap.find(h);

        if (curr != clusterMap.end()) {
            vector<Record>* clusterList = (*curr).second;
            vector<Record>::iterator clusterIter;
            clusterIter = clusterList->end();
            --clusterIter;
            Record rec = *clusterIter;
            if (abs(rec.getEventTime() - r.getEventTime()) > 300) {
                clusterList->push_back(r);
            }
        } else {
            vector<Record>* clusterList = new vector<Record>;
            clusterList->push_back(r);
            clusterMap[h] = clusterList;
        }
    }
    //cout << "mapSize -> " << clusterMap.size() << endl;

    recordList->clear();

    int clusterSize = 0;
    map<const size_t, vector<Record>* , ltstr>::iterator mapIter;
    for (mapIter = clusterMap.begin(); mapIter != clusterMap.end(); mapIter++) {
        vector<Record>* clusterList = (*mapIter).second;
        clusterSize += clusterList->size();
        for (iter = clusterList->begin(); iter != clusterList->end(); iter++) {
            Record rec = *iter;
            recordList->push_back(rec);
        }
        delete clusterList;
    }

    stable_sort(recordList->begin(), recordList->end());

    //cout << "clusterSize -> " << clusterSize << endl;
    //cout << "size after temporal compression: " << recordList->size() << endl;
};

void Compressor::doSpatialCompression() {
    //cout << "size before spatial compression: " << recordList->size() << endl;

    map<const size_t, vector<Record>* , ltstr> clusterMap;
    hash<string> string_hash;

    vector<Record>::iterator iter;
    for (iter = recordList->begin(); iter != recordList->end(); iter++) {
        Record r = *iter;

        size_t h = string_hash(r.getEntryData() + r.getJobId());

        //cout << r << "; hash: " << h << endl;

        map<const size_t, vector<Record>* , ltstr>::iterator curr = clusterMap.find(h);

        if (curr != clusterMap.end()) {
            vector<Record>* clusterList = (*curr).second;
            vector<Record>::iterator clusterIter;
            clusterIter = clusterList->end();
            --clusterIter;
            Record rec = *clusterIter;
            if (abs(rec.getEventTime() - r.getEventTime()) > 300) {
                clusterList->push_back(r);
            }
        } else {
            vector<Record>* clusterList = new vector<Record>;
            clusterList->push_back(r);
            clusterMap[h] = clusterList;
        }
    }
    //cout << "mapSize -> " << clusterMap.size() << endl;

    recordList->clear();

    int clusterSize = 0;
    map<const size_t, vector<Record>* , ltstr>::iterator mapIter;
    for (mapIter = clusterMap.begin(); mapIter != clusterMap.end(); mapIter++) {
        vector<Record>* clusterList = (*mapIter).second;
        clusterSize += clusterList->size();
        for (iter = clusterList->begin(); iter != clusterList->end(); iter++) {
            Record rec = *iter;
            recordList->push_back(rec);
        }
        delete clusterList;
    }

    stable_sort(recordList->begin(), recordList->end());

    for (iter = recordList->begin(); iter != recordList->end(); iter++) {
        cout << *iter << endl;
    }

    //cout << "clusterSize -> " << clusterSize << endl;
    cout << "size after spatial compression: " << recordList->size() << endl;
    //char ch; cin.get(ch);
};

void Compressor::compressList(vector<Record>* recordList) {
    this->recordList = recordList;
    doTemporalCompression();
    doSpatialCompression();
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -