Brojanje reči

Branimir_Maksimovic

Well-known member
Joined
Nov 22, 2018
Messages
928
Reaction score
370
Ne radis sa jednom listom nego podelis tu jednu u n chunkova, pa onda pustas svaki thread da radi sa vojom listom.
Ali neces nista dobiti time, zato sto je vreme izvrsavanja u single threadu previse kratko da bi threadovi dosli do izrazaja.
Pre ce biti da ako regex zamenis sa prostom proverom da ces dobiti bolje rezultate 😉

Inace evo C++ resenja koje ce ujedno raditi najbrze (c++11 kompajler potreban):

Code:
#include 
#include <unordered_map>
#include 
#include 
#include 
#include 
using namespace std;
using Pairs = unordered_map<string,int>;

void fill( Pairs& pairs, char c )
{
static string word;

if( ispunct© ) return;

if( isspace© )
{
if( word.size() )
{
pairs[word]++;
word.clear();
}
}
else
{
word += tolower©;
}
}

int main()
{
ifstream bible {“bible.txt”};

using citerator = istreambuf_iterator;

Pairs pairs;

for_each( citerator(bible.rdbuf()), citerator(),
[&pairs]( char c ){ fill( pairs, c ); } );

multimap<unsigned,string> sorted;

// Sort the {word, count} pairs.
//
for_each( pairs.begin(), pairs.end(),
[&sorted]( const Pairs::value_type& p )
{ sorted.insert(make_pair(p.second,p.first)); } );

// Print the top 20.
//
auto item = sorted.rbegin();

for( auto n = 0; n < 20; ++n, ++item )
{
cout << "Position " << setw(2) << n+1
<< ": count = " << setw(6) << item->first
<< " " << item->second << ‘\n’;
}

return 0;
}
 
Last edited:

Prizma

Active member
Joined
Feb 13, 2017
Messages
461
Reaction score
76
Ne radis sa jednom listom nego podelis tu jednu u n chunkova
Да, али бих после морао да их објединим, да бих извукао јединствене речи. Но пробаћу да макнем регекс да видим како иде. А C++ ће да ради брже како год окренеш 👀
 
Last edited:
Top