Why is On better than O nlogn ?
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
In the landscape of algorithm design, determining the efficiency of algorithms is crucial. One of the most common methods to gauge this efficiency is through Big O notation, which characterizes the time complexity of an algorithm as the input size grows towards infinity. Among the various Big O expressions, and are frequently discussed due to their relevance in diverse computational problems. Understanding why is considered better than involves examining these notations through the lens of computational efficiency.
Technical Explanation
Understanding the Notations
- - Linear Time Complexity: This notation implies that the algorithm's running time increases linearly with respect to the input size. For example, if the input size doubles, the running time will also double. Algorithms with complexity include common operations like finding the maximum or minimum in an unsorted list.
- - Linearithmic Time Complexity: This denotes algorithms whose running time increases in proportion to times the logarithm of . This complexity typically arises in algorithms that involve recursive processes followed by a linear process, such as merge sort or heapsort.
Comparison through Examples
To grasp the distinction between and , consider the following example:
- Simple Iteration vs. Sorting: Suppose you want to sum up all elements in an array. A simple loop through the array takes linear time, resulting in a time complexity of . In contrast, sorting the array to find the k-largest elements using a sort algorithm like merge sort involves , making it less efficient than a simple sum for this specific task.
Mathematical Perspective
In mathematical terms, grows faster than alone. Understanding this can be achieved by comparing their growth rates for various input sizes:
| Input Size () | Time | Time | |
| 10 | 10 | 33.22 | |
| 100 | 100 | 664.38 | |
| 1,000 | 1,000 | 9,965.78 | |
| 10,000 | 10,000 | 132,877.12 | |
| 100,000 | 100,000 | 1,660,964.05 |
Even though both start close for smaller , as grows, the difference becomes significant.
Additional Details
Scalability and Performance
One of the fundamental reasons why is preferred over is scalability. In real-world applications, efficient algorithms can handle larger datasets, crucial in fields like data analytics and machine learning. A higher order of growth (represented by ) implies more computational resources and time are required as input size increases.
Memory Considerations
Algorithms with higher time complexities often require more auxiliary memory, increasing their space complexity. For instance, sorting algorithms with time complexity might also use additional space for merging operations, whereas an approach, like a straightforward traversal, may not.
Practical Implications
While the theoretical distinctions between and are clear, practical scenarios might dictate different considerations. Sometimes, an algorithm might be a better choice due to factors like ease of implementation, better constants hidden in Big O notation, or compatibility with other system components.
Conclusion
In summary, is generally considered superior to due to its linear growth rate, which ensures that algorithms remain efficient and scalable as input sizes increase. By continually evaluating algorithm performance and choosing the right complexity classes, we can optimize our computational processes for both speed and resource utilization. However, context and application specifics should always guide the final choice of algorithm.
Related reading
- Why is processing a sorted array slower than an unsorted array?
- Why is QuackSort 2x faster than Data.List's sort for random lists?
- Why is quicksort better than mergesort?
- Why is quicksort used in practice?
- Why is printing to stdout so slow? Can it be sped up?
- Why is PyTorch 2x slower than Keras for an identical model and hyperparameters?
- Why is Selection Sort not stable?
- Why is sorting a string On log n?

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.