#19623: Syndrome decoder is not a syndrome decoder
-------------------------------------+-------------------------------------
       Reporter:  dlucas             |        Owner:
           Type:  enhancement        |       Status:  needs_work
       Priority:  major              |    Milestone:  sage-7.0
      Component:  coding theory      |   Resolution:
       Keywords:                     |    Merged in:
        Authors:  David Lucas        |    Reviewers:  Julien Lavauzelle
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/dlucas/generic_decoders          |  fc79446d6948143d32a9065410453379c79ef2b2
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------
Changes (by jlavauzelle):

 * status:  needs_review => needs_work
 * reviewer:   => Julien Lavauzelle
 * cc: jlavauzelle (added)


Comment:

 I add some new remarks:
 * I think you could remove your `_list_all_error_values` method. For each
 step of the main loop (//i.e.// for a given error weight `i`), you only
 need `Permutations(l, i)`, with `l` equals to `i` times the list of non-
 zero elements of GF(q). Thus you can save a lot of memory, using the both
 iterators on `Permutations` and on `Subsets`.
 * I'm not completely sure of what I'm saying now, but you can notice that
 the ordering induced by the "composition" of these iterators respects the
 one you want for updating the table (//i.e.// first hamming weight, then
 lexicographic order). So in theory, you might never enter these blocks:
 {{{
 if (e.hamming_weight() == e_cur.hamming_weight()
         and e < e_cur):
     stop = False
     lookup[s] = copy(e)
 elif e.hamming_weight() < e_cur.hamming_weight():
     stop = False
     lookup[s] = copy(e)
 }}}
 * In `decode_to_code()`, you talk about decoding into the message space,
 but I think you meant into the code instead. In the same function, you may
 handle the case `s.is_zero()` before building the lookup table.
 * I don't really understand the difference between `number_errors()` and
 `decoding_radius()`. Is it a tight bound on the maximum number of errors
 the decoder can decode ? Or just a way to remember what the user has set
 in the `number_errors` parameter of the constructor ? Maybe you could make
 them more explicit, like `error_max_weight`.
 * I also think that your description of the decoder ("correcting up to
 `number_errors` errors") could fool the user, as `number_errors` may be
 set up to `n` whereas the decoder will never decode an error of weight
 `n`.

--
Ticket URL: <http://trac.sagemath.org/ticket/19623#comment:9>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to