Maison > Java > javaDidacticiel > Java obtient des détails sur tous les sous-ensembles d'une collection

Java obtient des détails sur tous les sous-ensembles d'une collection

黄舟
Libérer: 2017-03-09 10:11:21
original
2946 Les gens l'ont consulté

Cet article présente principalement la méthode permettant d'obtenir tous les sous-ensembles d'un ensemble en Java. Il a une très bonne valeur de référence. Jetons un coup d'œil avec l'éditeur ci-dessous

Il y a une question de test écrite dans l'entretien. La signification générale est la suivante :

Saisissez un ensemble et. afficher tous les sous-ensembles de cet ensemble. Par exemple, saisissez : 1, 2, 4. Le résultat de sortie est le suivant :

[1]
[2]
[4]
[1, 2]
[1, 4]
[2, 4]
[1, 2, 4]
Copier après la connexion

Ce que vous devez savoir : L'ensemble vide est un sous-ensemble de n'importe quel ensemble a ; le sous-ensemble approprié est celui qui ne contient pas de sous-ensemble ; un vrai sous-ensemble non vide ne contient pas de sous-ensembles ni d'ensembles vides

Idées de solutions :

Cette question peut être calculé à l'aide de la "méthode de correspondance bit à bit"

Par exemple, dans l'ensemble A={a,b,c}, pour tout élément, dans chaque sous-ensemble, il existe ou n'existe pas. Mappage à un sous-ensemble :

(a,b,c)
(1,1,1)->(a,b,c)
(1,1,0)->(a,b)
(1,0,1)->(a,c)
(1,0,0)->(a)
(0,1,1)->(b,c)
(0,1,0)->(b)
(0,0,1)->(c)
(0,0,0)->@(@表示空集)
Copier après la connexion

Observez les règles ci-dessus, qui sont similaires à la méthode de stockage des données dans les ordinateurs, afin que vous puissiez mapper un entier à un ensemble...000 ~ 111...111 ( ce qui signifie qu'il y en a, signifie aucun, et vice versa), en augmentant progressivement le nombre entier, tous les nombres peuvent être parcourus, c'est-à-dire que le sous-ensemble correspondant de l'ensemble peut être obtenu.

Le test principal est l'opération de déplacement et la capacité de réflexion logique. Le code spécifique est le suivant (authentifié par cette machine et absolument fiable) :

import java.util.ArrayList;
import java.util.Scanner;
import org.apache.commons.collections.CollectionUtils;
/**
 * 输入一个集合,输出这个集合的所有子集
 * @author liangyongxing
 * @time 2017-02-06
 */
public class SubListExport {
 public static void main(String[] args) {
  ArrayList<Integer> list = new ArrayList<Integer>();
  System.out.println("请输入一串整数并在输入时用英文逗号隔开:");
  String inputString = new Scanner(System.in).next().toString();
  if (inputString != null && !inputString.isEmpty()) {
   String[] strArray = inputString.split(",");
   for (String str : strArray) {
    list.add(Integer.parseInt(str));
   }
   ArrayList<ArrayList<Integer>> allsubsets = getSubsets(list); 
   for(ArrayList<Integer> subList : allsubsets) {
    System.out.println(subList);
   }
  }
 }
 public static ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> subList) {
  ArrayList<ArrayList<Integer>> allsubsets = new ArrayList<ArrayList<Integer>>();
  int max = 1 << subList.size();
  for(int loop = 0; loop < max; loop++) {
   int index = 0;
   int temp = loop;
   ArrayList<Integer> currentCharList = new ArrayList<Integer>();
   while(temp > 0) {
    if((temp & 1) > 0) {
     currentCharList.add(subList.get(index));
    }
    temp>>=1;
    index++;
   }42    allsubsets.add(currentCharList);44   }
  return allsubsets;
 }
}
Copier après la connexion

Remarque : 2017-02-08 10:01:32 Le code ci-dessus présente certaines failles, c'est-à-dire que lorsque l'entrée contient des nombres répétés, le résultat aura une sortie de sous-ensembles répétés, ce qui ne répond pas aux exigences de la question. et doit être calculé lorsque les sous-ensembles sont calculés. Ajoutez HashSet pour la déduplication, et le résultat d'impression final peut être obtenu à partir des ensembles. Les détails de modification spécifiques sont comme indiqué dans la figure ci-dessous :

1. Modifiez la valeur de retour acceptée là où la fonction principale s'imprime : Type HashSet

2. vous devez modifier la liste d'encapsulation et changer la liste pour définir

La modification est maintenant terminée et les résultats du test en cours d'exécution sont les suivants :

L'analyse du code peut être obtenue Sa complexité temporelle est : O(n*log2n)

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal