Ask Your Question

kaisat's profile - activity

2023-02-14 20:52:35 +0200 received badge  Famous Question (source)
2014-11-10 16:52:32 +0200 received badge  Notable Question (source)
2014-04-07 10:40:58 +0200 received badge  Popular Question (source)
2013-01-08 21:48:38 +0200 commented answer Recursive backtracking function: how to clear variables on new function call?

I am not getting the same result with sst.list() though, so will look at that. It did occur to me that the tableau packages might be able to help but I could not quite see what to do.

2013-01-08 21:47:44 +0200 commented answer Recursive backtracking function: how to clear variables on new function call?

Wonderful, and many thanks! I am testing this and your code above seems to do exactly what I'd like. It seems that += rather than append is the way to go -- a key improvement -- and I will think about exactly how the placement of path_list = [] helped as well.

2013-01-08 21:46:14 +0200 received badge  Scholar (source)
2013-01-08 21:46:14 +0200 marked best answer Recursive backtracking function: how to clear variables on new function call?

I think the following code gives the good output (but is far from optimal, many computations are repeated again and again, as in the naive recursive computation of the Fibonacci sequence), here parameters are assumed to be partitions:

def get_paths(top, bot):
    if top == bot:
        return [[top]]
    path_list = []
    for p in top.down_list():
        if p.contains(bot):
            path_list += get_paths(p, bot)
    for u in path_list:
        u.append(top)
    return path_list

For example:

sage: gp = get_paths (Partition([3,3,1]),Partition([2,1])); len(gp)
8
sage: len (get_paths (Partition([3,3,2]),Partition([1])))
42

Actually we are computing functions already defined in Sage:

sage: sst = StandardSkewTableaux([[3, 3, 1], [2, 1]])
sage: sst.cardinality()
8
sage: StandardTableaux([3,3,2]).cardinality()
42

Use sst.list() to get the "same" list as the one computed by get_paths(). You may eventually look at the source code of these functions, in the modules sage.combinat.tableau and sage.combinat.skew_tableau .

Amitiés.

2013-01-08 21:46:13 +0200 received badge  Supporter (source)
2013-01-04 18:50:38 +0200 asked a question Recursive backtracking function: how to clear variables on new function call?

I've been trying to write a simple function to make lists of all the Young diagrams/partitions between a starting partition ('top') and an ending partition ('bot'), with each step in the list a covering relation (exactly one box difference in each step).

For instance, I would like to input [2,1] for top and [1] for bot and get

[[2,1],[2],[1]]

[[2,1],[1,1],[1]]

as my outputs. (I want to do this because it's useful for some computations with Littlewood-Richardson coefficients; having the lists that give each partition in a path between top and bot will be useful for other computations.)

My code at present has an echo, and worse, I can't figure out where to initialize path_list. Where do I put path_list = [] -- or create other lists -- to make sure that:

  1. I get a separate list for each path, and
  2. Calling the function again clears path_list?

(2) is worst: right now, since path_list is an internally-defined variable, I get the following bad behavior:

sage: load "makepartitionlist.sage"

sage: get_path([1],[1])

[[1]]

[[1]]

sage: get_path([1],[1])

[[1], [1]]

[[1], [1]]

sage: get_path([1],[1])

[[1], [1], [1]]

[[1], [1], [1]]

because path_list is not cleared when I call get_path again (which I'd hoped putting path_list = [] in the arguments would accomplish).

The code:

def get_path(top, bot, path_list = []):
    path_list.append(top)
    if top == bot:
       print path_list
       return path_list
    if not Partition(top).contains(Partition(bot)):
       return None
    for i in range(0,len(Partition(top).down_list())):
            p = Partition(top).down_list()[i]
        if Partition(p).contains(bot):
           path_list.append(p)
           get_path(p, bot, path_list)

I'm using Sage 5.0.1 with Sage-combinat providing the Partition function and others.