various clustering algorithm implementations