Advertisement
anthonimes

TP2---POO

Nov 24th, 2020 (edited)
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <time.h>
  4. #include <stdlib.h> // rand
  5.  
  6. /* Taille du vecteur */
  7. int const N = 9;
  8.  
  9. static bool compare(std::map<int,int>::value_type a, std::map<int,int>::value_type b) {
  10.     return a.second < b.second;
  11. }  
  12.    
  13. /* Algorithme avec le conteneur map */
  14. int map_majoritaire(std::vector<int> arr) {
  15.     std::map<int,int> maj;
  16.     for(std::vector<int>::iterator it = arr.begin(); it != arr.end(); it++)
  17.         ++maj[*it];
  18.     std::map<int,int>::iterator result= std::max_element(maj.begin(), maj.end(), compare);
  19.     if((*result).second > arr.size() / 2)
  20.         return (*result).first;
  21.     else
  22.         return -1;
  23. }  
  24.  
  25.  
  26. int algorithme_tri(std::vector<int> arr) {
  27.     std::sort(arr.begin(), arr.end());
  28.     int taille = arr.size();
  29.     int i = 0;
  30.     int candidat, cpt;
  31.     while(i <= taille/2) {
  32.         candidat = arr[i];
  33.         std::cout << i << " " << i+taille/2 << std::endl;
  34.         if(arr[i+taille/2] == candidat)
  35.             return candidat;
  36.         i++;
  37.     }
  38.     return -1;
  39. }
  40.  
  41. int algorithme_naif(std::vector<int> arr) {
  42.     int taille = arr.size();
  43.     int majoritaire, cpt;
  44.     for (int i = 0; i < taille; i++) {
  45.         majoritaire = arr[i];
  46.         cpt = 0;
  47.         for (int j = 0; j < taille; j++) {
  48.             if (arr[j] == majoritaire)
  49.                 cpt++;
  50.         }
  51.         if (cpt > taille/2)
  52.             return majoritaire;
  53.     }
  54.     return -1;
  55. }
  56.  
  57.  
  58. int main() {
  59.  
  60.     srand(time(NULL));
  61.     // Création d'un vecteur avec constructeur par défaut
  62.     std::vector<int> v;
  63.  
  64.     for(int i = 0; i < N; i++) {
  65.         // Ajout d'une valeur aléatoire en fin de vecteur
  66.         v.push_back(rand() % 10 + 1);
  67.         std::cout << v[i] << " ";
  68.     }
  69.  
  70.     std::cout << std::endl;
  71.     std::cout << "Element majoritaire simple : " << algorithme_naif(v) << std::endl;
  72.     std::cout << "Element majoritaire avec tri : " << algorithme_tri(v) << std::endl;
  73.     std::cout << "Element majoritaire Boyer-Moore : " << element_majoritaire(v) << std::endl;
  74.  
  75.     return 0;
  76.  
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement