An overview of protein–ligand docking and scoring algorithms