Table des matières
Contenu de la question
Solution
Maison Java Rechercher des paires GCD pour un tableau donné

Rechercher des paires GCD pour un tableau donné

Feb 22, 2024 pm 12:37 PM
最大公约数 arrangement

Questions et réponses Java : La recherche de paires GCD d'un tableau donné est une question courante qui nécessite le calcul du plus grand diviseur commun (PGCD) des nombres du tableau. En Java, vous pouvez utiliser l'algorithme euclidien pour résoudre ce problème. Dans cet article, l'éditeur PHP Xigua présentera comment utiliser Java pour écrire une méthode permettant de trouver la paire GCD d'un tableau donné, aidant ainsi les lecteurs à mieux comprendre et appliquer cet algorithme.

Contenu de la question

Étant donné un tableau d'entiers de taille n, où n est un nombre pair. Choisissez 2 nombres dans le tableau et trouvez pgcd. De même, choisissez 2 éléments parmi les éléments restants du tableau et recherchez pgcd. Répétez les étapes ci-dessus pour trouver la paire pgcd. Additionnez les valeurs pgcd et obtenez la somme la plus élevée.

Contraintes :

n is in range 2 to 20
arr[i] is in range 1 to 10^9
Copier après la connexion

Exemple 1 :

arr = [3,4,9,5]
Copier après la connexion

Réponse :

4
Copier après la connexion

Instructions :

a) gcd of (4,5) is 1
b) gcd of (3,9) is 3
sum = 1+3 = 4. this is the highest possible gcd sum.
Copier après la connexion

Exemple 2 :

arr = [1,2,3,4,5,6]
Copier après la connexion

Réponse :

6
Copier après la connexion

Instructions :

a) gcd of (1,5) is 1
b) gcd of (2,4) is 2
c) gcd of (3,6) is 3
sum = 1+2+3 = 6. this is the highest possible gcd sum.
Copier après la connexion

Voici mon code :

public static int solve(int[] ar) {
   int n = ar.length;
   Arrays.sort(ar);
   int sum = 0;
   for(int i=0; i<n/2; i++) {
     int a = ar.get(i), b = ar.get(n-i-1);
     int c = gcd(a,b); 
     sum += c;
   }
   return sum;
}

static int gcd(int a, int b)
{
    // if b=0, a is the GCD
    if (b == 0)
        return a;

    // call the gcd() method recursively by
    // replacing a with b and b with
    // modulus(a,b) as long as b != 0
    else
        return gcd(b, a % b);
}
Copier après la connexion

Mon code fonctionne pour le premier exemple mais donne un résultat erroné pour le deuxième exemple. Je l'ai débogué et j'ai constaté que la méthode que j'utilisais était incorrecte. Quelle est la bonne façon de résoudre ce problème ?

Solution

Nous pouvons rechercher de manière récursive toutes les façons possibles de calculer le pgcd total. ce qu'il faut faire?

Si le tableau ne contient que deux éléments, nous pouvons renvoyer le pgcd de ces deux éléments uniquement.

S'il en contient plus, parcourons toutes les paires de valeurs. Pour chaque paire, nous calculons son pgcd, et nous appelons également notre fonction de manière récursive avec une copie du tableau avec les deux valeurs supprimées. Si nous additionnons les résultats des deux calculs, nous obtenons le pgcd total pour la paire de valeurs actuellement sélectionnée.

Maintenant, nous gardons simplement une trace du meilleur gcd trouvé jusqu'à présent et le renvoyons à la fin.

C'est le code qui (devrait) faire exactement cela.

int solve(int[] ar) {
  // if we have only two elements, there's not much else we can do.
  if(ar.length == 2) {
    return gcd(ar[0], ar[1]);
  }

  //keep track of the largest gcd
  int best = 0;
  
  // for every pair of values in the array
  //  make a copy of the array without the pair and call recursively
  for(int i = 0; i < ar.length; i++) {
    for(int j = i + 1; j < ar.length; j++) {
      
      int score = gcd(ar[i], ar[j]);
      
      // make a copy
      int[] ar2 = new int[ar.length - 2];
      int copy_k = 0;
      for(int k=0; k < ar.length; k++) {
        // skip values that we already visited
        if(k == i || k == j) {
          continue;
        }
        
        ar2[copy_k] = ar[k];
        copy_k += 1;
      }
      
      // call recursively
      score += solve(ar2);
      
      if(score > best) // we found a better pair
        best = score;
    }
  }
  
  return best;
}
Copier après la connexion

Cet algorithme est assez lent. Si vous avez besoin d'accélérer les choses, il y a au moins deux domaines dans lesquels vous pouvez vous améliorer :

  • Le calcul de pgcd est une opération coûteuse. Précalculer le pgcd de toutes les paires de valeurs uniques possibles et les stocker dans une hashmap éliminera les doubles calculs.
  • Il vérifie plusieurs fois certaines permutations possibles. (par exemple, sélectionner la première paire puis la deuxième paire lors de la récursion suivante revient à sélectionner la deuxième paire puis la première paire) J'ai quelques vagues idées sur la façon de résoudre ce problème, mais il est trop tard ce soir, désolé . < /em>

Il existe très probablement un algorithme plus rapide, c'est juste mon idée.

Editeur : Eh bien, après un peu de sommeil, j'ai soudain compris. Si nous omettons la boucle externe lors de la création de paires, nous n'obtiendrons aucun tri de paires en double. En gros, remplacez simplement i par 0 partout, comme ceci :

for(int j = 1; j < ar.length; j++) {
    
  int score = gcd(ar[0], ar[j]);
  
  // Make a copy
  int[] ar2 = new int[ar.length - 2];
  int copy_k = 0;
  for(int k=1; k < ar.length; k++) {
    // Skip values that we already visited
    if(k == j) {
      continue;
    }
    
    ar2[copy_k] = ar[k];
    copy_k += 1;
  }
}

Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les dix principales plateformes de trading de devises virtuelles? Quelles sont les dix principales plateformes de trading de devises virtuelles? Feb 20, 2025 pm 02:15 PM

Avec la popularité des crypto-monnaies, des plateformes de trading de devises virtuelles ont émergé. Les dix principales plateformes de trading de devises virtuelles au monde sont classées comme suit selon le volume des transactions et la part de marché: Binance, Coinbase, FTX, Kucoin, Crypto.com, Kraken, Huobi, Gate.io, Bitfinex, Gemini. Ces plateformes offrent un large éventail de services, allant d'un large éventail de choix de crypto-monnaie à la négociation des dérivés, adapté aux commerçants de niveaux différents.

Les dix principales bourses du cercle monétaire chinois Les dix principales bourses du cercle monétaire chinois Jul 23, 2024 pm 06:25 PM

Les dix principales bourses de crypto-monnaie en Chine sont classées par volume de transactions comme suit : 1. Binance ; 3. Huobi ; 4. Anyin ; 6. Gate.io ; 8. BitMart ; .JEX; 10.LBanque. Ces bourses offrent une large gamme de paires de trading, des frais de trading faibles et des services professionnels adaptés aux besoins spécifiques des utilisateurs.

Comment ajuster l'échange ouvert en sésame en chinois Comment ajuster l'échange ouvert en sésame en chinois Mar 04, 2025 pm 11:51 PM

Comment ajuster l'échange ouvert en sésame en chinois? Ce didacticiel couvre des étapes détaillées sur les ordinateurs et les téléphones mobiles Android, de la préparation préliminaire aux processus opérationnels, puis à la résolution de problèmes communs, vous aidant à changer facilement l'interface d'échange Open Sesame aux chinois et à démarrer rapidement avec la plate-forme de trading.

Top 10 des plates-formes de trading de crypto-monnaie, les dix principales applications de plate-forme de trading de devises recommandées Top 10 des plates-formes de trading de crypto-monnaie, les dix principales applications de plate-forme de trading de devises recommandées Mar 17, 2025 pm 06:03 PM

Les dix principales plates-formes de trading de crypto-monnaie comprennent: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Top 10 des plates-formes de trading de devises virtuelles 2025 Applications de trading de crypto-monnaie classée top dix Top 10 des plates-formes de trading de devises virtuelles 2025 Applications de trading de crypto-monnaie classée top dix Mar 17, 2025 pm 05:54 PM

Top dix plates-formes de trading de devises virtuelles 2025: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Quelles sont les plates-formes de monnaie numérique sûres et fiables? Quelles sont les plates-formes de monnaie numérique sûres et fiables? Mar 17, 2025 pm 05:42 PM

Une plate-forme de monnaie numérique sûre et fiable: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Laquelle des dix principales applications de trading de devises virtuelles est la meilleure? Laquelle des dix principales applications de trading de devises virtuelles est la meilleure? Mar 19, 2025 pm 05:00 PM

Top 10 des classements de trading de devises virtuels: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Applications de logiciels de monnaie virtuels sûrs recommandés Top 10 des applications de trading de devises numériques classement 2025 Applications de logiciels de monnaie virtuels sûrs recommandés Top 10 des applications de trading de devises numériques classement 2025 Mar 17, 2025 pm 05:48 PM

Recommandés Applications logicielles de monnaie virtuelle recommandées: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.