Использование MemberQ в списке матриц - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть функция, вывод которой представляет собой список матриц смежности двудольных графов, и я хочу проверить, имеет ли случайно сгенерированная матрица одну из этих матриц в качестве подматрицы внутри нее.

Моя функция дляГенерация списка матриц:

Krsvariants[r_, s_] := Module[{aa}, aa = Subsets[Range[1, r + s], {r}];
  Table[
   Table[
    If[MemberQ[Tuples[aa[[k]], 2], {i, j}] \[Or] 
      MemberQ[Tuples[Complement[Range[1, r + s], aa[[k]]], 2], {i,j}], 0, 1], {i, 1, r + s}, {j, 1, r + s}], 
{k, 1, Length[aa]}]]

И для r = 2 s = 3 имеет вывод

{{{0, 0, 1, 1, 1}, {0, 0, 1, 1, 1}, {1, 1, 0, 0, 0}, {1, 1, 0, 0, 
   0}, {1, 1, 0, 0, 0}}, {{0, 1, 0, 1, 1}, {1, 0, 1, 0, 0}, {0, 1, 0, 
   1, 1}, {1, 0, 1, 0, 0}, {1, 0, 1, 0, 0}}, {{0, 1, 1, 0, 1}, {1, 0, 
   0, 1, 0}, {1, 0, 0, 1, 0}, {0, 1, 1, 0, 1}, {1, 0, 0, 1, 0}}, {{0, 
   1, 1, 1, 0}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {0,
    1, 1, 1, 0}}, {{0, 1, 1, 0, 0}, {1, 0, 0, 1, 1}, {1, 0, 0, 1, 
   1}, {0, 1, 1, 0, 0}, {0, 1, 1, 0, 0}}, {{0, 1, 0, 1, 0}, {1, 0, 1, 
   0, 1}, {0, 1, 0, 1, 0}, {1, 0, 1, 0, 1}, {0, 1, 0, 1, 0}}, {{0, 1, 
   0, 0, 1}, {1, 0, 1, 1, 0}, {0, 1, 0, 0, 1}, {0, 1, 0, 0, 1}, {1, 0,
    1, 1, 0}}, {{0, 0, 1, 1, 0}, {0, 0, 1, 1, 0}, {1, 1, 0, 0, 1}, {1,
    1, 0, 0, 1}, {0, 0, 1, 1, 0}}, {{0, 0, 1, 0, 1}, {0, 0, 1, 0, 
   1}, {1, 1, 0, 1, 0}, {0, 0, 1, 0, 1}, {1, 1, 0, 1, 0}}, {{0, 0, 0, 
   1, 1}, {0, 0, 0, 1, 1}, {0, 0, 0, 1, 1}, {1, 1, 1, 0, 0}, {1, 1, 1,
    0, 0}}}

, что соответствует 10 различным матрицам.Затем я хочу проверить, содержит ли случайная матрица хотя бы один из этих 10, и посчитать, сколько.

TK23[M_, n_] := Module[{S, k, i},
  S = Subsets[Range[n], {5}];
  Return[Count[
    Table[MemberQ[Krsvariants[2, 3], M[[S[[k]], S[[k]]]]] , {k, 1, 
      Binomial[n, 5]}], True]];]

Но когда я запускаю это, всегда кажется, что он возвращает ноль, даже когда применяется к матрицам, которые определенно должны содержать один из 10.

1 Ответ

1 голос
/ 28 сентября 2019
mmK = Krsvariants[2, 3]
tk23[mM_] := Module[{mS, n},
  n = Length@mM;
  mS = Subsets[Range[n], {5}];
  Total@Table[Count[mmK, mM[[s, s]]], {s, mS}]
  ]

Редактировать: Если вы хотите варьировать индексы строк отдельно от индексов столбцов, используйте

Total@Table[Count[mmK, mM[[s1, s2]]], {s1, mS}, {s2, mS}]
...