yundreamÀÇ ±¸Çö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

MakeTermScoreÀÇ ÀÎÀÚ°ªÀ» º¯È­½ÃŰ´Â °ÍÀ¸·Î ¹è¿­ÀÇ Å©±â¸¦ º¯È­½Ãų ¼ö ÀÖ´Ù.
  1. ù¹øÂ° ÀÎÀÚ : ¹è¿­ÀÇ Å©±â
  2. µÎ¹øÂ° ÀÎÀÚ : ÃÖ´ë ¹üÀ§
MakeTermScorer(100, 2000) À̶ó¸é 0-2000¿¡¼­ ·£´ýÇÏ°Ô 100°³ÀÇ ¼ýÀÚ¸¦ ²¨³»¿Â´Ù. °á°ú´Â Á¤·ÄµÇ¾î¼­ ¸®ÅϵȴÙ.

ÀÌ ÇÔ¼ö´Â 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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.