여러분은 어떤 것을 선택해야 하는가? 첫 번째 단계는 각 자료 구조를 구현하는 데 필요한 작업에 대해 생각해보는 것이다. 접두어라면 앞에서 단어를 제거하고, 끝에서 단어를 추가할 수 있어야 한다. 예를 들어 현재 접두어가 “Half a”라면 다음 단어는 “bee”이고, 다음 접두어는 “a bee”가 된다.
첫 번째 선택이 리스트라면 원소를 추가하거나 제거하기는 쉽지만, 접두어를 사전에서 키로 사용할 수 있어야 하므로 리스트는 제외해야 한다. 튜플이라면 추가나 제거는 할 수 없지만, 덧셈 연산자를 사용해 새 튜플을 만들 수 있다.
def shift(prefix, word):
return prefix[1:] + (word,)
shift는 단어의 튜플 prefix와 문자열 word를 받고 prefix에서 첫 번째를 제외한 모든 단어와 word를 끝에 추가한 튜플을 새로 만든다.
접미어 컬렉션에서 우리가 필요한 작업은 새로운 접미어를 추가(또는 기존 접미어의 빈도를 증가)하거나 무작위 접미어를 선택하는 것이다.
새 접미어를 추가하는 것은 리스트 구현이나 히스토그램, 어느 것을 선택해도 쉽다. 단, 리스트에서는 무작위 원소를 선택하는 것이 쉽고, 히스토그램에서는 무작위 원소 선택을 효율적으로 하기가 어렵다(연습문제 13-7 참조).