Witam. Potrzebuję pomocy w stworzeniu algorytmu, który po wprowadzeniu wielu sześciocyfrowych szeregów zbada częstotliwość padania każdej cyfry w zbiorze, a następnie wybierze szereg zawierający cyfry, które padały najczęściej. Algorytm może funkcjonować w Exelu lub języku C++.
Pierwsza część jest raczej banalna:
unordered_map<int, int> zliczenia;
for(int i=0;i<szeregi.size();i++){
for(int i=0;i<6;i++){
zliczenia[szeregi[i][j]]++;
}
}
i już mamy mapę która dla liczby zwraca nam ile razy ta liczba wystąpiła we wszystkich szeregach. Możemy sobie to teraz posortować po wartościach w mapie i voila, mamy liczby najczęściej występujące.
Druga część, czyli wybranie szeregu zawierającego takie liczby jest trochę bardziej skomplikowane, bo nie mamy (jak rozumiem) pewności że istnieje szereg zawierający wszystkie 6 najlepszych liczb. Czy tak?
To jak w takim razie mamy oceniać który szereg jest lepszy. Załóżmy że liczby 1,2,3,4,5 w takiej kolejności to te nasze najczęściej występujące.
Czy "lepszy" będzie [1,2,5] czy [2,3,4]?
Najlepszym wyjściem z tej sytuacji będzie chyba wybranie szeregu, który zawiera liczby jak najbliżej położone tej, która najczęściej pojawia się w zbiorze, czyli w tym wypadku [1,2,5]. Jeżeli (dla tego przykładu) szereg zawiera liczbę 1, która ma najwyższy priorytet ze względu na to, że pojawia się najczęściej w zbiorze, to algorytm powinien wybrać szereg [1,2,5].
Jak dla mnie wystarczy zsumować częstość występowania każdej z liczb w ciągu dla każdego szeregu i wybrać ten, dla którego wyszedł najwyższy wynik.
@kosciej to też jakieś rozwiązanie, ale to jest kwestia jak autor sobie chce ;)
Jeśli chce najlepszą sumę to musi przelecieć wszystkie szeregi i wyliczyć sumę na podstawie mapy.
Jeśli chce wybrać szereg który zawiera liczby z "top" to najprosciej zrobić odwrotną mapę map<int,set<szereg>>
która dla liczby zwraca zbiór szeregów w których występuje taka liczba. Potem po prostu wyciągamy sobie takie zbiory dla kolejnych liczb z top i je przecinamy aż nie zostanie nam 1 element w zbiorze (a jak nagle dostaniemy 0 elementów to oczywiście wyrzucamy zbiory dla ostatniej sprawdzonej liczby i idziemy dalej)