python.nlp essay (3) Calculating Sanskrit melody virahanka

Problem Description:

Studying the combination of short and long syllables yields the number of melodic combinations of length n, where the short syllable is marked S, which occupies one length, and the long syllable, marked L, which occupies two lengths. For example, when n=4, V4={LL, SSL, SLS, LSS, SSSS}

分析 V(n) = {"S" + V(n-1)} + {"L" + V(n-2)]

code:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May  3 16:49:04 2018

@author: day
"""
def virahanka1(n):

    if n == 0:

        return [""]

    elif n == 1:

        return ["S"]

    else:

        s = ["S" + prosody for prosody in virahanka1(n-1)]
        
        l = ["L" + prosody for prosody in virahanka1(n-2)]

        return s + l

 

def virahanka2(n):

    lookup = [[""], ["S"]]

    for i in range(n-1):

       s = ["S" + prosody for prosody in lookup[i+1]]
       
       l = ["L" + prosody for prosody in lookup[i]]
       
       lookup.append(s + l)

    return lookup[n]

 

def virahanka3(n, lookup={0:[""], 1:["S"]}):

    if n not in lookup:

        s = ["S" + prosody for prosody in virahanka3(n-1)]
        
        l = ["L" + prosody for prosody in virahanka3(n-2)]
        
        lookup[n] = s + l
        
        return lookup[n]

 

from nltk import memoize

@memoize

def virahanka4(n):

    if n == 0:

        return [""]

    elif n == 1:

        return ["S"]

    else:

        s = ["S" + prosody for prosody in virahanka4(n-1)]

        l = ["L" + prosody for prosody in virahanka4(n-2)]

        return s + l

output:

virahanka4(4)
Out[11]: ['SSSS', 'SSL', 'SLS', 'LSS', 'LL']

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325542960&siteId=291194637