メモ7
をテンプレートにして作成
Unity学習帳2冊目
メモ7 をテンプレートにして作成
[
トップ
] [
差分
|
バックアップ
|
リロード
] [
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
[ ]
開始行:
#jsmath
**問題を解く
<問題2>
赤、青、黄のカラー被覆の銅線を6本束ねたケーブルで製品と...
このケーブルは回転させたり、前後を逆(裏返し)にして利用...
上記の様な問題を解く。まず順番に考えるために、より小さな...
問題を以下のように書き換える
<問題2-a>
A、Bの2種の銅線を6本束ねたケーブルで製品として異なるもの...
このケーブルは回転させたり、前後を逆(裏返し)にして利用...
この問題を回転する置換群で考えてモデル化すると集合と置換...
\(X=\left\{ 1,2,3,4,5,6 \right\} \\ Y=\left\{ A,B \right\...
\(\iota\)が恒等置換(置換しない置換)。\(\sigma\)が回転を...
これらの関数で群を作成するが、この時、\(\sigma\)と\(\tau\...
実際にこれを確認すると以下のようになっていた
\(\begin{matrix} \iota \cdot \tau =\tau \cdot \iota \quad...
以上の結果を踏まえると、\(\tau\)を先に演算させるか後に演...
よって群は以下のようなものとした
\(T=\left\{ \iota ,\sigma ,{ \sigma }^{ 2 },{ \sigma }^...
この群\(T\)を使いX,Yから作成される順列のひとつひとつに群...
結果は以下となった(ここで後述のプログラムコードを利用す...
\(AAAAAA:ι,σ,σ2,σ3,σ4,σ5,τ,τσ,τσ2,τσ3,τσ4,τσ5,\\ BAAAAA:ι...
回転置換の出現回数を数えると以下になる
\(\iota \quad 64={ 2 }^{ 6 }回\\ \sigma \quad 2={ 2 }^{ 1...
順列における各置換関数の使用回数がこれで解った
ここで書籍「なっとくする群・環・体」で説明されているフロ...
\(同値類の個数d=\left\{ W\left( \iota \right) +W\left( \...
ここから問題2が解ける。書籍「なっとくする群・環・体」で...
そこで天下り的に、答えが合致すれば「フロベニウスの利用方...
\(同値類の個数d=\left\{ W\left( \iota \right) +W\left( \...
合っていたようだ
&font(Silver){<個人的認識>&br;これはあくまで演習であり...
資料:[[フロベニウス方程式:http://reference.wolfram.com/l...
<メモ>
群の中の関数は「互いに素」の関係に近い?
***支援コード
この計算を解く目的だけに作っている。汎用性はない
回転置換群はもっと汎用的に作れる
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class Model2 : MonoBehaviour
{
void Start()
{
List<string> strList = Permutation(6, new char[] ...
RotateGropup rg = new RotateGropup();
List<string> rotList = new List<string>();
for (int i = 0; i < strList.Count; i++)
{
rotList.Add(string.Format("{0} : {1}", strLis...
}
string folder = Application.dataPath; ...
SaveText(folder, @"\置換サーチ結果.txt", rotList....
}
//順列作成
public List<string> Permutation(int x, char[] y)
{
int[] Z = new int[x+1];
for (int i = 0; i < Z.Length; i++)
{
Z[i] = (int)Mathf.Pow(y.Length, i); //指...
}
int total = Z[Z.Length - 1];
List<char[]> charList = new List<char[]>();
for (int i = 0; i < total; i++)
{
charList.Add(new char[x]);
}
for (int i = 0; i < x; i++)
{
int mod = 0;
char set = y[mod];
for (int j = 0; j < total; j++)
{
//指数の数列と回転置換群との関係をここで...
if (j % Z[i] == 0)
{
set = y[mod % (y.Length)];
mod++;
}
charList[j][i] = set; //二次元配列...
}
}
List<string> strList = charList.ConvertAll<string...
return strList;
}
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
class RotateGropup
{
public List<Rotate> rx = new List<Rotate>();
public RotateGropup()
{
rx.Add(new Rotate("ι", new int[] { 0, 1, 2, 3, 4,...
rx.Add(new Rotate("σ", new int[] { 5, 0, 1, 2, 3,...
rx.Add(new Rotate("σ2", new int[] { 4, 5, 0, 1, 2...
rx.Add(new Rotate("σ3", new int[] { 3, 4, 5, 0, 1...
rx.Add(new Rotate("σ4", new int[] { 2, 3, 4, 5, 0...
rx.Add(new Rotate("σ5", new int[] { 1, 2, 3, 4, 5...
rx.Add(new Rotate("τ", new int[] { 5, 4, 3, 2, 1,...
rx.Add(new Rotate("τσ", new int[] { 0, 5, 4, 3, 2...
rx.Add(new Rotate("τσ2", new int[] { 1, 0, 5, 4, ...
rx.Add(new Rotate("τσ3", new int[] { 2, 1, 0, 5, ...
rx.Add(new Rotate("τσ4", new int[] { 3, 2, 1, 0, ...
rx.Add(new Rotate("τσ5", new int[] { 4, 3, 2, 1, ...
}
public string Where(Rotate f)
{
System.Text.StringBuilder sb = new System.Text.St...
for (int i = 0; i < rx.Count; i++)
{
if (f * rx[0] == f * rx[i]) sb.Append(rx[i].n...
}
return sb.ToString();
}
}
//回転をモデル化した置換群R
class Rotate
{
public string name;
public string X;
public int[] shift;
public Rotate(string name, int[] shift)
{
this.name = name;
this.X = "012345";
this.shift = shift;
}
public Rotate(string X)
{
this.name = "func";
this.X = X;
this.shift = new int[] { 0, 1, 2, 3, 4, 5 };
}
//演算子「*」のオーバーロード
public static Rotate operator *(Rotate left, Rotate r...
{
char[] temp = new char[left.X.Length];
char[] temp2 = new char[left.X.Length];
for (int i = 0; i < left.shift.Length; i++)
{
temp[i] = left.X[left.shift[i]];
}
for (int i = 0; i < right.shift.Length; i++)
{
temp2[i] = temp[right.shift[i]];
}
//あたらしいRotate型を作って返す
//演算後はιで文字列の配置が変わった物を渡している...
Rotate iota = new Rotate("iota", new int[] { 0, 1...
iota.X = new string(temp2);
return iota;
}
//演算子「==」のオーバーロード
public static bool operator ==(Rotate left, Rotate ri...
{
//オブジェクトとして同一かどうか
if (object.ReferenceEquals(left, right))
{
return true;
}
//オブジェクトとしてnullかどうか
if (((object)left == null) || ((object)right == n...
{
return false;
}
return (left.X == right.X);
}
//演算子「==」と共に必ず設定する必要がある
public static bool operator !=(Rotate left, Rotate ri...
{
return !(left == right); //これはoperatorの処理で...
}
//文字表示
public override string ToString()
{
return X;
}
}
}}
終了行:
#jsmath
**問題を解く
<問題2>
赤、青、黄のカラー被覆の銅線を6本束ねたケーブルで製品と...
このケーブルは回転させたり、前後を逆(裏返し)にして利用...
上記の様な問題を解く。まず順番に考えるために、より小さな...
問題を以下のように書き換える
<問題2-a>
A、Bの2種の銅線を6本束ねたケーブルで製品として異なるもの...
このケーブルは回転させたり、前後を逆(裏返し)にして利用...
この問題を回転する置換群で考えてモデル化すると集合と置換...
\(X=\left\{ 1,2,3,4,5,6 \right\} \\ Y=\left\{ A,B \right\...
\(\iota\)が恒等置換(置換しない置換)。\(\sigma\)が回転を...
これらの関数で群を作成するが、この時、\(\sigma\)と\(\tau\...
実際にこれを確認すると以下のようになっていた
\(\begin{matrix} \iota \cdot \tau =\tau \cdot \iota \quad...
以上の結果を踏まえると、\(\tau\)を先に演算させるか後に演...
よって群は以下のようなものとした
\(T=\left\{ \iota ,\sigma ,{ \sigma }^{ 2 },{ \sigma }^...
この群\(T\)を使いX,Yから作成される順列のひとつひとつに群...
結果は以下となった(ここで後述のプログラムコードを利用す...
\(AAAAAA:ι,σ,σ2,σ3,σ4,σ5,τ,τσ,τσ2,τσ3,τσ4,τσ5,\\ BAAAAA:ι...
回転置換の出現回数を数えると以下になる
\(\iota \quad 64={ 2 }^{ 6 }回\\ \sigma \quad 2={ 2 }^{ 1...
順列における各置換関数の使用回数がこれで解った
ここで書籍「なっとくする群・環・体」で説明されているフロ...
\(同値類の個数d=\left\{ W\left( \iota \right) +W\left( \...
ここから問題2が解ける。書籍「なっとくする群・環・体」で...
そこで天下り的に、答えが合致すれば「フロベニウスの利用方...
\(同値類の個数d=\left\{ W\left( \iota \right) +W\left( \...
合っていたようだ
&font(Silver){<個人的認識>&br;これはあくまで演習であり...
資料:[[フロベニウス方程式:http://reference.wolfram.com/l...
<メモ>
群の中の関数は「互いに素」の関係に近い?
***支援コード
この計算を解く目的だけに作っている。汎用性はない
回転置換群はもっと汎用的に作れる
#code(csharp){{
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class Model2 : MonoBehaviour
{
void Start()
{
List<string> strList = Permutation(6, new char[] ...
RotateGropup rg = new RotateGropup();
List<string> rotList = new List<string>();
for (int i = 0; i < strList.Count; i++)
{
rotList.Add(string.Format("{0} : {1}", strLis...
}
string folder = Application.dataPath; ...
SaveText(folder, @"\置換サーチ結果.txt", rotList....
}
//順列作成
public List<string> Permutation(int x, char[] y)
{
int[] Z = new int[x+1];
for (int i = 0; i < Z.Length; i++)
{
Z[i] = (int)Mathf.Pow(y.Length, i); //指...
}
int total = Z[Z.Length - 1];
List<char[]> charList = new List<char[]>();
for (int i = 0; i < total; i++)
{
charList.Add(new char[x]);
}
for (int i = 0; i < x; i++)
{
int mod = 0;
char set = y[mod];
for (int j = 0; j < total; j++)
{
//指数の数列と回転置換群との関係をここで...
if (j % Z[i] == 0)
{
set = y[mod % (y.Length)];
mod++;
}
charList[j][i] = set; //二次元配列...
}
}
List<string> strList = charList.ConvertAll<string...
return strList;
}
//テキストファイルとしてセーブ
public void SaveText(string fileFolder, string filena...
{
using (StreamWriter w = new StreamWriter(fileFold...
{
foreach (var item in dataStr)
{
w.WriteLine(item);
}
}
}
}
class RotateGropup
{
public List<Rotate> rx = new List<Rotate>();
public RotateGropup()
{
rx.Add(new Rotate("ι", new int[] { 0, 1, 2, 3, 4,...
rx.Add(new Rotate("σ", new int[] { 5, 0, 1, 2, 3,...
rx.Add(new Rotate("σ2", new int[] { 4, 5, 0, 1, 2...
rx.Add(new Rotate("σ3", new int[] { 3, 4, 5, 0, 1...
rx.Add(new Rotate("σ4", new int[] { 2, 3, 4, 5, 0...
rx.Add(new Rotate("σ5", new int[] { 1, 2, 3, 4, 5...
rx.Add(new Rotate("τ", new int[] { 5, 4, 3, 2, 1,...
rx.Add(new Rotate("τσ", new int[] { 0, 5, 4, 3, 2...
rx.Add(new Rotate("τσ2", new int[] { 1, 0, 5, 4, ...
rx.Add(new Rotate("τσ3", new int[] { 2, 1, 0, 5, ...
rx.Add(new Rotate("τσ4", new int[] { 3, 2, 1, 0, ...
rx.Add(new Rotate("τσ5", new int[] { 4, 3, 2, 1, ...
}
public string Where(Rotate f)
{
System.Text.StringBuilder sb = new System.Text.St...
for (int i = 0; i < rx.Count; i++)
{
if (f * rx[0] == f * rx[i]) sb.Append(rx[i].n...
}
return sb.ToString();
}
}
//回転をモデル化した置換群R
class Rotate
{
public string name;
public string X;
public int[] shift;
public Rotate(string name, int[] shift)
{
this.name = name;
this.X = "012345";
this.shift = shift;
}
public Rotate(string X)
{
this.name = "func";
this.X = X;
this.shift = new int[] { 0, 1, 2, 3, 4, 5 };
}
//演算子「*」のオーバーロード
public static Rotate operator *(Rotate left, Rotate r...
{
char[] temp = new char[left.X.Length];
char[] temp2 = new char[left.X.Length];
for (int i = 0; i < left.shift.Length; i++)
{
temp[i] = left.X[left.shift[i]];
}
for (int i = 0; i < right.shift.Length; i++)
{
temp2[i] = temp[right.shift[i]];
}
//あたらしいRotate型を作って返す
//演算後はιで文字列の配置が変わった物を渡している...
Rotate iota = new Rotate("iota", new int[] { 0, 1...
iota.X = new string(temp2);
return iota;
}
//演算子「==」のオーバーロード
public static bool operator ==(Rotate left, Rotate ri...
{
//オブジェクトとして同一かどうか
if (object.ReferenceEquals(left, right))
{
return true;
}
//オブジェクトとしてnullかどうか
if (((object)left == null) || ((object)right == n...
{
return false;
}
return (left.X == right.X);
}
//演算子「==」と共に必ず設定する必要がある
public static bool operator !=(Rotate left, Rotate ri...
{
return !(left == right); //これはoperatorの処理で...
}
//文字表示
public override string ToString()
{
return X;
}
}
}}
ページ名: