给出以下代码的mermaid算法流程:int Find(string s) { int low,high,mid; low=0; high=m-1; while(low<=high) { mid=(low+high)/2; if(keyword[mid]==s) return mid; else if(keyword[mid]>s) high=mid-1; else low=mid+1; } return -1; }
时间: 2024-03-15 16:45:01 浏览: 120
```mermaid
graph TD;
A((开始)) --> B[初始化low=0,high=m-1];
B --> C{low<=high};
C -- Yes --> D[mid=(low+high)/2];
D --> E{keyword[mid]==s};
E -- Yes --> F[返回mid];
E -- No --> G{keyword[mid]>s};
G -- Yes --> H[high=mid-1];
G -- No --> I[low=mid+1];
C -- No --> J[返回-1];
J --> K((结束));
F --> K;
```
相关问题
给出以下代码的mermaid算法流程:int hash_table_num(string key) { int d = 0; for(int i = 0; i<key.size(); i++) d = d + key[i]; return d % m; } //开放地址法 线性探测法 int hash_found(string key,HashTable * table) { int t = hash_table_num(key); while(table[t].KeyName != key) //有冲突 t = (t+1) % m; return t; }
```mermaid
graph TD;
A((开始)) --> B[计算哈希值d];
B --> C[返回d%m];
C --> D((结束));
E((开始)) --> F[计算哈希值t];
F --> G{table[t].KeyName!=key};
G -- Yes --> H[t=(t+1)%m];
G -- No --> I[返回t];
H --> F;
E --> I;
```
给出以下代码的mermaid算法流程:template <typename T> bool read_file(string filename,T * table) { char filenames[100]; memset(filenames,'\0',sizeof(filenames)); for(int i = 0; i < filename.length(); i++) filenames[i] = filename[i]; cout<<"filename: "<<filenames<<endl<<endl; fstream file(filenames); //打开文件 string words; if(!file) { cout<<"文件打开失败"<<endl; return 0; } string s; while(getline(file,words)) //逐行读取 { for(int i=0;i<=words.size();i++) { if(words[i]>=65&&words[i]<=90 || words[i]>=97&&words[i]<=122 || words[i]=='_') //A-Z,a-z,_ 是关键字的成分 s.push_back(words[i]); else { int k = Find(s); //二分查找关键字s if(k != -1) { if(typeid(table) == typeid(HashTable *)) //开放地址法 table[hash_found(keyword[k],(HashTable *)table)].num += 1; else if(typeid(table) == typeid(HashNode *)) //链地址法 hash_founds(keyword[k],(HashNode *)table)->num += 1; } s.clear(); } } } file.close(); return 1; }
```mermaid
graph TD;
A((开始)) --> B[将filename转为字符数组filenames];
B --> C[打开文件];
C -- 打开失败 --> D[返回0];
C -- 打开成功 --> E[逐行读取文件];
E --> F[遍历每个单词];
F -- 单词包含字母或下划线 --> G[将字母和下划线加入s];
G -- 是关键字成分 --> H[继续加入];
H -- 不是关键字成分 --> I[在哈希表中查找s];
I -- 找到关键字 --> J[根据哈希表类型更新关键字频率];
I -- 未找到关键字 --> K[清空s];
E --> L[关闭文件];
L --> M((结束));
J --> F;
K --> F;
```
阅读全文