ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
MakeTermScoreÀÇ ÀÎÀÚ°ªÀ» º¯È½ÃŰ´Â °ÍÀ¸·Î ¹è¿ÀÇ Å©±â¸¦ º¯È½Ãų ¼ö ÀÖ´Ù.
ÀÌ ÇÔ¼ö´Â lucene pharse Äõ¸®ÀÇ scorering¿¡ »ç¿ëµÈ´Ù.
#include <stdio.h>
#include <vector>
#include <iostream>
#include <set>
#include <time.h>
#include <map>
#include <unistd.h>
#include <sys/time.h>
using namespace std;
// <did, score> ±¸Á¶Ã¼
struct KeyValue
{
int did;
int score;
};
struct ltstr
{
bool operator() (const KeyValue s1, const KeyValue s2) const
{
return s1.score > s2.score;
}
};
vector<KeyValue> MakeTermScore(int, int);
int main(int argc, char **argv)
{
vector<KeyValue> Term1;
vector<KeyValue> Term2;
srandom(time((time_t *)NULL));
vector<KeyValue> tempTerm;
vector<KeyValue> tempTerm2;
multiset<KeyValue, ltstr> InvertDoc;
KeyValue *tempTerm3;
struct timeval mytime1, mytime2;
// Å×½ºÆ®¸¦ À§ÇÑ 2°³ÀÇ ¹è¿ set »ý¼º ------------------------
vector< vector<KeyValue>::iterator > ScoreQueue;
vector< vector<KeyValue>::iterator > ScoreEnd;
Term1 = MakeTermScore(100, 200);
Term2 = MakeTermScore(100, 400);
// Å×½ºÆ®¸¦ À§ÇÑ 2°³ÀÇ ¹è¿ set »ý¼º end ------------------------
// 2°³ÀÇ ¹è¿ set¿¡ ´ëÇÑ iterator ÀúÀå
ScoreQueue.push_back(Term1.begin());
ScoreQueue.push_back(Term2.begin());
ScoreEnd.push_back(Term1.end());
ScoreEnd.push_back(Term2.end());
gettimeofday(&mytime1, NULL);
tempTerm3 = (KeyValue *)malloc(sizeof(KeyValue)*1200);
unsigned int i=0;
unsigned int inputidx = 0;
int sum = 0;
/* Vector And */
unsigned int size2 = Term2.size();
unsigned int size1 = Term1.size();
unsigned int index = 0;
int turn = 0;
int topdoc = -1;
// ±³ÁýÇÑ ¿¬»ê -----------------------------------------------
for ( i = 0; i < size2; i++)
{
if (Term2[i].did > topdoc)
{
topdoc = Term2[i].did;
turn++;
for (index; index < size1; index++)
{
if (Term1[index].did > topdoc)
{
topdoc = Term1[index].did;
break;
}
if (Term1[index].did == topdoc)
{
index++;
tempTerm3[inputidx] = Term2[i];
inputidx++;
topdoc = Term1[index].did;
break;
}
}
}
if (Term2[i].did == topdoc)
{
index++;
turn++;
topdoc = Term1[index].did;
tempTerm3[inputidx] = Term2[i];
inputidx++;
}
}
// ±³ÁýÇÑ ¿¬»ê end -------------------------------------------
gettimeofday(&mytime2, NULL);
// ¿¬»ê Å×½ºÆ® -----------------------------------------------
for (i =0; i < Term1.size(); i++)
{
printf("%d ", Term1[i].did);
}
printf("\n\n");
for (i =0; i < Term2.size(); i++)
{
printf("%d ", Term2[i].did);
}
printf("\n\n");
for (i = 0; i < inputidx; i++)
{
printf("%d ", tempTerm3[i].did);
}
printf("\n\n");
// ¿¬»ê½Ã°£ ÃøÁ¤
printf("TIME SEC : %lu\n", mytime2.tv_sec - mytime1.tv_sec);
printf("TIME USEC : %lu\n", mytime2.tv_usec - mytime1.tv_usec);
printf("Term1 : %d\n", Term1.size());
printf("Term2 : %d\n", Term2.size());
printf("SUM : %d\n", inputidx);
printf("SUM : %d\n", sum);
printf("TURN : %d\n", turn);
return 0;
}
vector<KeyValue> MakeTermScore(int num, int maxdoc)
{
KeyValue lvalue;
vector<KeyValue> term;
set<int> did;
set<int>::iterator si;
for (int i = 0; i < num; i++)
{
did.insert(random()%maxdoc);
}
si = did.begin();
while(si != did.end())
{
lvalue.did = *si;
lvalue.score = random()%100;
term.push_back(lvalue);
*si++;
}
return term;
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|