1 Introduction  
2 Problem Definition  
3 Algorithm Taxonomy  
3.1 Deep Generative Models  
3.2 Sampling Strategies  
3.3 Generation Strategies  
3.4 Discussion: Permutation Invariance and Equivariance  
3.5 Representative Work  
3.6 Other Approaches  
4 Applications  
4.1 Molecule Design  
4.2 Protein Design  
4.3 Program Synthesis  
5 Challenges and Opportunities  
6 Concluding Remarks