  Community detection is a key aspect of network analysis, as it allows for the
identification of groups and patterns within a network. With the
ever-increasing size of networks, it is crucial to have fast algorithms to
analyze them efficiently. It is a modularity-based greedy algorithm that
divides a network into disconnected communities better over several iterations.
Even in big, dense networks, it is renowned for establishing high-quality
communities. However it can be at least a factor of ten slower than community
discovery techniques that rely on label-propagation, which are generally
extremely fast but obtain communities of lower quality. The researchers have
suggested a number of methods for parallelizing and improving the Louvain
algorithm. To decide which strategy is generally the best fit and which
parameter values produce the highest performance without compromising community
quality, it is critical to assess the performance and accuracy of these
existing approaches. As we implement the single-threaded and multi-threaded
versions of the static Louvain algorithm in this report, we carefully examine
the method's specifics, make the required tweaks and optimizations, and
determine the right parameter values. The tolerance between each pass can be
changed to adjust the method's performance. With an initial tolerance of 0.01
and a tolerance decline factor of 10, an asynchronous version of the algorithm
produced the best results. Generally speaking, according to our findings, the
approach is not well suited for shared-memory parallelism; however, one
potential workaround is to break the graph into manageable chunks that can be
independently executed and then merged back together.
