您的位置:首页 > 职场人生

百度面试题及我的解答(3)

2009-11-30 22:52 393 查看
主遍历函数的代码,流程如注释所述,这里因为偷懒使用了vector。还没测试,今天没时间了。明天测吧。<这次是用Word2007发布的,代码行间距太大了>

修正了一个BUG. 添加了输出函数。 使用大文本测试,发现这个函数很慢。 具体慢在那还不知道。

void Step4TrverseProcess(WORD_NODE* plist, ostream& out)
{
WORD_NODE* pnext = plist;
vector<WORD_NODE*> VarWordsList;
vector<WORD_NODE*>::iterator i;
// list<WORD_NODE*> 使用STL链表保存结果,链表的每一个节点是WORD_NODE链表,这个WORD_NODE链表中保存的都是变位词
// 遍历WORD_NODE List,读取每一个WORD;
// 遍历VarWordsList;比较wordNode->SortedStr和VarWordsList的每一个节点,相同则插入到该节点。
// 遍历结束没有找到,则插入到VarWordsList末尾。
do
{
bool bFoundVarNode = false;
for ( i = VarWordsList.begin(); i < VarWordsList.end(); i++ )
{
WORD_NODE *pSortedWord = (*i);
if ( 0 == strcmp(pSortedWord->sorted_str, pnext->sorted_str) )
{
WORD_NODE* ptemp = pnext;
pnext = pnext->next;

WORD_NODE* ptemp2 = pSortedWord->next;
pSortedWord->next = ptemp;
ptemp->next =ptemp2;
bFoundVarNode = true;
break;
}
}
if ( !bFoundVarNode )
{
WORD_NODE *ptemp = pnext;
pnext = pnext->next;
ptemp->next = NULL;
VarWordsList.push_back(ptemp);
}
}	while (NULL != pnext);
for ( i = VarWordsList.begin(); i < VarWordsList.end(); i++ )
{
vector<char*> str_arr;
vector<char*>::iterator j;
WORD_NODE *pWordList = (*i);
out << pWordList->sorted_str << ":/t";
while ( NULL != pWordList ){
bool bSameWord = false;
for ( j = str_arr.begin(); j < str_arr.end(); j++)
{
char* pword = (*j);
if ( 0 == strcmp(pword, pWordList->str) ){
bSameWord = true;
}
}
if ( !bSameWord)
{
out << pWordList->str << "/t";
str_arr.push_back(pWordList->str);
}
pWordList = pWordList->next;
}
out << endl;
}
}


后续计划:

1. 性能测试,找出影响性能的点。并给出性能测试数据。

2. 把所有的数据结构都换成标准库。再测一次性能。

3. 结合自定义数据结构和标准库给出最后结果。

4. 代码多线程化。

5. 考虑使用GPU实现多线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: