The present work addresses the problem of community detection in social networks. Determination of the community structure permits to identify the organizational and functional units of the network. To such an end, the most powerful approach is the fuzzy one. Here, each network node participates in all the communities simultaneously. In this paper, we develop a general formalism for fuzzy community detection in weighted, unweighted, directed and undirected social networks. Using an error functional measuring the difference between the predicted and observed network topologies, the problem is transformed into an unconstrained minimization. This allows to define a general algorithmic pattern based on the greedy paradigm, which can be customized to several different fuzzy community detection algorithms. Analysis of the algorithmic complexity of the procedure permits to determine the factors responsible for the variation of its running time. Using this information, we define an efficient algorithm (TRIBUNE) by applying a conjugate gradient approach. To determine the performance of TRIBUNE, we introduce a new network model specially designed as a fuzzy community detection benchmark. Using this benchmark, we show that TRIBUNE greatly reduces the dependence on the number of iterations of the optimization procedure. As a result, TRIBUNE needs in average 84% less time than the steepest descent baseline to solve a test set of benchmark networks. Furthermore, the performance of TRIBUNE increases with the network size.