2012-03-14 127 views
-2

我發現下面的代碼在網上爲後綴樹這行代碼在這段代碼中做了什麼?

#include <stdio.h> 
#define E 0 

struct suffix_tree_node; 


struct suffix_tree_link { 
    // 0 is e - global index of during string's end 
    unsigned long start; 
    unsigned long end; 
    suffix_tree_link(suffix_tree_node* source, suffix_tree_node* target, 
        unsigned long start, unsigned long end) { 
     this->source = source; 
     this->target = target; 
     this->start = start; 
     this->end = end; 
    } 
    suffix_tree_node* source; 
    suffix_tree_node* target; 
    suffix_tree_link* next_link; 
}; 

struct suffix_tree_node { 
    suffix_tree_link* first_link; 
    suffix_tree_node* parent_node; 
    suffix_tree_node* suffix_link_node; 

    // other constructors? 
    suffix_tree_node() { 
     parent_node = suffix_link_node = NULL; 
     first_link = NULL; 
    } 

    void add_target(unsigned long start, unsigned long end, suffix_tree_node* target) { 
     suffix_tree_link* link; 
     for(link = first_link; link != NULL; link = link->next_link); 
     link = new suffix_tree_link(this, target, start, end); 
    } 

}; 



class suffix_tree { 

    suffix_tree_node* root; 
    const char* string; 

    void ukkonen() { 
     root->add_target(1, E, new suffix_tree_node); 
     unsigned long e = 1, j_i = 1, i = 1; 
     for(int i = 0; string[i] != '\0'; i++) { 
      e++; 
      for() { 

       j_star = j; 
      } 

      j_i = j_star; 
     } 
    } 

public: 

    suffix_tree(const char* string) { 
     root = new suffix_tree_node(); 
     this->string = string; 
     ukkonen(); 
    } 

}; 

int main() { 
    suffix_tree("foof"); 
    return 0; 
} 

一切都清楚了,幾乎在此代碼,因爲我有很多次閱讀後綴樹,但我不明白這個片段:

void ukkonen() { 
      root->add_target(1, E, new suffix_tree_node); 
      unsigned long e = 1, j_i = 1, i = 1; 
      for(int i = 0; string[i] != '\0'; i++) { 
       e++; 
       for() { 

        j_star = j; 
       } 

       j_i = j_star; 
      } 
     } 

這段代碼做了什麼?

又是什麼for()?或j_start

這裏是a link代碼。

+5

你確定實際編譯? – 2012-03-14 20:13:46

+0

沒有C的親,但如果它的確如此,我會想象它要麼永遠不會進入那個部分,要麼進入一個無限循環......好奇地發現雖然。看起來有一半完成了我的功課。 – Rig 2012-03-14 20:17:12

+0

'for(;;)'是一個無限循環,但我以前從未見過'for()'。 – 2012-03-14 20:19:32

回答

5

您正在查看正在進行的工作。您發佈的代碼尚未完全編寫,並且無法編譯。

該文件的更高版本可以找到here