algorithm explanation