7-44 基于词频的文件相似度 (30 分)(思路加详解+set容器简便做法)兄弟们冲呀呀呀呀呀 今天你AC了吗
一:題目
實現一種簡單原始的文件相似度計算,即以兩文件的公共詞匯占總詞匯的比例來定義相似度。為簡化問題,這里不考慮中文(因為分詞太難了),只考慮長度不小于3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。
輸入格式:
輸入首先給出正整數N(≤100),為文件總數。隨后按以下格式給出每個文件的內容:首先給出文件正文,最后在一行中只給出一個字符#,表示文件結束。在N個文件內容結束之后,給出查詢總數M(≤10
4
),隨后M行,每行給出一對文件編號,其間以空格分隔。這里假設文件按給出的順序從1到N編號。
輸出格式:
針對每一條查詢,在一行中輸出兩文件的相似度,即兩文件的公共詞匯量占兩文件總詞匯量的百分比,精確到小數點后1位。注意這里的一個“單詞”只包括僅由英文字母組成的、長度不小于3、且不超過10的英文單詞,長度超過10的只考慮前10個字母。單詞間以任何非英文字母隔開。另外,大小寫不同的同一單詞被認為是相同的單詞,例如“You”和“you”是同一個單詞。
輸入樣例:
3 Aaa Bbb Ccc # Bbb Ccc Ddd # Aaa2 ccc Eee is at Ddd@Fff # 2 1 2 1 3輸出樣例:
50.0% 33.3%二:思路
用到了set容器,這個容器我也是第一次用,這個他有自動去重的特性,而且,這個容器相較于map容器他只有關鍵值 ,其他用法類似,但要在注意的是,這里的迭代器都是指針,即遍歷容器返回值都是指針
三:知識速遞(對set容器不了解的兄弟們來看一下)
set基本用法
四:上碼(來兄弟們 干了這杯碼 我們來日方長)
#include<bits/stdc++.h> using namespace std;set<string>s[100]; void manage(string str,int x){string word = "";//初始化字符串 str+="!";//表示最后一個單詞的結束 什么符號都可以 for( int i = 0; i < str.size(); i++ ){if( isalpha (str[i]) ){//判斷單個字符是否為字母 if( word.size() < 10){//處理字母個數小于10個的單詞 word+=tolower(str[i]);//將大寫字母轉換成小寫字母 }}else{if( word.size() > 2 ){s[x].insert(word);}word.clear();//將字符串的內容清空 為下一次調用函數做準備 } } }int main(){int N;cin >> N;getchar();//處理換行符 當cin 和 getline() 一塊用的時候 for( int i = 0; i < N; i++ ){string str = "";//初始化字符串 while( str != "#" ){manage(str,i);getline(cin,str);//每次是讀進來一行 }} // set<string>::iterator t; // for( t = s[0].begin(); t != s[0].end(); t++ ){ // cout << *t << ' '; // }int M;cin >> M; for( int i = 0; i < M; i++ ){int a,b,count = 0;cin >> a >> b;a--; b--;int total_length = s[a].size() + s[b].size();set<string>::iterator t;for( t = s[a].begin(); t != s[a].end(); t++ ){if( s[b].find(*t) != s[b].end() )//判斷相同元素的個數 count++;} // cout << total_length << endl;printf("%0.1lf%\n",100.0 * count/(total_length - count)); } }五:總結
這道題思路不是我的,我是沒思路,就學大佬的了,但也是收獲滿滿,我又學到一種容器 set;我前面在學map容器時就遇到過,但我沒去學,因為沒用到過,等到用到了再去學,在我看來,知識是永遠學不完的,我們必須先上路,遇到什么問題就解決什么問題。不斷擴充我們的武器庫,比如map,vector,再接下來set;我會的會越來越多 ,加油BOY!我們共同進步!
總結
以上是生活随笔為你收集整理的7-44 基于词频的文件相似度 (30 分)(思路加详解+set容器简便做法)兄弟们冲呀呀呀呀呀 今天你AC了吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-43 字符串关键字的散列映射 (25
- 下一篇: 为筹备黑五促销活动,苹果海外官网正在更新