Ride-Sharing Optimization Algorithms For Urban Commuting