135 lines
2.9 KiB
C
135 lines
2.9 KiB
C
|
|
/************************************************************************/
|
|||
|
|
/*
|
|||
|
|
AdvanceCEI 0621.2007 v1.1
|
|||
|
|
Yao Qiu-lin (yaoqiulin@software.ict.ac.cn)
|
|||
|
|
|
|||
|
|
<EFBFBD>ģ<EFBFBD>
|
|||
|
|
1. תΪOO<EFBFBD><EFBFBD>ʽ
|
|||
|
|
2. <EFBFBD>ļ<EFBFBD><EFBFBD>ӿڸ<EFBFBD>Ϊ<EFBFBD>ڴ<EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
|
|||
|
|
ע<EFBFBD>⣺ PreProcessing<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>䣬<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
|
|||
|
|
<EFBFBD><EFBFBD>Ȼʵ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ʱ֧<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>insertIntvl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QueryInterval<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>䣬<EFBFBD><EFBFBD>ôӦ<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>伯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
/************************************************************************/
|
|||
|
|
|
|||
|
|
#ifndef _ADVANCECEI_YAOQIULIN_20080509_
|
|||
|
|
#define _ADVANCECEI_YAOQIULIN_20080509_
|
|||
|
|
|
|||
|
|
#include "IntervalIndex.h"
|
|||
|
|
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <vector>
|
|||
|
|
|
|||
|
|
//#define u_int unsigned int
|
|||
|
|
typedef unsigned int u_int;
|
|||
|
|
|
|||
|
|
typedef struct _QueryInterval_
|
|||
|
|
{
|
|||
|
|
u_int l;
|
|||
|
|
u_int r;
|
|||
|
|
u_int index;
|
|||
|
|
} _QueryInterval;
|
|||
|
|
|
|||
|
|
typedef struct _HQueryI_
|
|||
|
|
{
|
|||
|
|
_QueryInterval ** ppQImatrix;
|
|||
|
|
u_int MAXROWS;
|
|||
|
|
u_int ROWLEN;
|
|||
|
|
u_int rowID;//next available
|
|||
|
|
u_int colID;//next available
|
|||
|
|
u_int cnt;
|
|||
|
|
}_HQueryI;
|
|||
|
|
|
|||
|
|
typedef struct _IID_ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ٿռ䣬<D5BC><E4A3AC><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>õĻ<C3B5>
|
|||
|
|
{
|
|||
|
|
_QueryInterval * iid;
|
|||
|
|
struct _IID_ * next;
|
|||
|
|
}_IID;
|
|||
|
|
|
|||
|
|
typedef struct _IIDSet_
|
|||
|
|
{
|
|||
|
|
_IID *head;
|
|||
|
|
_IID *tail;
|
|||
|
|
} _IIDSet;
|
|||
|
|
|
|||
|
|
typedef _IIDSet _CEI;
|
|||
|
|
|
|||
|
|
//pack type
|
|||
|
|
|
|||
|
|
typedef struct _SrlIID_
|
|||
|
|
{
|
|||
|
|
_QueryInterval * iid;
|
|||
|
|
}_SrlIID;
|
|||
|
|
|
|||
|
|
typedef struct _SrlIIDSet_
|
|||
|
|
{
|
|||
|
|
_SrlIID *head;
|
|||
|
|
}_SrlIIDSet;
|
|||
|
|
|
|||
|
|
typedef _SrlIIDSet _SrlCEI;
|
|||
|
|
|
|||
|
|
class ACEI : public CIntervalIndex
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>[0, 2^r)
|
|||
|
|
ACEI(u_int eRange = 32);
|
|||
|
|
virtual ~ACEI();
|
|||
|
|
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>䣬[ a[i], b[i] ]<5D><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual long long PreProcessing(const std::vector<unsigned int>& a, const std::vector<unsigned int>& b);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD>key<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>index
|
|||
|
|
virtual int Find(unsigned int key, unsigned int * result, unsigned int size);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//init & ruin
|
|||
|
|
void initQIMatrix();
|
|||
|
|
void ruinQIMatirc();
|
|||
|
|
int init();
|
|||
|
|
void ruin();
|
|||
|
|
void releaseCEIs(_CEI **ppIIDSet, u_int lCEIsNum);
|
|||
|
|
|
|||
|
|
//search
|
|||
|
|
int searchX(unsigned int x, unsigned int * result, unsigned int size);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>double<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>u_int
|
|||
|
|
|
|||
|
|
//insert
|
|||
|
|
//void insertIntvl(u_int l, u_int r)
|
|||
|
|
void addIntvl(u_int ll, u_int lr, _QueryInterval* pQI);//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ô<EFBFBD><C3B4>Ϊ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void addFrgmnt(u_int ll, u_int lr, u_int sID, _QueryInterval* pQI);
|
|||
|
|
void addBtmCEIs(u_int ll, u_int lr, u_int sID, _QueryInterval *pQI);
|
|||
|
|
void addID(_CEI* pCEI, _QueryInterval* pQI);
|
|||
|
|
|
|||
|
|
//ultlity
|
|||
|
|
double getAvrgRng();
|
|||
|
|
|
|||
|
|
//serialization
|
|||
|
|
void serializeCEI(_CEI *pCEI, _SrlCEI* pSrlCEI);//suppose pCEI not NULL
|
|||
|
|
void serialBtmCEIs();
|
|||
|
|
void serialTopCEIs();
|
|||
|
|
void serial();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//input data
|
|||
|
|
_HQueryI HQI; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//model data
|
|||
|
|
u_int n; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u_int r; //ֵ<><D6B5>
|
|||
|
|
u_int L;//L=2^H, Segment Len
|
|||
|
|
u_int H;//<2F><><EFBFBD><EFBFBD>VC<56><43><EFBFBD>߶<EFBFBD>
|
|||
|
|
u_int h;//ʵ<><CAB5>VC<56><43><EFBFBD>߶<EFBFBD>
|
|||
|
|
double w; //ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD>䳤<EFBFBD><E4B3A4>
|
|||
|
|
u_int SNum;//Segment Num
|
|||
|
|
u_int SCEINum;
|
|||
|
|
unsigned long *pExp2;
|
|||
|
|
const u_int Exp2Size;
|
|||
|
|
_CEI *pTopCEIs;
|
|||
|
|
_CEI **ppBotCEIs;//ÿ<><C3BF>CEIs<49><73><EFBFBD>г<EFBFBD><D0B3><EFBFBD>ΪL<CEAA><4C>H
|
|||
|
|
|
|||
|
|
//for serial
|
|||
|
|
_SrlCEI *pTopSrlCEIs;
|
|||
|
|
_SrlCEI **ppBotSrlCEIs;//ÿ<><C3BF>CEIs<49><73><EFBFBD>г<EFBFBD><D0B3><EFBFBD>ΪL<CEAA><4C>H
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|