B. Program Aritmetik Aljabar Matriks Biner Dengan Representasi
Himpunan.
1. AcakSet membangkitkan vektor dalam ruang dimensi n secara acak.
> AcakSet:=proc(m::posint)local AcIn::procedure, p::integer: AcIn:=rand(2^m):
p:=AcIn():
UbahDesKeSet(p); end proc:
2. AddV menjumlahkan dua vektor
> AddV:=proc(S::set,T::set)return({op(S minus T),op(T minus S)}); end proc:
3. MtxSetC mendefinisikan matriks kolom biner berordo mxn secara acak.
Dalam ini, m adalah ukuran vektor baris, dan n adalah banyaknya vektor kolom
dalam matriks.
> MtxSetC:=proc(m::integer,n::integer) local M::list, S::set, i,j::integer:
M:=[]: for i from 1 to n do S:=AcakSet(m): M:=[op(M),S]: end do: return([m,M]); end proc:
4. MtxSetC1 mendefinisikan matriks kolom biner berordo mxn secara acak.
Dalam ini m adalah panjang vektor dan n adalah banyaknya vektor kolom dalam
matriks. Tidak vektor kolom yang nol.
> MtxSetC1:=proc(m::integer,n::integer) local M::list, S::set, i,j::integer:
M:=[]: for i from 1 to n do S:=AcakSet(m): for j while S={} do S:=AcakSet(m): end do: M:=[op(M),S]: end do: return([m,M]); end proc:
5. UbahMtxCR mengubah tampilan matriks kolom ke matriks baris
berordo n x m.
> UbahMtxCR:=proc(A::list)
local M,N::list, S::set, i,j,m,n::integer: M:=op(2,A): n:=nops(M): m:=op(1,A): N:=[]:
for i from 0 to m-1 do S:={}:
for j from 1 to n do if i in M[j] then S:={op(S),j-1}: end if: end do: N:=[op(N),S] end do: return([N,n]); end proc: UbahMtxRC:=proc(A::list) local B,N::list: B:=[op(2,A),op(1,A)]: N:=UbahMtxCR(B); return([N[2],N[1]]); end proc:
6. TrpsC menentukan transpose matriks kolom berordo mxn menghasilkan
matriks kolom berordo n x m.
> TrpsC:=proc(A::list) local M,N::list, m::integer: M:=UbahMtxCR(A); m:=op(2,M): N:=op(1,M): return([m,N]);
end proc:
7. TukarR menukar baris ke-i dan ke-j dalam matriks kolom berordo m x n,
dimana
0 <= i, j <= m - 1.
> TukarR:=proc(i::integer,j::integer,A::list) local M::list, S,T::set, k,n::integer: M:=op(2,A): n:=nops(M): for k from 1 to n do S:=M[k] intersect {i,j}: if nops(S)=1 then T:=AddV(M[k],{i,j}): M:=subsop(k=T,M): end if: end do: return([op(1,A),M]); end proc:
8. GantiB mengganti baris ke-j dengan baris ke-i ditambah baris ke-j dalam
matriks kolom berordo mxn, dimana 0 <= i, j <= m - 1.
> GantiB:=proc(i::integer,j::integer,A::list) local M::list, S::set, k,n::integer:
M:=A: n:=nops(M): for k from 1 to n do if i in M[k] then S:=AddV(M[k],{j}): M:=subsop(k=S,M): end if: end do:
return(M); end proc:
9. KanonC menentukan bentuk kanonik matriks kolom berordo m x n, dimana
"m<= n."
> KanonC:=proc(A::list)
local M,N::list, S,T::set, i,j,m,n,u,v,w,k::integer: M:=op(2,A): n:=nops(M): m:=op(1,A): w:=m: v:=n: N:=[]:
for i from 0 while i<m do k:=i+1:
if i in M[k] then S:=M[i+1] minus {i}: for j in S do
M:=GantiB(i,j,M); end do:
else T:={}:
for j while T={} and k<n do T:=M[k+1] intersect {i}: k:=k+1:
end do:
if k>(i+1) and k<n then
M:=subsop(i+1=M[k],k=M[i+1],M): S:=M[i+1] minus {i}:
for j in S do M:=GantiB(i,j,M); end do:
elif k=n and T<>{} then
M:=subsop(i+1=M[k],k=M[i+1],M): S:=M[i+1] minus {i}:
for j in S do M:=GantiB(i,j,M); end do:
elif k=n and T={} then u:=max(op(M[i+1])): if u>i then
N:=TukarR(i,u,[w,M]); M:=op(2,N):
S:=M[i+1] minus {i}: for j in S do M:=GantiB(i,j,M); end do: else N:=TukarR(i,m,[w,M]); M:=op(2,N): m:=m-1: M:=subsop(i+1=M[v],v=M[i+1],M): v:=v-1: k:=i+1:
if i in M[i+1] then S:=M[i+1] minus {i}: for j in S do
M:=GantiB(i,j,M); end do:
else T:={}:
for j while T={} and k<n do T:=M[k+1] intersect {i}: k:=k+1:
end do:
if k>(i+1) and k<n then
M:=subsop(i+1=M[k],k=M[i+1],M): S:=M[i+1] minus {i}:
for j in S do M:=GantiB(i,j,M); end do:
elif k=n and T<>{} then
M:=subsop(i+1=M[k],k=M[i+1],M): S:=M[i+1] minus {i}:
for j in S do M:=GantiB(i,j,M); end do:
elif k=n and T={} then u:=max(op(M[i+1])): if u>i then
N:=TukarR(i,u,[w,M]); M:=op(2,N):
S:=M[i+1] minus {i}: for j in S do M:=GantiB(i,j,M); end do: else N:=TukarR(i,m,[w,M]); M:=op(2,N): m:=m-1: M:=subsop(i+1=M[v],v=M[i+1],M): v:=v-1: end if: end if: end if: end if: end if: end if: end do: return([w,M]); end proc:
10. AddMtx menjumlahkan dua matriks.
> AddMtx:=proc(M::list,N::list) local A,B,H::list, m,n::integer:A:=op(2,M): B:=op(2,N): m:=op(1,M): n:=nops(B): if m<>op(1,N) or nops(A)<>n then return(false) end if: H:=[seq(AddV(A[i],B[i]),i=1..n)]:
return([m,H]); end proc:
11. DotV menentukan produk titik dua vektor
> DotV:=proc(S::set,T::set)local C::integer:
C:=nops(S intersect T) mod 2; return(C);
end proc:
12. MultMtx mengalikan matriks kolom m x n dengan matriks
kolom "n x p."
> MultMtx:=proc(M::list,N::list)
local TA,A,B,H::list, S::set, m,n,i,j,k,p::integer: A:=op(2,M): B:=op(2,N):
m:=op(1,M): n:=op(1,N): p:=nops(B): if n<>nops(A) then return(false) end if: TA:=(op(2,TrpsC(M))): H:=[]: for i from 1 to p do S:={}: for j from 1 to m do k:=DotV(TA[j],B[i]): if k=1 then S:={op(S),j-1}: end if: end do: H:=[op(H),S] end do: return([m,H]); end proc:
13. InkodG mengkoding vektor pesan P menjadi vektor katakode C
menggunakan matriks generator umum G berordo k x n.
> InkodG:=proc(P::set,G::list) local A,B,C::list, H::set, k,p::integer: k:=op(1,G): A:=TrpsC([k,[P]]): B:=MultMtx(A,G): C:=TrpsC(B): H:=op(C[2]): return(H); end proc:
14. ParG menentukan vektor paritas X dari vektor pesan P menggunakan matriks
generator bentuk standar " G=[ |B]," dalam hal ini P dan B menjadi input, dan
X adalah output. Vektor C = (P|X) adalah katakode dari pesan P.
> ParG:=proc(P::set,B::list) local S::set, r,i,s::integer: r:= nops(B): S:={}:
for i from 1 to r do s:=DotV(P,B[i]): if s=1 then S:={op(S),i-1}: end if: end do: return(S); end proc:
15. InkodS mengkoding vektor pesan P menjadi vektor katakode C
menggunakan matriks generator bentuk standar " G=[ |B]," dalam hal ini P
dan B menjadi input InkodS:=proc(P::set,B::list,k::posint)
> local S::set, r,i,s::integer: r:= nops(B): S:=P: for i from 1 to r do s:=DotV(P,B[i]): if s=1 then S:={op(S),k+i-1}: end if: end do: return(S); end proc:
16. HmDist menentukan jarak Hamming dua vektor
> HmDist:=proc(S::set,T::set)local C::set: C:=AddV(S,T); return(nops(C)); end proc:
17. NonZeroWt menentukan bobot tak-nol dari suatu kode yang
direpresentasikan oleh matriks generator G.
> NonZeroWt:=proc(B::list) local Wt,C,P::set, i,r,m,k::integer: k:=B[1]: m:=2^k-1: Wt:={}: for i from 1 to m do P:=UbahDesKeSet(i); C:=InkodS(P,B[2],k); r:=nops(C): Wt:={op(Wt),r}: end do: return(Wt); end proc:
C. Program Pelacakan Kode Optimal Kuat.
18. KombinM menentukan list semua kombinasi j vektor dari vektor-vektor M
(representasi baris) untuk suatu nilai "j=1,2,...,k."
> KombinM:=proc(j::posint,M::list) local S,C,L,K,N::set, W::list, i,k::integer: K:= M[1]: k:=nops(K):
L:={seq(i,i=1..k)}: N:=combinat[choose](L,j): W:=[]: for S in N do C:={}: for i in S do C:=AddV(C,K[i]): end do: W:=[op(W),C]: end do: return(W); end proc:
19. AddVekM menambah satu baris vektor V ke matriks M (representasi baris)
di posisi terakhir.
> AddVekM:=proc(V::set,M::list) local S::list, r::integer:
S:=[op(M[1]),V]: r:=max(max(V),M[2]); return([S,r]);
end proc:
> AddVekMX:=proc(H::set,M::list) local S::list, V::set:
S:=M: for V in H do S:=AddVekM(V,S): end do: return(S); end proc:
20. DelVekM menghapus baris ke-i pada matriks M (representasi kolom)
. > DelVekM:=proc(i::posint,A::list)local M,T,N,B::list, m,n::integer: M:=op(2,A): n:=nops(M): m:=op(1,A): T:=TrpsC(A):
N:=subsop(i=NULL,T[2]): B:=TrpsC([n,N]):
return(B); end proc:
21. ListKombM menentukan list dari semua list KombinM untuk semua
j = 1, 2, 3,. .. , t dengan t = min {k, d - 1}
> ListKombM:=proc(M::list,t::posint) local L,T::list, j::integer:
L:=[]: for j from 1 to t do T:=KombinM(j,M); L:=[op(L),T]: end do: return(L); end proc:
22. UjiAdd1VekM menguji apakah vektor X bisa ditambahkan ke M
menggunakan output ListKombM.
> UjiAdd1VekM:=proc(d::posint,X::set,L::list) local K,T,H::list, i,j,b,n,h,k::integer:
T:=subsop(1=NULL,L[1]): H:=subsop(1=T,L): h:=nops(H): for i from 1 to h do K:=H[i]: k:=nops(K): b:=d-1-i: for j from 1 to k do n:=HmDist(X,K[j]): if n<b then return(false); end if: end do: end do: return(true); end proc:
23. Lacak1VekM melacak satu vektor baris X dalam yang bisa ditambahkan ke
M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan
UjiAdd1VekM.
> Lacak1VekM:=proc(d::posint,t::posint,r::posint,L::list) local S,R,X,Y,Z,V,W::set, B::list, i,j,k,v,x::integer, T::symbol: B:=L[1]: V:=B[1]: v:=nops(V): W:={seq(i,i=0..r-1)} minus V: for j from d-2 to t do for i from 0 to v do if (v+j-2*i)>=(d-1) then S:=combinat[choose](V,v-i): R:=combinat[choose](W,j-i): for Y in S do for Z in R do X:={op(Y),op(Z)}: T:=UjiAdd1VekM(d,X,L); if T=true then return(X); end if: end do: end do: end if: end do: end do: return(0); end proc:
>Kolek1VekM menentukan himpunan semua vektor baris X dalam yang bisa ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini menggunakan UjiAdd1VekM.
local S,R,C,X,Y,Z,V,W::set, B::list, i,j,k,v,x::integer, T::symbol: B:=L[1]: V:=B[1]: v:=nops(V): C:=[]: W:={seq(i,i=0..r-1)} minus V: for j from d-2 to t do for i from 0 to v do if (v+j-2*i)>=(d-1) then S:=combinat[choose](V,v-i): R:=combinat[choose](W,j-i): for Y in S do for Z in R do X:={op(Y),op(Z)}: T:=UjiAdd1VekM(d,X,L); if T=true then C:=[op(C),X]: end if: end do: end do: end if: end do: end do: return(C); end proc:
24. ReduEki1 membuang anggota output Kolek1VekM dan menyisakan
vektor-vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika ditambahkan
ke M,
>ReduEki1:=proc(H::list,M::list)
local i,h::integer, A,L,G,K,R::list, Q,S::set: h:=nops(H): A:=H[1]: G:=AddVekM(A,M): K:=UbahMtxRC(G): L:=sort(map(S->UbahSetKeDes(S),K[2])): R:=[A]: Q:={L}: for i from 2 to h do A:=H[i]: G:=AddVekM(A,M): K:=UbahMtxRC(G): L:=sort(map(S->UbahSetKeDes(S),K[2])): S:={L} intersect Q: if S={} then Q:={op(Q),L}: R:=[op(R),A]: end if: end do: return(R): end proc:
25. 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:=proc(d::posint,Z::set,L::list) local H,G::list, i,j,g,b,k,n,t::integer:
if nops(Z)<(d-2) then return(false) end if; H:=L: k:=nops(L[1]): n:=min(d-3,k): for i from 1 to n do G:=H[i]: g:=nops(G): b:=d-2-i: for j from 1 to g do t:=HmDist(Z,G[j]): if t<b then return(false); end if: end do: end do: return(true); end proc:
26. Kolek2VekM menentukan himpunan semua pasang (X,Y) dalam yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini
menggunakan UjiAdd2VekM
.> Kolek2VekM:=proc(d::posint,H::list,L::list,c::posint) local X,Y,Z::set, C::list, h,i,j::integer, T::symbol: h:=nops(H): C:=[]:
for i from 1 to (h-1) do X:=H[i]:
for j from (i+1) to h do Y:=H[j]: Z:=AddV(X,Y): T:=UjiAdd2VekM(d,Z,L): if T=true then C:=[op(C),{X,Y}]: if nops(C)=c then C:=[op({op(C)})]: return(C); end if: end if: end do: end do: C:=[op({op(C)})]: return(C): end proc:
27. Kolek2VekMDt menentukan himpunan semua pasang (X,Y) menggunakan
data hasil sebelumnya.
> Kolek2VekMDt:=proc(d::posint,H::list,L::list,c::posint,Dat::list) local X,Y,Z::set, h,i,j,k::integer, F,C::list, T::symbol:
C:=Dat[2]: k:=Dat[1]: h:=nops(H):
for i from k to (h-1) do X:=H[i]:
for j from (i+1) to h do Y:=H[j]: Z:=AddV(X,Y): T:=UjiAdd2VekM(d,Z,L): if T=true then C:=[op(C),{X,Y}]: if nops(C)=c then C:=[op({op(C)})]: F:=[i,C]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp2.m"; return(C); end if: end if: end do: end do: F:=[op({op(C)})]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp2.m"; return(F):
end proc:
28. ReduEkiX membuang anggota output Kolek2VekM dan menyisakan
vektor-vektor yang menghasilkan matriks-matriks tidak saling ekivalen jika
ditambahkan ke M,
> ReduEkiX:=proc(H::list,M::list)
local i,h::integer, A,L,G,K,R::list, Q,S::set: h:=nops(H): A:=H[1]: G:=AddVekMX(A,M): K:=UbahMtxRC(G): L:=sort(map(S->UbahSetKeDes(S),K[2])): R:=[A]: Q:={L}: for i from 2 to h do A:=H[i]: G:=AddVekMX(A,M): K:=UbahMtxRC(G): L:=sort(map(S->UbahSetKeDes(S),K[2])): S:={L} intersect Q: if S={} then Q:={op(Q),L}: R:=[op(R),A]: end if: end do: return(R): end proc: ReduEkiXc:=proc(H::list,M::list) local r,k,t::integer, A,L,G,K,R,Q,J::list: r:=M[2]: k:=nops(M[1]): t:=nops(H[1]): G:=map(X->AddVekMX(X,M),H):
K:=map(X->UbahMtxRC(X),G): J:=map(X->map(S->UbahSetKeDes(S),X[2]),K): L:=map(X->sort(X),J): R:=[op({op(L)})]: Q:=map(X->[k+t,map(n->UbahDesKeSet(n),X)],R): return(Q): end proc:
29. 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:=proc(d::posint,U::set,L::list) local H,G::list, i,j,g,b,k,n,t::integer:
if nops(U)<(d-3) then return(false) end if; H:=L: k:=nops(L[1]): n:=min(d-4,k): for i from 1 to n do G:=H[i]: g:=nops(G): b:=d-3-i: for j from 1 to g do t:=HmDist(U,G[j]): if t<b then return(false); end if: end do: end do: return(true); end proc:
30. Kolek3VekM menentukan himpunan semua pasang (X,Y,Z) dalam yang
bisa ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini
menggunakan UjiAdd3VekM.
> Kolek3VekM:=proc(d::posint,H::list,L::list,c::posint) local X,Y,Z,U,V,W,S,R::set, h,i,j::integer, T::symbol, C::list: h:=nops(H): 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 nops(Z)=3 then S:=X intersect Y: V:=Z minus S: U:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,U,L): if T=true then R:=op(S): W:=AddV(U,R): T:=UjiAdd3VekM(d,W,L): if T=true then
C:=[op(C),{op(V),R}]: if nops(C)=c then C:=[op({op(C)})]: return(C); end if: end if: end if: end if: end do: end do: C:=[op({op(C)})]: return(C): end proc:
31. Kolek3VekMDt menentukan himpunan semua pasang (X,Y,Z)
menggunakan data hasil sebelumnya.
> Kolek3VekMDt:=proc(d::posint,H::list,L::list,c::posint,Dat::list) local X,Y,Z,U,V,W,S,R::set, h,i,j,k::integer, T::symbol, C,F::list: C:=Dat[2]: k:=Dat[1]:
h:=nops(H):
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 nops(Z)=3 then S:=X intersect Y: V:=Z minus S: U:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,U,L): if T=true then R:=op(S): W:=AddV(U,R): T:=UjiAdd3VekM(d,W,L): if T=true then C:=[op(C),{op(V),R}]: if nops(C)=c then C:=[op({op(C)})]: F:=[i,C]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp3.m"; return(C); end if: end if: end if: end if: end do: end do: F:=[op({op(C)})]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp3.m"; return(F):
end proc:
Kolek3VekMDtX:=proc(d::posint,H::list,L::list,c::posint,Dat::list) local X,Y,Z,U,V,W,S,R,C,K::set, h,i,j,k::integer, T::symbol, F::list: C:={op(Dat[2])}: k:=Dat[1]:
h:=nops(H):
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 nops(Z)=3 then K:={Z} intersect C: if K={} then S:=X intersect Y: V:=Z minus S: U:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,U,L): if T=true then R:=op(S): W:=AddV(U,R): T:=UjiAdd3VekM(d,W,L): if T=true then C:=C union {Z}: if nops(C)=c then F:=[i,[op(C)]]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp3.m"; return([op(C)]); end if: end if: end if: end if: end if: end do: end do: F:=[op(C)]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp3.m"; return(F):
end proc:
32. 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:=proc(d::posint,U::set,L::list) local H,G::list, i,j,g,b,k,n,t::integer:
if nops(U)<(d-4) then return(false) end if; H:=L: k:=nops(L[1]):
n:=min(d-5,k): for i from 1 to n do G:=H[i]: g:=nops(G):
b:=d-4-i: for j from 1 to g do t:=HmDist(U,G[j]): if t<b then return(false); end if: end do: end do: return(true); end proc:
33. Kolek4VekM menentukan himpunan semua pasang (X,Y,Z,W) dalam yang
bisa ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini
menggunakan UjiAdd4VekM.
> Kolek4VekM:=proc(d::posint,H::list,L::list,c::posint)
local X,Y,Z,U,U1,U2,V,W,S,A::set, h,i,j::integer, T,T1,T2::symbol, C::list: h:=nops(H): 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 nops(Z)=4 then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): if T1=true and T2=true then W:=AddV(op(2,S),U1): T:=UjiAdd4VekM(d,W,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: return(C): end if: end if: end if: end if: end if: end do: end do: C:=[op({op(C)})]: return(C):
end proc:
34. Kolek4VekMDt menentukan himpunan semua pasang (X,Y,Z,U)
menggunakan data hasil sebelumnya.
> Kolek4VekMDt:=proc(d::posint,H::list,L::list,c::posint,Dat::list)
local X,Y,Z,U,U1,U2,V,W,S,A::set, h,i,j,k::integer, T,T1,T2::symbol, C,F::list: C:=Dat[2]: k:=Dat[1]:
h:=nops(H):
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 nops(Z)=4 then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): if T1=true and T2=true then W:=AddV(op(2,S),U1): T:=UjiAdd4VekM(d,W,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: F:=[i,C]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp4.m"; return(C); end if: end if: end if: end if: end if: end do: end do: F:=[op({op(C)})]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp4.m"; return(F):
end proc:
> Kolek4VekMDtX:=proc(d::posint,H::list,L::list,c::posint,Dat::list)
local X,Y,Z,U,U1,U2,V,W,S,A,C,K::set, h,i,j,k::integer, T,T1,T2::symbol, F::list: C:={op(Dat[2])}: k:=Dat[1]:
h:=nops(H):
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 nops(Z)=4 then K:={Z} intersect C: if K={} then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): if T1=true and T2=true then W:=AddV(op(2,S),U1): T:=UjiAdd4VekM(d,W,L): if T=true then C:=C union {Z}: if nops(C)=c then F:=[i,[op(C)]]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp4.m"; return([op(C)]); end if: end if: end if: end if: end if: end if: end do: end do: F:=[op(C)]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp4.m"; return(F):
end proc:
35. 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:=proc(d::posint,U::set,L::list) local H,G::list, i,j,g,b,k,n,t::integer:
if nops(U)<(d-5) then return(false) end if; H:=L: k:=nops(L[1]): n:=min(d-6,k): for i from 1 to n do G:=H[i]: g:=nops(G): b:=d-5-i: for j from 1 to g do
t:=HmDist(U,G[j]): if t<b then return(false); end if: end do: end do: return(true); end proc:
36. Kolek5VekM menentukan himpunan semua pasang (X,Y,Z,V,W) dalam
yang bisa ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur
ini menggunakan UjiAdd5VekM.
> Kolek5VekM:=proc(d::posint,H::list,L::list,c::posint)
local X,Y,Z,U,U1,U2,U3,V,W1,W2,W3,R,S,A::set, h,i,j::integer, T,T1,T2,T3::symbol, C::list:
h:=nops(H): 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 nops(Z)=5 then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): U3:=AddV(op(3,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): T3:=UjiAdd3VekM(d,U3,L):
if T1=true and T2=true and T3=true then W1:=AddV(op(2,S),U1): W2:=AddV(op(3,S),U1): W3:=AddV(op(3,S),U2): T1:=UjiAdd4VekM(d,W1,L): T2:=UjiAdd4VekM(d,W2,L): T3:=UjiAdd4VekM(d,W3,L):
if T1=true and T2=true and T3=true then R:=AddV(op(3,S),W1): T:=UjiAdd5VekM(d,R,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: return(C): end if: end if:
end if: end if: end if: end if: end do: end do: C:=[op({op(C)})]: return(C): end proc:
37. Kolek5VekMDt menentukan himpunan semua pasang (X,Y,Z,U,W)
menggunakan data hasil sebelumnya
.> Kolek5VekMDt:=proc(d::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:=nops(H):
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 nops(Z)=5 then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): U3:=AddV(op(3,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): T3:=UjiAdd3VekM(d,U3,L):
if T1=true and T2=true and T3=true then W1:=AddV(op(2,S),U1): W2:=AddV(op(3,S),U1): W3:=AddV(op(3,S),U2): T1:=UjiAdd4VekM(d,W1,L): T2:=UjiAdd4VekM(d,W2,L): T3:=UjiAdd4VekM(d,W3,L):
if T1=true and T2=true and T3=true then R:=AddV(op(3,S),W1): T:=UjiAdd5VekM(d,R,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: F:=[i,C]:
return(C); end if: end if: end if: end if: end if: end if: end do: end do: F:=[op({op(C)})]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp5.m"; return(F):
end proc:
> Kolek5VekMDtX:=proc(d::posint,H::list,L::list,c::posint,Dat::list) 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:={op(Dat[2])}: k:=Dat[1]: h:=nops(H):
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 nops(Z)=5 then K:={Z} intersect C: if K={} then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,A,L): if T=true then U1:=AddV(op(1,S),A): U2:=AddV(op(2,S),A): U3:=AddV(op(3,S),A): T1:=UjiAdd3VekM(d,U1,L): T2:=UjiAdd3VekM(d,U2,L): T3:=UjiAdd3VekM(d,U3,L):
if T1=true and T2=true and T3=true then W1:=AddV(op(2,S),U1): W2:=AddV(op(3,S),U1): W3:=AddV(op(3,S),U2): T1:=UjiAdd4VekM(d,W1,L): T2:=UjiAdd4VekM(d,W2,L): T3:=UjiAdd4VekM(d,W3,L):
if T1=true and T2=true and T3=true then R:=AddV(op(3,S),W1):
T:=UjiAdd5VekM(d,R,L): if T=true then
C:=C union {Z}: if nops(C)=c then
F:=[i,[op(C)]]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp5.m"; return([op(C)]); end if: end if: end if: end if: end if: end if: end if: end do: end do: F:=[op(C)]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp5.m"; return(F):
end proc:
38. Misalkan himpunan H adalah output Kolek(X-1)VekM, 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:=proc(x::posint,d::posint,U::set,L::list) local H,G::list, i,j,g,b,k,n,t::integer:
if nops(U)<(d-x) then return(false) end if; H:=L: k:=nops(L[1]): n:=min(d-x-1,k): for i from 1 to n do G:=H[i]: g:=nops(G): b:=d-x-i: for j from 1 to g do t:=HmDist(U,G[j]): if t<b then return(false); end if: end do: end do: return(true); end proc:
39. KolekXVekM menentukan himpunan semua X vektor yang bisa
ditambahkan ke M berdasarkan teorema Gilbert-Vashamov. Prosedur ini
menggunakan UjiAddXVekM.
> KolekXVekM:=proc(x::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:=nops(H): 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 nops(Z)=x then
S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,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:=AddV(B,K): end do: T1:=UjiAddXVekM(2+k,d,B,L): end do: if T1=false then break; end if: end do: if T1=true then W:=op(S minus R): Q:=AddV(B,W): T:=UjiAddXVekM(x,d,Q,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: return(C): end if: end if: end if: end if: end if: end do: end do: C:=[op({op(C)})]: return(C): end proc:
40. KolekXVekMDt menentukan himpunan semua pasang (X,Y,Z,U,W)
menggunakan data hasil sebelumnya.
> KolekXVekMDt:=proc(x::posint,d::posint,H::list,L::list,c::posint,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:=nops(H):
for i from t to (h-1) do X:=H[i]:
for j from (i+1) to h do Y:=H[j]:
if nops(Z)=x then S:=X intersect Y: V:=Z minus S: A:=AddV(op(1,V),op(2,V)): T:=UjiAdd2VekM(d,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:=AddV(B,K): end do: T1:=UjiAddXVekM(2+k,d,B,L): end do: if T1=false then break; end if: end do: if T1=true then W:=op(S minus R): Q:=AddV(B,W): T:=UjiAddXVekM(x,d,Q,L): if T=true then C:=[op(C),{op(Z)}]: if nops(C)=c then C:=[op({op(C)})]: F:=[i,C]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp6.m"; return(C): end if: end if: end if: end if: end if: end do: end do: F:=[op({op(C)})]:
save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp6.m"; return(F):
end proc:
D. Konstruksi Kode Optimal Kuat.
41. Konstruksi Kode Optimal Kuat [20,2,13], dengan menggunakan satu kali
basis matriks sebagai berikut:
> B:=[2,[{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0},{0},{0},{0},{0},{0},{1},{1},{1}, {1},{1},{1}]];
> M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > W:=NonZeroWt(B); > Code13218:=B;
> #save Code13218, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k2r18.m";
42. Konstruksi Kode Optimal Kuat [24,3,13], dengan menggunakan kode
[20, 2,13] sebagai dasar adalah sebagai berikut:
> B:=[2,[{0,1},{0,1},{0,1},{0,1},{0,1},{0,1},{0}, {0},{0},{0},{0},{0},{1},{1},{1},{1},{1},{1}, {},{},{}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > Q:=ReduEki1(H,M): > nops(Q);
Akhirnya, diperoleh 8 kode Optimal kuat [24,3,13] tidak saling ekivalen.
> T:=map(X->AddVekM(X,M),Q):> Code13321:=map(X->UbahMtxRC(X),T): > C3PX:=Code13321[3];
> NonZeroWt(C3PX);
> #save Code13321, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k3r21.m";
43. Konstruksi Kode Optimal Kuat [27,5,13], dengan menggunakan kode
[24, 3, 13] sebagai matriks dasar adalah sebagai berikut:
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k3r21.m"; > C3PX:=Code13321[3]; > B:=[C3PX[1],[op(C3PX[2]),{}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > G:=[1,[]]: > H2:=Kolek2VekMDt(d,H,L,40000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
> Q:=ReduEkiX(H2,M): > nops(Q);
Akhirnya, paling tidak ada 4 kode Optimal kuat [27,5,13] tidak saling ekivalen.
> T:=map(X->AddVekMX(X,M),Q):> C5PX:=Code13522[1]; > NonZeroWt(C5PX);
> #save Code13522, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k5r22.m";
44. Konstruksi Kode Optimal Kuat [29,6,13], dengan menggunakan kode
[27, 5, 13] sebagai matriks dasar adalah sebagai berikut:
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k5r22.m"; > C5PX:=Code13522[1]; > B:=[C5PX[1],[op(C5PX[2]),{}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
Akhirnya, paling tidak ada 1 kode optimal kuat [29,6,13] tidak saling ekivalen.
> T:=map(X->AddVekM(X,M),H):> Code13623:=map(X->UbahMtxRC(X),T): > C6PX:=Code13623[1];
> NonZeroWt(C6PX);
> #save Code13623, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k6r23.m";
45. Konstruksi Kode Optimal Kuat [32,8,13],
dengan menggunakan kode
[29, 6, 13] sebagai matriks dasar adalah sebagai berikut:
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k6r23.m"; > C6PX:=Code13623[1]: > B1:=[C6PX[1],[op(C6PX[2]),{}]]; > i:=1: > B:=DelVekM(i,B1); > M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,d,r,L): > nops(H); > DtR24H:=H:
> #save DtR24H, "D:\\Explor Files\\Coding Theory\\DataOutD11\\DtR24H.m"; > read "D:\\Explor Files\\Coding Theory\\DataOutD11\\DtR24H.m";
> H:=DtR24H: > G:=[1,[]]:
> H2:=Kolek2VekMDt(d,H,L,1000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
> G:=[1,[]]:
> H3:=Kolek3VekMDtX(d,H2,L,1000,G): > nops(H3);
> G:=F: G[1]; nops(G[2]); > Q:=ReduEkiX(H3,M): > nops(Q);
Akhirnya, paling tidak ada 192 kode optimal kuat [32,8,13] yang tidak saling
ekivalen.
> T:=map(X->AddVekMX(X,M),Q):
> Code13824:=map(X->UbahMtxRC(X),T): > C8PX:=Code13824[1];
> NonZeroWt(C8PX);
> #save Code13824, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k8r24.m";
46. Dilanjutkan, Mengkonstruksi kode {34, 9, 13] dengan menggunakan kode
[32, 8, 13] sebagai matriks dasar.
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k8r24.m"; > C8PX:=Code13824[1]; > B1:=[C8PX[1],[op(C8PX[2]),{}]]; > NonZeroWt(B1); > i:=1: > B:=DelVekM(i,B1); > M:=UbahMtxCR(B); > r:=M[2]; d:=13: k:=B[1]; > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,d,r,L): > nops(H); > G:=[1,[]]: > H2:=Kolek2VekMDt(d,H,L,1000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
Akhirnya, diperoleh 2 kode optimal [34,9,13]
> T:=map(X->AddVekMX(X,M),H2): > Code13925:=map(X->UbahMtxRC(X),T): > C9PX:=Code13925[1];> NonZeroWt(C9PX);
> #save Code13925, "D:\\Explor Files\\Coding Theory\\DataOutD13\\CdD13k9r25.m";
47. Konstruksi Kode Optimal Kuat [23,2,15]
,dengan menggunakan satu kali
basis matriks sebagai berikut:
> B:=[2,[{0,1},{0,1},{0,1},{0,1},{0,1},{0,1}, {0,1},{0},{0},{0},{0},{0},{0},{0},{1},{1}, {1}, {1},{1}, {1},{1}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > W:=NonZeroWt(B); > Code15221:=B;
> #save Code15221, "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k2r21.m";
48. Konstruksi Kode Optimal Kuat [27,3,15],
dengan menggunakan kode
[23, 2, 15] sebagai matriks dasar gagal. Sehingga dikonstruksi matriks B dasar
yang baru sebagai berikut:
> B:=[3,[{0,1},{0,2},{1,2},{0,1},{0,2},{1,2}, {0,1},{0,2},{1,2},{0,1},{0,2},{1,2},{0,1,2}, {0},{1},{2},{0,1,2},{0},{1},{2},{0,1,2}, {0},{1},{2}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > W:=NonZeroWt(B); > Code15324:=B;
> #save Code15324, "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k3r24.m";
49. Konstruksi Kode Optimal Kuat [31,6,15],
dengan menggunakan kode [27, 3, 15] sebagai matriks dasar adalah sebagai berikut:> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k3r24.m"; > C3PX:=Code15324; > B:=[C3PX[1],[op(C3PX[2]),{}]]; > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > G:=[0,[]]: > H:=Kolek1VekMDt(d,r,L,50000,G): > nops(H);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp1.m"; > G:=F: G[1]; nops(G[2]); > H:=F: nops(H); > H:=[op(30000..34992,H)]: > G:=[1,[]]: > H2:=Kolek2VekMDt(d,H,L,200000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]); > Q:=ReduEkiX(H2,M): > nops(Q); > H2:=G[2]: nops(H2); > G:=[1,[]]: > H3:=Kolek3VekMDt(d,H2,L,100,G): > nops(H3);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp3.m"; > G:=F: G[1]; nops(G[2]);
> R:=[op(1..10,H3)]: > Q:=ReduEki1(R,M): > nops(Q);
Akhirnya, diperoleh 1 kode Optimal kuat [30,5,15].
> T:=map(X->AddVekMX(X,M),Q):> Code15525:=map(X->UbahMtxRC(X),T): > C6P1:=Code15525[1];
> #save Code15525, "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k5r25.m";
50. Konstruksi Kode Optimal Kuat [31,6,15],
dengan menggunakan kode [30, 5, 15] sebagai matriks dasar adalah sebagai berikut:> read "d:\\Bapak's Files\\Coding Theory\\DataOutD15\\CdD15k5r25.m"; > C5P1:=Code15525[1]; > B:=[C5P1[1],[op(C5P1[2]),{},{}]]; > NonZeroWt(B); > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > t:=min(d-1,k); > L:=ListKombM(M,t): > G:=[0,[]]: > H:=Kolek1VekMDt(d,r,L,10000,G): > nops(H);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp1.m"; > G:=F: G[1]; nops(G[2]);
> H:=F[2]: nops(H); > H:=[op(1..10,H)]:
Diperoleh 9309 kode Optimal optimal [31,6,15]. > T:=map(X->AddVekM(X,M),H):
> Code15625:=map(X->UbahMtxRC(X),T): > C6P1:=Code15625[1];
> NonZeroWt(C6P1);
> #save Code15625, "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k6r25.m";
51. Konstruksi Kode Optimal Kuat [35,8,15]
, dengan menggunakan kode [31, 6, 15] sebagai matriks dasar adalah sebagai berikut:> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k6r25.m"; > C6P1:=Code15625[1]; > i:=1: > B:=DelVekM(i,C6P1): > NonZeroWt(B); > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > t:=min(d-1,k); > L:=ListKombM(M,t): > G:=[0,[]]: > H:=Kolek1VekMDt(d,r,L,10000,G): > nops(H);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp1.m"; > G:=F: G[1]; nops(G[2]);
> H:=F: nops(H); > G:=[1,[]]:
> H2:=Kolek2VekMDt(d,H,L,20000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
> G:=[1,[]]:
> nops(H3);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp3.m"; > G:=F: G[1]; nops(G[2]);
> Q:=ReduEkiX(F[2],M): > nops(Q);
Akhirnya, diperoleh paling sedikitr 689 kode Optimal kuat [35,8,15].
> T:=map(X->AddVekMX(X,M),Q):> Code15827:=map(X->UbahMtxRC(X),T): > C6P1:=Code15827[1];
> NonZeroWt(C6P1);
> #save Code15827, "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k8r27.m";
52. Konstruksi Kode Optimal Kuat [37, 9, 15],
dengan menggunakan kode [35, 8, 15] sebagai matriks dasar adalah sebagai berikut:> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\CdD15k8r27.m"; > C8PX:=Code15827[1]; > B1:=[C8PX[1],[op(C8PX[2]),{}]]; > i:=8: > B:=DelVekM(i,B1): > NonZeroWt(B); > M:=UbahMtxCR(B); > r:=M[2]; d:=15: k:=B[1]; > t:=min(d-1,k); > L:=ListKombM(M,t): > G:=[0,[]]: > H:=Kolek1VekMDt(d,r,L,2500,G): > nops(H);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp1.m"; > G:=F: G[1]; nops(G[2]);
> H:=F[2]: nops(H); > G:=[1,[]]:
> H2:=Kolek2VekMDt(d,H,L,1000,G): > nops(H2);
> read "D:\\Explor Files\\Coding Theory\\DataOutD15\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]); > G:=[1,[]]: > H3:=Kolek3VekMDt(d,H2,L,1,G): > nops(H3); > Q:=ReduEkiX(H2,M): > nops(Q);
Diperoleh paling sedikitr 281 kode Optimal kuat [37,9,15].
> T:=map(X->AddVekMX(X,M),Q):> Code15928:=map(X->UbahMtxRC(X),T): > C9PX:=Code15928[1];
> NonZeroWt(C9PX);