class AlgorithmPool {

    private static final AlgorithmPool INSTANCE = new AlgorithmPool();

    static {
        INSTANCE.register(new CountVertexAlgorithm());
        INSTANCE.register(new CountEdgeAlgorithm());

        INSTANCE.register(new DegreeCentralityAlgorithm());
        INSTANCE.register(new StressCentralityAlgorithm());
        INSTANCE.register(new BetweennessCentralityAlgorithm());
        INSTANCE.register(new ClosenessCentralityAlgorithm());
        INSTANCE.register(new EigenvectorCentralityAlgorithm());

        INSTANCE.register(new TriangleCountAlgorithm());
        INSTANCE.register(new ClusterCoefficientAlgorithm());
        INSTANCE.register(new LpaAlgorithm());
        INSTANCE.register(new LouvainAlgorithm());
        INSTANCE.register(new WeakConnectedComponent());

        INSTANCE.register(new FusiformSimilarityAlgorithm());
        INSTANCE.register(new RingsDetectAlgorithm());
        INSTANCE.register(new KCoreAlgorithm());

        INSTANCE.register(new PageRankAlgorithm());

        INSTANCE.register(new SubgraphStatAlgorithm());

        INSTANCE.register(new StressCentralityAlgorithmV2());
        INSTANCE.register(new BetweennessCentralityAlgorithmV2());
        INSTANCE.register(new ClosenessCentralityAlgorithmV2());
    }

    private final Map<String, Algorithm> algorithms;

    public AlgorithmPool() {
        this.algorithms = new ConcurrentHashMap<>();
    }

    public Algorithm register(Algorithm algo) {
        assert !this.algorithms.containsKey(algo.name());
        return this.algorithms.put(algo.name(), algo);
    }

    public Algorithm find(String name) {
        return this.algorithms.get(name);
    }

    public Algorithm get(String name) {<FILL_FUNCTION_BODY>}

    public static AlgorithmPool instance() {
        return INSTANCE;
    }
}

        Algorithm algorithm = this.algorithms.get(name);
        E.checkArgument(algorithm != null,
                        "Not found algorithm '%s'", name);
        return algorithm;
    
<no_super_class>