私はC++でpalindrome finderを書いていますが、私はこれを書くのに成功しました。C++ Palindrome finderの最適化
私は単にプログラムのrunspeedを増やしていますが、今は私が持っている機能を使って1,500ワードの単語リストにpalindromes/2 word palindromesのテストを実行するのに約1m 5秒かかっています。私ははるかに大きなファイルで実行しようとするが、私はさらに最適化することができないのを見逃したいのですが?
ご了承ください。これは学校のためだけではなく、レジャーのためだけのものです。
#include <iostream>
#include <ostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
bool isPal(string);
int main() {
vector<string> sVec;
vector<string> sWords;
vector<string> sTwoWords1;
vector<string> sTwoWords2;
char myfile[256]="/home/Damien/Test.txt";
ifstream fin;
string str;
fin.open(myfile);
if(!fin){
cout << "fin failed";
return 0;
}
while(fin){
fin >> str;
sWords.push_back(str);
if(!fin){
break;
}
if(isPal(str)){
sVec.push_back(str);
}
else{
getline(fin, str);
}
}
reverse(sVec.begin(), sVec.end());
for(int i =0; i < sVec.size(); i++){
cout << sVec[i] << " is a Palindrome " <<endl;
}
// Test 2
for(int i=0; i<sWords.size(); i++){
for(int j=(i+1); j<sWords.size(); j++){
str = sWords[i]+sWords[j];
if(isPal(str)){
sTwoWords1.push_back(sWords[i]);
sTwoWords2.push_back(sWords[j]);
}
}
}
fin.close();
for(int i=0; i<sTwoWords1.size(); i++){
cout << sTwoWords1[i] << " and " << sTwoWords2[i] << " are palindromic. \n";
}
return 0;
}
bool isPal(string& testing) {
return std::equal(testing.begin(), testing.begin() + testing.size()/2, testing.rbegin());
}
あなたは 'のstd :: string'sのすべてが無用のコピーを減らすことができます。また、これは[CodeReview.SE](http://codereview.stackexchange.com/)にある必要があります。 – Xeo
このプログラムのプロファイリングを試しましたか? – dasblinkenlight
私はループ内のループが問題であるとほとんど確信しています。あなたは平均してどれくらいの期間単語を教えていただけますか? – kilotaras