46
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:={}:
47 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:
48 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(i+1) and k{} 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:
49 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(i+1) and k{} 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:
50 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:={}:
51 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):
52 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:
53
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
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. Kolek1VekM:=proc(d::posint,t::posint,r::posint,L::list)
54 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 vektorvektor 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
55
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
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):
56 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 vektorvektor 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):
57 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
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
58 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):
59 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):
60 b:=d-4-i: for j from 1 to g do t:=HmDist(U,G[j]): if t
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):
61 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]:
62 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
63 t:=HmDist(U,G[j]): if t
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:
64 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]: save F, "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp5.m";
65 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
66 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
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
67 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]: Z:=X union Y:
68 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}]];
69 > 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): > Code13522:=map(X->UbahMtxRC(X),T):
70 > 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); > read "D:\\Explor Files\\Coding Theory\\DataOutD13\\DatTemp3.m";
71 > 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";
72
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]; > NonZeroWt(C6P1);
73 > #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,[]]: > H3:=Kolek3VekMDt(d,H2,L,2000,G):
74 > 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); > #heory\\DataOutD15\\CdD15k9r28.m";
45 Lampiran A. Cuplikan tabel Brouwer yang berkaitan dengan kode untuk d = 13 dan d = 15 n/k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
19
19
12
10
9
8
8
8
7
6
5
4
4
4
3
20
20
13
11
10
9
8
8
8
7
6
5
4
4
4
21
21
14
12
10
10
8
8
8
8
7
6
5
4
4
22
22
14
12
11
10
9
8
8
8
8
7
6
5
4
23
23
15
12
12
11
10
9
8
8
8
8
7
6
5
24
24
16
13
12
12
10
10
8
8
8
8
8
6
6
25
25
16
14
12
12
11
10
9
8
8
8
8
6
6
26
26
17
14
13
12
12
11
10
9
8
8
8
7
6
27
27
18
15
14
13
12
12
10
10
9
8
8
8
7
28
28
18
16
14
14
12
12
11
10
10
8
8
8
8
29
29
19
16
15
14
13
12
12
11
10
9
8
8
8
30
30
20
16
16
15
14
12
12
12
11
10
9
8
8
n/k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
31
31
20
17
16
16
15
13
12
12
12
11
10
9
8
32
32
21
18
16
16
16
14
13
12
12
12
10
10
8-9
33
33
22
18
16
16
16
14
14
12
12
12
11
10
9-10
34
34
22
19
17
16
16
15
14
13
12
12
12
10
10
35
35
23
20
18
16
16
16
15
14
12-13
12
12
11
10
36
36
24
20
18
17
16
16
16
14
13-14
12-13
12
12
11
37
37
24
20
19
18
17
16
16
15
14
13-14
12-13
12
12
38
38
25
21
20
18
18
16
16
16
14
14
13-14
12
12
39
39
26
22
20
19
18
17
16
16
15
14
14
12-13
12
40
40
26
22
20
20
18
18
16
16
16
15
14
13-14
12-13
41
41
27
23
21
20
19
18
17
16
16
16
14-15
14
12-14
42
42
28
24
22
20
20
19
18
17
16
16
15-16
14
13-14
43
43
28
24
22
21
20
20
18
18
16-17
16
16
15
14
44
44
29
24
23
22
21
20
19
18
17-18
16-17
16
16
15