Memories and data storage systems are a crucial component in every computing and data system. The design and management of such memories and systems is very important in order to improve their capacity, performance, and lifetime. This class will address the theoretical aspects of these memories from their architecture, information, coding, and systems perspectives.
The primary focus will be given for coding and algorithms based solutions for improving the performance of such systems. The topics that will be studied are various families of codes and algorithms for rewriting and error-correction, codes for constrained systems, permutation codes, codes for deletions, and several more coding and algorithms problems for DNA-based storage systems.