for Z in R do X:={opY,opZ}:
T:=UjiAdd1VekMd,X,L; if T=true then
C:=[opC,X]: end if:
end do: end do:
end if: end do:
end do: returnC;
end proc:
1.3.9 ReduEki1 membuang anggota output Kolek1VekM dan menyisakan vektor-
vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika ditambahkan ke M,
ReduEki1:=procH::list,M::list local i,h::integer, A,L,G,K,R::list, Q,S::set:
h:=nopsH: A:=H[1]:
G:=AddVekMA,M: K:=UbahMtxRCG:
L:=sortmapS-UbahSetKeDesS,K[2]: R:=[A]: Q:={L}:
for i from 2 to h do A:=H[i]:
G:=AddVekMA,M: K:=UbahMtxRCG:
L:=sortmapS-UbahSetKeDesS,K[2]: S:={L} intersect Q:
if S={} then Q:={opQ,L}:
R:=[opR,A]: end if:
end do: returnR:
end proc:
1.3.10 Misalkan himpunan H adalah output Kolek1VekM, setiap pasangan vektor
X,Y anggota H akan mehasilkan vektor Z = X + Y. Agar dua vektor X dan
Y bisa ditambahkan langsung ke matriks M, maka Z diuji dengan prosedur
UjiAdd2VekM berdasarkan output ListKombM.
UjiAdd2VekM:=procd::posint,Z::set,L::list local H,G::list, i,j,g,b,k,n,t::integer:
if nopsZd-2 then returnfalse end if; H:=L: k:=nopsL[1]:
n:=mind-3,k: for i from 1 to n do
G:=H[i]: g:=nopsG: b:=d-2-i:
for j from 1 to g do t:=HmDistZ,G[j]:
if tb then returnfalse;
end if: end do:
end do: returntrue;
end proc:
1.3.11 Kolek2VekM menentukan himpunan semua pasang X,Y dalam yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd2VekM.
Kolek2VekM:=procd::posint,H::list,L::list,c::posint local X,Y,Z::set, C::list, h,i,j::integer, T::symbol:
h:=nopsH: C:=[]: for i from 1 to h-1 do
X:=H[i]: for j from i+1 to h do
Y:=H[j]: Z:=AddVX,Y:
T:=UjiAdd2VekMd,Z,L: if T=true then
C:=[opC,{X,Y}]: if nopsC=c then
C:=[op{opC}]: returnC;
end if: end if:
end do: end do:
C:=[op{opC}]:
returnC: end proc:
1.3.12 kolek2VekMDt menentukan himpunan semua pasang X,Y menggunakan
data hasil sebelumnya.
Kolek2VekMDt:=procd::posint,H::list,L::list,c::posint,Dat::li st
local X,Y,Z::set, h,i,j,k::integer, F,C::list, T::symbol: C:=Dat[2]: k:=Dat[1]:
h:=nopsH: for i from k to h-1 do
X:=H[i]: for j from i+1 to h do
Y:=H[j]: Z:=AddVX,Y:
T:=UjiAdd2VekMd,Z,L: if T=true then
C:=[opC,{X,Y}]: if nopsC=c then
C:=[op{opC}]: F:=[i,C]:
save F, D:\\coding new\\ Coding Theory\\DataOutD7Xt\\DatTemp2.m;
returnC; end if:
end if: end do:
end do: F:=[op{opC}]:
save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp2.m;
returnF: end proc:
1.3.13 ReduEkiX membuang anggota output Kolek2VekM dan menyisakan
vektor-vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika ditambahkan ke M,
ReduEkiX:=procH::list,M::list local i,h::integer, A,L,G,K,R::list, Q,S::set:
h:=nopsH: A:=H[1]:
G:=AddVekMXA,M:
K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]:
R:=[A]: Q:={L}: for i from 2 to h do
A:=H[i]: G:=AddVekMXA,M:
K:=UbahMtxRCG: L:=sortmapS-UbahSetKeDesS,K[2]:
S:={L} intersect Q: if S={} then
Q:={opQ,L}: R:=[opR,A]:
end if: end do:
returnR: end proc:
1.3.14 Misalkan himpunan H adalah output Kolek2VekM, setiap pasangan vektor
X,Y,Z anggota H akan mehasilkan vektor W = X + Y + Z. Agar dua vektor X, Y
dan Z bisa ditambahkan langsung ke matriks M, maka U diuji dengan prosedur UjiAdd3VekM berdasarkan output ListKombM.
UjiAdd3VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer:
if nopsUd-3 then returnfalse end if; H:=L: k:=nopsL[1]:
n:=mind-4,k: for i from 1 to n do
G:=H[i]: g:=nopsG: b:=d-3-i:
for j from 1 to g do t:=HmDistU,G[j]:
if tb then returnfalse;
end if: end do:
end do: returntrue;
end proc:
1.3.15 Misalkan himpunan H adalah output Kolek3VekM, setiap 4 vektor
X,Y,Z,W anggota H akan mehasilkan vektor U = W + X + Y + Z. Agar dua
vektor X, Y,Z dan W bisa ditambahkan langsung ke matriks M, maka U diuji dengan prosedur UjiAdd4VekM berdasarkan output ListKombM.
UjiAdd4VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer:
if nopsUd-4 then returnfalse end if; H:=L: k:=nopsL[1]:
n:=mind-5,k: for i from 1 to n do
G:=H[i]: g:=nopsG: b:=d-4-i:
for j from 1 to g do t:=HmDistU,G[j]:
if tb then returnfalse;
end if: end do:
end do: returntrue;
end proc:
1.3.16 SplitHX menentukan himpunan semua pasang X,Y dalam yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd2VekM.
SplitHX:=procd::posint,P::list,H::list,L::list local A,B,X,Y,Z,M,R,S,U::set, i,j,k,s,a::integer,
T,T1::symbol: A:=P[1]: B:=P[2]: a:=nopsA:
if a=0 then s:=op1,B:
B:=subsop1=NULL,B: X:=H[s]: U:={}:
for i in B do Y:=H[i]:
Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L:
if T=true then U:={opU,i}:
end if: end do:
return[[{s},U],[{},B]]: else
s:=op1,B:
B:=subsop1=NULL,B: X:=H[s]: U:={}:
for i in B do Y:=H[i]:
Z:=AddVX,Y: T:=UjiAdd2VekMd,Z,L:
if T=true then for j from 1 to a do
M:=combinat[choose]A,j: T1:=true:
for R in M while T1=true do S:=Z:
for k in R do S:=AddVS,H[k]:
end do: T1:=UjiAddXVekM2+j,d,S,L:
end do: if T1=false then
break; end if:
end do: if T1=true then
U:={opU,i}: end if:
end if: end do:
return[[{opA,s},U],[A,B]]: end if:
end proc: MoveRNX:=procR::list,N::list,c::integer,y::integer
local X,L,M::list, A::set, i,x1,x2::integer: M:=N: A:={}:
for i from 1 to nopsR do X:=R[i]:
x1:=nopsX[1]: x2:=nopsX[2]:
if x1=y and x2c then M:=[opM,X]:
A:={opA,i}: elif x1+x2y+c or x2=0 then
A:={opA,i}: end if:
end do:
L:=subsopopmapx-x=NULL,A,R: return[L,M]:
end proc: IdxAddXV:=procd::posint,P::list,H::list,L::list,c::integer,y:
:integer local R,N,T::list, i,s::integer:
R:=SplitHXd,P,H,L: N:=[]: T:=MoveRNXR,N,c,y:
R:=T[1]: N:=T[2]: for i while R[] do
R:=mapx-opSplitHXd,x,H,L,R: T:=MoveRNXR,N,c,y:
R:=T[1]: N:=T[2]: end do:
returnN: end proc:
1.3.17 Misalkan himpunan H adalah output KolekX-1VekM, setiap X vektor
anggota H akan mehasilkan jumlah. Agar X vektor ini bisa ditambahkan langsung ke matriks M, maka diuji dengan prosedur UjiAddXVekM
berdasarkan output ListKombM.
UjiAddXVekM:=procx::posint,d::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer:
if nopsUd-x then returnfalse end if; H:=L: k:=nopsL[1]:
n:=mind-x-1,k: for i from 1 to n do
G:=H[i]: g:=nopsG: b:=d-x-i:
for j from 1 to g do t:=HmDistU,G[j]:
if tb then returnfalse;
end if: end do:
end do: returntrue;
end proc:
1.3.18 Misalkan himpunan H adalah output Kolek4VekM, setiap 5 vektor
X,Y,Z,V,W anggota H akan mehasilkan vektor U = W+V + X + Y + Z. Agar dua vektor X, Y,Z,V dan W bisa ditambahkan langsung ke matriks M,
maka U diuji dengan prosedur UjiAdd5VekM berdasarkan output ListKombM
.
UjiAdd5VekM:=procd::posint,U::set,L::list local H,G::list, i,j,g,b,k,n,t::integer:
if nopsUd-5 then returnfalse end if; H:=L: k:=nopsL[1]:
n:=mind-6,k: for i from 1 to n do
G:=H[i]: g:=nopsG: b:=d-5-i:
for j from 1 to g do t:=HmDistU,G[j]:
if tb then returnfalse;
end if: end do:
end do: returntrue;
end proc:
1.3.19 Kolek5VekMDt menentukan himpunan semua pasang X,Y,Z,U,W
menggunakan data hasil sebelumnya.
Kolek5VekMDt:=procd::posint,H::list,L::list,c::posint,Dat:: list
local X,Y,Z,U,U1,U2,U3,V,W1,W2,W3,R,S,A::set, h,i,j,k::integer, T,T1,T2,T3::symbol, C,F::list:
C:=Dat[2]: k:=Dat[1]: h:=nopsH:
for i from k to h-1 do X:=H[i]:
for j from i+1 to h do Y:=H[j]:
Z:=X union Y: if nopsZ=5 then
S:=X intersect Y: V:=Z minus S:
A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L:
if T=true then U1:=AddVop1,S,A:
U2:=AddVop2,S,A: U3:=AddVop3,S,A:
T1:=UjiAdd3VekMd,U1,L:
T2:=UjiAdd3VekMd,U2,L: T3:=UjiAdd3VekMd,U3,L:
if T1=true and T2=true and T3=true then W1:=AddVop2,S,U1:
W2:=AddVop3,S,U1: W3:=AddVop3,S,U2:
T1:=UjiAdd4VekMd,W1,L: T2:=UjiAdd4VekMd,W2,L:
T3:=UjiAdd4VekMd,W3,L: if T1=true and T2=true and T3=true then
R:=AddVop3,S,W1: T:=UjiAdd5VekMd,R,L:
if T=true then C:=[opC,{opZ}]:
if nopsC=c then C:=[op{opC}]:
F:=[i,C]: save F, D:\\coding new\\Coding
Theory\\DataOutD7Xt\\DatTemp5.m; returnC;
end if: end if:
end if: end if:
end if: end if:
end do: end do:
F:=[op{opC}]: save F, :\\coding new\\Coding
Theory\\DataOutD7Xt\\DatTemp5.m; returnF:
end proc: Kolek5VekMDtX:=procd::posint,H::list,L::list,c::posint,Dat::l
ist local X,Y,Z,U,U1,U2,U3,V,W1,W2,W3,R,S,A,C,K::set,
h,i,j,k::integer, T,T1,T2,T3::symbol, F::list: C:={opDat[2]}: k:=Dat[1]:
h:=nopsH: for i from k to h-1 do
X:=H[i]: for j from i+1 to h do
Y:=H[j]:
Z:=X union Y: if nopsZ=5 then
K:={Z} intersect C: if K={} then
S:=X intersect Y: V:=Z minus S:
A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L:
if T=true then U1:=AddVop1,S,A:
U2:=AddVop2,S,A: U3:=AddVop3,S,A:
T1:=UjiAdd3VekMd,U1,L: T2:=UjiAdd3VekMd,U2,L:
T3:=UjiAdd3VekMd,U3,L: if T1=true and T2=true and T3=true then
W1:=AddVop2,S,U1: W2:=AddVop3,S,U1:
W3:=AddVop3,S,U2: T1:=UjiAdd4VekMd,W1,L:
T2:=UjiAdd4VekMd,W2,L: T3:=UjiAdd4VekMd,W3,L:
if T1=true and T2=true and T3=true then R:=AddVop3,S,W1:
T:=UjiAdd5VekMd,R,L: if T=true then
C:=C union {Z}: if nopsC=c then
F:=[i,[opC]]: save F, D:\\coding new\\Coding
Theory\\DataOutD7Xt\\DatTemp5.m; return[opC];
end if: end if:
end if: end if:
end if: end if:
end if: end do:
end do: F:=[opC]:
save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m;
returnF: end proc:
1.3.20 KolekXVekM menentukan himpunan semua X vektor yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAddXVekM.
KolekXVekM:=procx::posint,d::posint,H::list,L::list,c::posint local X,Y,Z,U,V,S,A,B,R,N,K,W,Q::set, h,i,j,k,l::integer,
T,T1::symbol, C::list: h:=nopsH: C:=[]:
for i from 1 to h-1 do X:=H[i]:
for j from i+1 to h do Y:=H[j]:
Z:=X union Y: if nopsZ=x then
S:=X intersect Y: V:=Z minus S:
A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L:
if T=true then for k from 1 to x-3 do
N:=combinat[choose]S,k; T1:=true:
for R in N while T1=true do B:=A:
for K in R do B:=AddVB,K:
end do: T1:=UjiAddXVekM2+k,d,B,L:
end do: if T1=false then
break; end if:
end do: if T1=true then
W:=opS minus R: Q:=AddVB,W:
T:=UjiAddXVekMx,d,Q,L: if T=true then
C:=[opC,{opZ}]: if nopsC=c then
C:=[op{opC}]: returnC:
end if: end if:
end if: end if:
end if: end do:
end do: C:=[op{opC}]:
returnC: end proc:
1.3.21 KolekXVekMDt menentukan himpunan semua pasang X,Y,Z,U,W
menggunakan data hasil sebelumnya.
KolekXVekMDt:=procx::posint,d::posint,H::list,L::list,c::posi nt,Dat::list
local X,Y,Z,U,V,S,A,B,R,N,K,W,Q::set, h,i,j,k,l,t::integer, T,T1::symbol, C,F::list:
C:=Dat[2]: t:=Dat[1]: h:=nopsH:
for i from t to h-1 do X:=H[i]:
for j from i+1 to h do Y:=H[j]:
Z:=X union Y: if nopsZ=x then
S:=X intersect Y: V:=Z minus S:
A:=AddVop1,V,op2,V: T:=UjiAdd2VekMd,A,L:
if T=true then for k from 1 to x-3 do
N:=combinat[choose]S,k; T1:=true:
for R in N while T1=true do B:=A:
for K in R do B:=AddVB,K:
end do: T1:=UjiAddXVekM2+k,d,B,L:
end do: if T1=false then
break; end if:
end do: if T1=true then
W:=opS minus R: Q:=AddVB,W:
T:=UjiAddXVekMx,d,Q,L: if T=true then
C:=[opC,{opZ}]: if nopsC=c then
C:=[op{opC}]: F:=[i,C]:
save F, D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp6.m;
returnC: end if:
end if: end if:
end if: end if:
end do: end do:
F:=[op{opC}]: save F, D:\\coding new\\Coding
Theory\\DataOutD7x\\DatTemp6.m; returnF:
end proc:
1.3.22 Kolek5VM menentukan himpunan semua pasang X,Y,Z dalam yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd3VekM.
KolekXVM:=procd::posint,N::list,H::list,L::list,m::integer local A,B,R,Y,Z,V,M,S::set, i,n,y1,y2,k,j::integer,
X,K::list, T1,T::symbol: n:=nopsN: K:=[]:
for i from 1 to n do X:=N[i]: A:=X[1]: B:=X[2]:
R:=combinat[choose]B,2: for Y in R do
y1:=op1,Y: y2:=op2,Y: V:=AddVH[y1],H[y2]:
T:=UjiAdd2VekMd,V,L: if T=true then
for j from 1 to m do M:=combinat[choose]A,j:
T1:=true: for Z in M while T1=true do
S:=V: for k in Z do
S:=AddVS,H[k]: end do:
T1:=UjiAddXVekM2+j,d,S,L: end do:
if T1=false then break;
end if: end do:
if T1=true then K:=[opK,{H[y1],H[y2],H[op1,A],H[op2,A],H[op3,A]}]:
end if: end if:
end do: end do:
returnK: end proc:
DefH4 DefHX:=procK::list,H::list
local X1,X2,R::set, X,L::list, k,i::integer: k:=nopsK: L:=[]:
for i from 1 to k do X:=K[i]: X1:=X[1]: X2:=X[2]:
R:=mapx-{opX1,x},X2: L:=[opL,opR]:
end do: L:=mapS-mapx-opx,H,S,L:
returnL: end proc:
Lampiran 2 Eksplorasi Konstruksi Kode Optimal Kuat untuk d = 5
Konstruksi Kode Optimal Kuat [8,2,5], dengan menggunakan satu kali basis matriks sebagai
berikut:
B:=[2,[{0,1},{0,1},{0},{0},{1},{1}]];
M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1];
W:=NonZeroWtB; Code526:=B;
save Code526, D:\\Coding Theory\\CdD5k2r6.m;
Konstruksi Kode Optimal Kuat [11,4,5]
, dengan menggunakan satu kali basis
matriks sebagai berikut:
B:=[2,[{0,1},{0,1},{0},{0},{1},{1},{}]];
M:=UbahMtxCRB; r:=M[2]; d:=5: k:=B[1];
W:=NonZeroWtB; t:=mind-1,k;
L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L:
nopsH;
H2:=Kolek2VekMd,H,L,1000:
nopsH2; Q:=ReduEkiXcH2,M:
nopsQ; T:=mapX-AddVekMXX,M,Q:
Code547:=mapX-UbahMtxRCX,T: C4PX:=Code547[11];
NonZeroWtC4PX; save Code547, D:\\Coding Theory\\CdD5k4r7.m;
Konstruksi Kode Optimal Kuat [17,9,5]
,
dengan menggunakan satu kali basis matriks sebagai berikut:
B:=[C4PX[1],[opC4PX[2],{}]];
M:=UbahMtxCRB;
r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB;
t:=mind-1,k; L:=ListKombMM,t:
H:=Kolek1VekMd,r,r,L: nopsH;
H2:=Kolek2VekMd,H,L,1000: nopsH2;
Q:=ReduEkiXH2,M: nopsQ;
H3:=Kolek3VekMd,H2,L,10000: nopsH3;
Q:=ReduEkiXH3,M: nopsQ;
H4:=Kolek4VekMd,Q,L,10000: nopsH4;
Q:=ReduEkiXH4,M: nopsQ;
H5:=KolekXVekM5,d,Q,L,10000: nopsH5;
Q:=ReduEkiXH5,M: nopsQ;
T:=mapX-AddVekMXX,M,Q: Code598:=mapX-UbahMtxRCX,T:
C9PX:=Code598[1];
NonZeroWtC9PX; save Code598, D:\\ Coding Theory\\CdD5k9r8.m;
Konstruksi Kode Optimal Kuat [23,14,5] , dengan menggunakan satu kali basis
matriks sebagai berikut:
B
:=[C9PX[1],[opC9PX[2],{}]];
M:=UbahMtxCRB;
r:=M[2]; d:=5: k:=B[1]; W:=NonZeroWtB;
t:=mind-1,k; L:=ListKombMM,t:
H:=Kolek1VekMd,r,r,L: nopsH;
H2:=Kolek2VekMd,H,L,5000: nopsH2;
Q:=ReduEkiXH2,M: nopsQ;
H3:=Kolek3VekMd,H2,L,5000: nopsH3;
Q:=ReduEkiXH3,M: nopsQ;
H4:=Kolek4VekMd,Q,L,5000: nopsH4;
Q:=ReduEkiXH4,M: nopsQ;
H5:=KolekXVekM5,d,Q,L,1: nopsH5;
Tidak berhasil menjangkau [23,14,5], hanya diperoleh [22,13,5]
.
T:=mapX-AddVekMXX,M,Q: Code13:=mapX-UbahMtxRCX,T:
C13PX:=Code13[800];
NonZeroWtC13PX; i:=1:
B1:=DelVekMi,C13PX: j:=3:
B:=DelVekMj,B1: M:=UbahMtxCRB;
r:=M[2]; d:=5: k:=B[1]; t:=mind-1,k;
L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L:
nopsH;
H2:=Kolek2VekMd,H,L,5000: nopsH2;
Q:=ReduEkiXH2,M: nopsQ;
H3:=Kolek3VekMd,H2,L,5000: nopsH3;
Q:=ReduEkiXH3,M: nopsQ;
Diperoleh kode Optimal kuat [23,14,5].
T:=mapX-AddVekMXX,M,Q: Code14:=mapX-UbahMtxRCX,T:
C14P1:=Code14[1];
NonZeroWtC14P1; save Code5149, D:\\ Coding Theory\\CdD5k14r9.m;
Konstruksi Kode Optimal Dimensi 14
, dengan menggunakan satu kali basis
matriks sebagai berikut:
B:=[C14P2[1],[opC14P2[2],{}]];
M:=UbahMtxCRB;
r:=M[2]; d:=5: k:=B[1]; t:=mind-1,k;
L:=ListKombMM,t: H:=Kolek1VekMd,r,r,L:
nopsH;
Q:=ReduEki1H,M: nopsQ;
H2:=Kolek2VekMd,Q,L,20000: nopsH2;
Q:=ReduEkiXH2,M: nopsQ;
H3:=Kolek3VekMd,H2,L,100000: nopsH3;
Q:=ReduEkiXH3,M: nopsQ;
H4:=Kolek4VekMd,H3,L,150000: nopsH4;
Q:=ReduEkiXH4,M: nopsQ;
H5:=KolekXVekM5,d,Q,L,50000: