The document discusses system partitioning for designing interconnected hardware components. It describes different types of partitioning including structural, functional, and granularity partitioning. Automatic partitioning approaches include constructive clustering and iterative transformation-based methods. Hierarchical clustering is a constructive approach that groups objects into partitions based on closeness metrics. Transformation-based methods perform neighborhood searches using algorithms like Kernighan-Lin and simulated annealing to optimize an objective function. Hardware-software partitioning aims to maximize performance by mapping computation-intensive processes to hardware while minimizing communication between hardware and software components.