[Java twig] Énumérer les combinaisons

Énumération des combinaisons

Tel J'écrirai un article car il doit y avoir une demande de combinaisons, pas de commande. Au sein de notre entreprise, ce petit code est utilisé pour les produits qui combinent plusieurs produits financiers pour créer un portefeuille, puis sélectionnez celui avec de bonnes propriétés. Le principe de fonctionnement est presque le même que ci-dessus.

Combination.java


	private enum Operation {add, remove};
	private static<T> Set<T> apply(Set<T> src, Operation operation, T item) {
		Set<T> result = new HashSet<T>(src);
		if (Operation.add == operation) result.add(item);
		if (Operation.remove == operation) result.remove(item);
		return result;
	}
	
	private static<T> Set<Set<T>> _combination(Set<T> selected, int depth, Set<T> pool) {
		if (depth == 0) return apply(new HashSet<>(), Operation.add, selected); //Renvoie l'ensemble que seuls les sélectionnés ont dans l'élément
		Set<Set<T>> result = new HashSet<Set<T>>();
		for (T item : pool) {
			result.addAll(
					_combination(
							apply(selected, Operation.add, item), //Changer l'élément en sélectionné
							depth - 1, 
							apply(pool, Operation.remove, item)  //Retirer de la piscine
					)
			);
		}
		return result;
	}
	public static<T> Set<Set<T>> combination(Set<T> src, int k) {return _combination(new HashSet<T>(), k, src);}

Comment utiliser

Comme ça.

Main.java


	public static void main(String[] args) {

		Set<Integer> src = new HashSet<Integer>() {{
				add(0); add(1); add(2); add(3); add(4); add(5);
		}};
		
		System.out.println(combination(src, 2)); //Liste tous les ensembles obtenus en extrayant deux des ensembles ci-dessus
		
	}

Recommended Posts

[Java twig] Énumérer les combinaisons
Implémenter une combinaison de mathématiques en Java
Énumération de toutes les combinaisons Java
Java
Java