The graph alignment problem: fundamental limits and efficient algorithms