понедельник, 6 февраля 2012 г.

Shuffle product

Математические статьи в педивикии такие математические:

Алгебра Хопфа – алгебра, являющаяся унитарной ассоциативной коалгеброй и, таким образом, биалгеброй c антигомоморфизмом специального вида. Названа в честь Х. Хопфа.

Спасибо, как говорится, за разъяснения. Всего-то хотел узнать, что такое shuffle algebra, оказалось, что это просто алгебра с shuffle product, где последнее определяется как сумма по всем перетасовкам двух слов. Вспомните такой метод тасование карт: колода разделяется на две части и они обе перемешиваются методом, напоминающим быстрое пролистывание страниц книги, как изображено на картинке. Так же определяется и тасование слов: группы букв перемешиваются с сохранением порядка в каждой группе.


A riffle shuffle being performed during a game of poker at a bar near Madison, Wisconsin, Johnny Blood

Забавно, что общеупотребительным математическим символом shuffle product служит кириллическая буква «ш». Например, произведение слов «shu» и «pro» выглядит так:
(shu)ш(pro)=proshu+prshou+prshuo+prsohu+pshrou+pshruo+pshuro+psrhou+psrhuo+srohu+shprou+shpruo+shpuro+shupro+sphrou+sphruo+sphuro+sprhou+sprhuo+sprohu
В Wolfram Mathematica к сожалению нет встроенной функции для такого произведения, навскидку написал такую функцию:
ShuffleProduct[word1_, word2_] :=Module[{chrs = Characters[word1 <> word2], nums}, nums = Range[Length[chrs]]; StringJoin@Permute[chrs, InversePermutation[#]] & /@ (Join[#, Complement[nums, #]] & /@Subsets[nums, {Length[Characters[word1]]}])]
хотя уверен, что можно и компактнее (ваши варианты?).

Shuffle algebra, кстати, применяется для изучения кратных полилогарифмов, а стало быть для вычисления фейнмановских интегралов (почитать про это можно тут arXiv:1005.1855). Ещё, например, эйкональные глюонные амплитуды (hot topic из-за суперсимметричной N=4 Yang-Mills theory) тоже образуют shuffle algebra.

6 комментариев:

  1. Shuffle[s1_String, s2_String] :=
    Module[{a = Characters[s1], b = Characters[s2], i = 1, j = 1},
    StringJoin @@@ ((i = j = 1;
    Replace[#, {1 :> a[[i++]], 0 :> b[[j++]]}] & /@ #) & /@
    Permutations[
    Join[Table[1, {Length[a]}], Table[0, {Length[b]}]]])]

    ОтветитьУдалить
    Ответы
    1. О, я понял, что моя функция работает неправильно из-за Union, его надо убрать. На самом деле, есть простое рекурсивное определение:

      "abc..."ш"xyz.."="a"("bc..."ш"xyz..")+"x"("abc..."ш"yz..")

      Shuffle[s_String, ""] := {s};
      Shuffle["", s_String] := {s};
      Shuffle[s1_String, s2_String] := Join[StringTake[s1, 1] <> # & /@ Shuffle[StringDrop[s1, 1], s2], StringTake[s2, 1] <> # & /@ Shuffle[s1, StringDrop[s2, 1]]]

      Удалить
    2. Да, мне тоже такая рекурсия в голову пришла. Только штатная процедура Permutations я думаю быстрее работает.

      Удалить
  2. Только к алгебре Хопфа это, наверное, имеет такое же отношение, как сложение натуральных чисел к теории групп

    ОтветитьУдалить
    Ответы
    1. В связи с этим приходит в голову следующая мысль: статья в энциклопедии должна быть организована в виде последовательности переходов «от частного к общему», а не методом «от общего к частному». То есть сначала приводится очень частное определение с отсылкой только к элементарным «школьным» понятиям (насколько это вообще возможно), а потом показывается, какое место оно занимает в более общих (более абстрактных) понятиях.

      Удалить
  3. Точнее, не натуральных, а целых :)

    ОтветитьУдалить