35
Lampiran 1 Program Matriks Biner 1.1 Pendefinisian Prosedur yang Digunakan untuk konversi Representasi Data. 1.1.1 UbahBinKeDes ( Prosedur untuk mengubah vektor biner ke decimal dari order rendah ke order tinggi) UbahBinKeDes:=proc(N::list) local D1,D2::list, Des::integer; D1:=map(x->2^x,[seq(i,i=0..(nops(N)-1))]): D2:=[seq(N[j]*D1[j],j=1..nops(N))]: Des:=add(i,i=D2); end proc:
1.1.2
UbahDesKebin (Prosedur untuk mengubah integer decimal ke vektor biner dengan panjang m) UbahDesKeBin:=proc(B::integer,m::integer) local K,KVek,Kv::list, i::integer: K:=B mod 2^m; Kv:=convert(K,base,2): KVek:=[op(Kv),seq(0,i=(nops(Kv)+1)..m)]: end proc:
1.1.3
UbahbinKeSet (Prosedur untuk mengubah vektor biner ke set) UbahBinKeSet:=proc(Cr::list) local H::set, i,n::integer: n:=nops(Cr): H:={}: for i from 1 to n do if Cr[i]=1 then H:=H union {i-1}: end if: end do: return(H): end proc:
1.1.4
UbahDesKeSet ( mengubah intejer ke himpunan) UbahDesKeSet:=proc(n::integer) local X::list: X:=convert(n,base,2): UbahBinKeSet(X); end proc:
1.1.5
UbahSetKeDes (Prosedur mengubah set ke decimal) UbahSetKeDes:=proc(N::set) local D::set, Des::integer; D:=map(x->2^x,N):
36 Des:=add(i,i=D); end proc:
1.1.6
UbahSetKeBin ((Prosedur mengubah set ke biner) UbahSetKeBin:=proc(N::set) local C::list, i,m::integer; m:=op(nops(N),N)+1: C:=[seq(0,i=1..m)]: for i in N do C:=subsop((i+1)=1,C): end do: return(C); end proc:
1.1.7
UbahSetKeVek (prosedur mengubah set ke vektor) UbahSetKeVek:=proc(N::set,m::posint) local C::list, i::integer; C:=[seq(0,i=1..m)]: for i in N do C:=subsop((i+1)=1,C): end do: return(C); end proc:
1.2 Program Aljabar Matriks Biner dengan Representasi Himpunan 1.2.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:
1.2.2 AddV menjumlahkan dua vektor AddV:=proc(S::set,T::set) return({op(S minus T),op(T minus S)}); end proc:
1.2.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)
37 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: 1.2.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 ada 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:
1.2.5 Ubah MtxCR (mengubah tampilan matriks kolom ke matriks baris berordo n ) 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)]:
38 N:=UbahMtxCR(B); return([N[2],N[1]]); end proc:
1.2.6 TrpsC (menentukan transpose matriks kolom berordo m matriks kolom berordo n )
menghasilkan
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:
1.2.7 TukarR (menukar baris ke-i dan ke-j dalam matriks kolom berordo m dimana 0 , 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:
1.2.8
GantiB mengganti baris ke-j dengan baris ke-i ditambah baris ke-j dalam matriks kolom berordo mxn, dimana 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:
39
1.2.9 KanonC menentukan bentuk kanonik matriks kolom berordo mxn, dimana 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):
40 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(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:
41 end if: end if: end if: end if: end if: end do: return([w,M]); end proc:
1.2.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:
1.2.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:
1.2.12 MultMtx mengalikan matriks kolom
dengan matriks kolom
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]
42 end do: return([m,H]); end proc:
1.2.13 InkodG mengkoding vektor pesan P menjadi vektor katakode C menggunakan matriks generator umum G berordo kxn. 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:
1.2.14 ParG menentukan vektor paritas X dari vektor pesan P menggunakan matriks generator bentuk standar 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:
1.2.15 InkodS mengkoding vektor pesan P menjadi vektor katakode C menggunakan matriks generator bentuk standar 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}:
43 end if: end do: return(S); end proc:
1.2.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:
1.2.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:
1.3
Pendefinisian Prosedur yang digunakan untuk konstruksi Kode Optimal. Misalkan M adalah Diberikan matriks generator bentuk standar matriks representasi vektor baris dari B.
1.3.1
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
44 C:=AddV(C,K[i]): end do: W:=[op(W),C]: end do: return(W); end proc:
1.3.2
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:
1.3.3
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:
45
1.3.4
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:
1.3.5 ListKombM menentukan list dari semua list KombinM untuk semua j = 1, 2, …, t dengan > 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:
1.3.6 UjiAdd1VekM menguji apakah vektor X bisa ditambahkan ke M menggunakan output ListKombM. UjiAdd1VekM:=proc(d::posint,X::set,L::list) local K::list, i,j,b,n,h,k::integer: h:=nops(L): for i from 1 to h do K:=L[i]: k:=nops(K): b:=d-1-i: for j from 1 to k do n:=HmDist(X,K[j]): if n
46
1.3.7
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:
1.3.8
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) 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
47 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:
1.3.9
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:
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
48
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
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:=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)})]:
49 return(C): end proc:
1.3.12 kolek2VekMDt menentukan himpunan semua pasang (X,Y) menggunakan data hasil sebelumnya. Kolek2VekMDt:=proc(d::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:=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:\\coding new\\ Coding Theory\\DataOutD7Xt\\DatTemp2.m"; return(C); end if: end if: end do: end do: F:=[op({op(C)})]: save F, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp2.m"; return(F): 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:=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):
50 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:
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:=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
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
51
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
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:=proc(d::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:=nops(A): if a=0 then s:=op(1,B): B:=subsop(1=NULL,B): X:=H[s]: U:={}: for i in B do Y:=H[i]: Z:=AddV(X,Y): T:=UjiAdd2VekM(d,Z,L): if T=true then U:={op(U),i}: end if: end do: return([[{s},U],[{},B]]): else s:=op(1,B):
52 B:=subsop(1=NULL,B): X:=H[s]: U:={}: for i in B do Y:=H[i]: Z:=AddV(X,Y): T:=UjiAdd2VekM(d,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:=AddV(S,H[k]): end do: T1:=UjiAddXVekM(2+j,d,S,L): end do: if T1=false then break; end if: end do: if T1=true then U:={op(U),i}: end if: end if: end do: return([[{op(A),s},U],[A,B]]): end if: end proc: MoveRNX:=proc(R::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 nops(R) do X:=R[i]: x1:=nops(X[1]): x2:=nops(X[2]): if x1=y and x2>c then M:=[op(M),X]: A:={op(A),i}: elif (x1+x2)<(y+c) or x2=0 then A:={op(A),i}: end if: end do:
53 L:=subsop(op(map(x->x=NULL,A)),R): return([L,M]): end proc: IdxAddXV:=proc(d::posint,P::list,H::list,L::list,c::integer,y: :integer) local R,N,T::list, i,s::integer: R:=SplitHX(d,P,H,L): N:=[]: T:=MoveRNX(R,N,c,y): R:=T[1]: N:=T[2]: for i while R<>[] do R:=map(x->op(SplitHX(d,x,H,L)),R): T:=MoveRNX(R,N,c,y): R:=T[1]: N:=T[2]: end do: return(N): end proc:
1.3.17 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
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,
54
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
1.3.19 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):
55 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:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m"; return(C); end if: end if: end if: end if: end if: end if: end do: end do: F:=[op({op(C)})]: save F, ":\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m"; return(F): end proc: Kolek5VekMDtX:=proc(d::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:={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]:
56 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:\\coding new\\Coding Theory\\DataOutD7Xt\\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)]:
57 save F, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatTemp5.m"; return(F): 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:=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
58 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:
1.3.21 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::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:=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: 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):
59 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:\\coding new\\Coding Theory\\DataOutD7Xt\\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:\\coding new\\Coding Theory\\DataOutD7x\\DatTemp6.m"; return(F): 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:=proc(d::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:=nops(N): 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:=op(1,Y): y2:=op(2,Y): V:=AddV(H[y1],H[y2]):
60 T:=UjiAdd2VekM(d,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:=AddV(S,H[k]): end do: T1:=UjiAddXVekM(2+j,d,S,L): end do: if T1=false then break; end if: end do: if T1=true then K:=[op(K),{H[y1],H[y2],H[op(1,A)],H[op(2,A)],H[op(3,A)]}]: end if: end if: end do: end do: return(K): end proc: DefH4 > DefHX:=proc(K::list,H::list) local X1,X2,R::set, X,L::list, k,i::integer: k:=nops(K): L:=[]: for i from 1 to k do X:=K[i]: X1:=X[1]: X2:=X[2]: R:=map(x->{op(X1),x},X2): L:=[op(L),op(R)]: end do: L:=map(S->map(x->op(x,H),S),L): return(L): end proc:
61
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:=UbahMtxCR(B); > r:=M[2]; d:=5: k:=B[1];
> W:=NonZeroWt(B); > 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:=UbahMtxCR(B); > r:=M[2]; d:=5: k:=B[1];
> W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > H2:=Kolek2VekM(d,H,L,1000):
62 > nops(H2); > Q:=ReduEkiXc(H2,M): > nops(Q); > T:=map(X->AddVekMX(X,M),Q): > Code547:=map(X->UbahMtxRC(X),T): > C4PX:=Code547[11];
> NonZeroWt(C4PX); > 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],[op(C4PX[2]),{}]];
> M:=UbahMtxCR(B);
> r:=M[2]; d:=5: k:=B[1];
> W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > H2:=Kolek2VekM(d,H,L,1000): > nops(H2); > Q:=ReduEkiX(H2,M): > nops(Q); > H3:=Kolek3VekM(d,H2,L,10000): > nops(H3);
63
> Q:=ReduEkiX(H3,M): > nops(Q); > H4:=Kolek4VekM(d,Q,L,10000): > nops(H4); > Q:=ReduEkiX(H4,M): > nops(Q); > H5:=KolekXVekM(5,d,Q,L,10000): > nops(H5); > Q:=ReduEkiX(H5,M): > nops(Q); > T:=map(X->AddVekMX(X,M),Q): > Code598:=map(X->UbahMtxRC(X),T): > C9PX:=Code598[1];
> NonZeroWt(C9PX); > 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],[op(C9PX[2]),{}]];
> M:=UbahMtxCR(B);
> r:=M[2]; d:=5: k:=B[1];
> W:=NonZeroWt(B);
64 > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > H2:=Kolek2VekM(d,H,L,5000): > nops(H2); > Q:=ReduEkiX(H2,M): > nops(Q); > H3:=Kolek3VekM(d,H2,L,5000): > nops(H3); > Q:=ReduEkiX(H3,M): > nops(Q); > H4:=Kolek4VekM(d,Q,L,5000): > nops(H4); > Q:=ReduEkiX(H4,M): > nops(Q); > H5:=KolekXVekM(5,d,Q,L,1): > nops(H5); Tidak berhasil menjangkau [23,14,5], hanya diperoleh [22,13,5] . > T:=map(X->AddVekMX(X,M),Q): > Code13:=map(X->UbahMtxRC(X),T): > C13PX:=Code13[800];
> > > > > >
NonZeroWt(C13PX); i:=1: B1:=DelVekM(i,C13PX): j:=3: B:=DelVekM(j,B1): M:=UbahMtxCR(B);
65
> r:=M[2]; d:=5: k:=B[1];
> t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > H2:=Kolek2VekM(d,H,L,5000): > nops(H2); > Q:=ReduEkiX(H2,M): > nops(Q); > H3:=Kolek3VekM(d,H2,L,5000): > nops(H3); > Q:=ReduEkiX(H3,M): > nops(Q); Diperoleh kode Optimal kuat [23,14,5]. > T:=map(X->AddVekMX(X,M),Q): > Code14:=map(X->UbahMtxRC(X),T): > C14P1:=Code14[1];
> NonZeroWt(C14P1); > save Code5149, "D:\\ Coding Theory\\CdD5k14r9.m";
Konstruksi Kode Optimal Dimensi > 14, dengan menggunakan satu kali basis matriks sebagai berikut: > B:=[C14P2[1],[op(C14P2[2]),{}]];
66
> M:=UbahMtxCR(B);
> r:=M[2]; d:=5: k:=B[1];
> t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > Q:=ReduEki1(H,M): > nops(Q); > H2:=Kolek2VekM(d,Q,L,20000): > nops(H2); > Q:=ReduEkiX(H2,M): > nops(Q); > H3:=Kolek3VekM(d,H2,L,100000): > nops(H3); > Q:=ReduEkiX(H3,M): > nops(Q); > H4:=Kolek4VekM(d,H3,L,150000): > nops(H4); > Q:=ReduEkiX(H4,M): > nops(Q); > H5:=KolekXVekM(5,d,Q,L,50000):
67 > nops(H5); > Q:=ReduEkiX(H5,M): > nops(Q); > H6:=KolekXVekM(6,d,Q,L,20000): > nops(H6); > Q6:=ReduEkiX(H6,M): > nops(Q6); > H7:=KolekXVekM(7,d,Q6,L,1): > nops(H7); Hanya menjangkau sampai dengan 423 kode [30,20,5] > T:=map(X->AddVekMX(X,M),Q6): > Codet52010:=map(X->UbahMtxRC(X),T): > C20PX:=Codet52010[111];
> > > > > > > > > > > > >
NonZeroWt(C20PX); save Codet52010, "D:\\Coding Theory\\CdD5k30r10.m"; i:=20: B4:=DelVekM(i,C20PX): j:=19: B3:=DelVekM(j,B4): j:=18: B2:=DelVekM(j,B3): j:=15: B1:=DelVekM(j,B2): j:=12: B:=DelVekM(j,B1): M:=UbahMtxCR(B);
68
> r:=M[2]; d:=5: k:=B[1];
> t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > H2:=Kolek2VekM(d,H,L,5000): > nops(H2); > Q:=ReduEkiX(H2,M): > nops(Q); > H3:=Kolek3VekM(d,H2,L,10000): > nops(H3); > Q:=ReduEkiX(H3,M): > nops(Q); > H4:=Kolek4VekM(d,Q,L,10000): > nops(H4); > Q:=ReduEkiX(H4,M): > nops(Q); > H5:=Kolek5VekM(d,Q,L,5000): > nops(H5); > Q:=ReduEkiX(H5,M): > nops(Q); > H6:=KolekXVekM(6,d,Q,L,1000): > nops(H6); > Q:=ReduEkiX(H6,M): > nops(Q);
69 Diperoleh satu kode [31,21,5]. > T:=map(X->AddVekMX(X,M),Q): > Codet52110:=map(X->UbahMtxRC(X),T): > C21P1:=Codet52110[1];
> NonZeroWt(C21P1);
> save Codet52110, "D:\\Coding Theory\\CdD5k21r10.m"; Eksplorasi dilanjutkan > read Codet52110 > B10:=Code52110[1];
> i:=21: > B9:=DelVekM(i,B10): > i:=20: > B8:=DelVekM(i,B9): > i:=19: > B7:=DelVekM(i,B8): > i:=18: > B6:=DelVekM(i,B7): > i:=17: > B5:=DelVekM(i,B6):
70 > i:=9: > B4:=DelVekM(i,B5): > i:=8: > B3:=DelVekM(i,B4): > i:=6: > B2:=DelVekM(i,B3): > i:=2: > B1:=DelVekM(i,B2): > i:=1: > B:=DelVekM(i,B1);
> M:=UbahMtxCR(B);
> r:=M[2]; d:=5: k:=B[1];
> t:=min(d-1,k);
71 > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
> P:=[{},{seq(i,i=1..nops(H))}]: > K:=LckIdxAddXV(d,P,H,L,0,10): > nops(K);
> #save K, "D:\\ Coding Theory\\DataOutD5Xt\\DatKD5.m"; > #read "D:\\ Coding Theory\\DataOutD5Xt\\DatKD7.m"; > H11:=DefHX(K,H): nops(H11);
> H12:=KolekXVM(d,K,H,L,10): > nops(H12);
> Q:=ReduEkiX(H12,M): > nops(Q);
Akhirnya, diperoleh 1 kode optimal [33,23,5] tidak saling ekivalen. > T:=map(X->AddVekMX(X,M),Q): > Code52310:=map(X->UbahMtxRC(X),T): > C23PX:=Code52310[1];
72
> save Code52310, "D:\\ coding Theory\\DataOutD5Xt\\CdD5k23r10.m";
73
Lampiran 3 Eksplorasi Konstruksi Kode Optimal Kuat Koreksi 3 Galat (d = 7) Konstruksi Kode Optimal Kuat [11,2,7], dengan menggunakan satu kali basis matriks sebagai berikut: > B:=[2,[{0,1},{0,1},{0,1},{0},{0},{0},{1},{1},{1}]];
> M:=UbahMtxCR(B); > r:=M[2]; d:=7: k:=B[1];
> W:=NonZeroWt(B); > Code729:=B;
> save Code729, "D:\\Coding Theory\\DataOutD7\\CdD7k2r9.m";
Konstruksi Kode Optimal Kuat [15,5,7], dengan menggunakan satu kali basis matriks sebagai berikut: > B:=[2,[{0,1},{0,1},{0,1},{0},{0},{0},{1},{1},{1},{}]];
> B1:=sort(map(S->UbahSetKeDes(S),B[2])); > B:=[B[1],map(n->UbahDesKeSet(n),B1)];
> M:=UbahMtxCR(B); > r:=M[2]; d:=7: k:=B[1];
74 > W:=NonZeroWt(B); > t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
> H2:=Kolek2VekM(d,H,L,1000): > nops(H2);
> H3:=Kolek3VekM(d,H2,L,1000): > nops(H3);
> H4:=Kolek4VekM(d,H3,L,10000): > nops(H4);
> Q:=ReduEkiX(H3,M): > nops(Q);
Akhirnya, diperoleh 2 kode Optimal kuat [15,5,7] tidak saling ekivalen. > T:=map(X->AddVekMX(X,M),Q): > Code7510:=map(X->UbahMtxRC(X),T): > C5PX:=Code7510[1]; M1:=UbahMtxCR(C5PX);
> NonZeroWt(C5PX); > save Code7510, "D:\\Coding Theory\\CdD7k5r10.m";
75
Konstruksi Kode Optimal Kuat [23,12,7], dengan menggunakan satu kali basis matriks sebagai berikut: > B:=[C5PX[1],[op(C5PX[2]),{}]];
> M:=UbahMtxCR(B): > r:=M[2]; d:=7: k:=B[1];
> W:=NonZeroWt(B); > t:=min(d-1,k);
> L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
> H2:=Kolek2VekM(d,H,L,1000): > nops(H2);
> H3:=Kolek3VekM(d,H2,L,1000): > nops(H3);
> H4:=Kolek4VekM(d,H3,L,1000): > nops(H4);
> H5:=KolekXVekM(5,d,H4,L,5000): > nops(H5);
> H6:=KolekXVekM(6,d,H5,L,5000): > nops(H6);
> H7:=KolekXVekM(7,d,H6,L,1000): > nops(H7);
76 > Q:=ReduEkiX(H7,M): > nops(Q);
Akhirnya, diperoleh 8 kode Optimal kuat [23,12,7]. > T:=map(X->AddVekMX(X,M),Q): > Code71211:=map(X->UbahMtxRC(X),T): > C12P1:=Code71211[1];
> NonZeroWt(C12P1); > save Code71211, "D:\\Coding Theory\\CdD7k12r11.m";
Konstruksi Kode Optimal Kuat [27,14,7], dengan menggunakan satu kali basis matriks sebagai berikut: > B:=[4,[{0,1,3},{0,1,3},{0,1},{0,2,3},{0,2,3},{0,3},{1,2,3},{1, 2},{1,3},{2,3},{2},{3},{}]];
> B1:=sort(map(S->UbahSetKeDes(S),B[2]));
> B:=[B[1],map(n->UbahDesKeSet(n),B1)]; > NonZeroWt(B); > M:=UbahMtxCR(B); > r:=M[2]; d:=7: k:=B[1];
77
> 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:\\ Coding Theory\\DataOut\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
> G:=[1,[]]: > H3:=Kolek3VekMDt(d,H2,L,40000,G): > nops(H3);
> read "D:\\ Coding Theory\\DataOut\\DatTemp3.m"; > G:=F: G[1]; nops(G[2]);
> G:=[1,[]]: > H4:=Kolek4VekMDt(d,H3,L,40000,G): > nops(H4); > read "D \\Coding Theory\\DataOut\\DatTemp4.m"; > G:=F: G[1]; nops(G[2]):
> G:=[1,[]]: > H5:=Kolek5VekMDt(d,H4,L,40000,G): > nops(H5);
> read "D:\\ Coding Theory\\DataOut\\DatTemp5.m"; > G:=F: G[1]; nops(G[2]);
> H6:=KolekXVekM(6,d,H5,L,40000):
78 > nops(H6); > H7:=KolekXVekM(7,d,H6,L,40000): > nops(H7); > H8:=KolekXVekM(8,d,H7,L,20000): > nops(H8);
> H9:=KolekXVekM(9,d,H8,L,10000): > nops(H9);
> H10:=KolekXVekM(10,d,H9,L,1000): > nops(H10);
> Q:=ReduEkiX(H10,M): > nops(Q);
Hanya diperoleh satu kode optimal kuat [27,14,7] > T:=map(X->AddVekMX(X,M),Q): > Code71413:=map(X->UbahMtxRC(X),T): > C14P1:=Code71413[1];
> NonZeroWt(C14P1);
79 > Code71413:=[[14,[{0,1,3,4,6,7,8,12,13},{0,1,3,4,5,9,10,12,13}, {0,1,5,6,7,10,11,12,13},{0,2,3,6,7,9,10, 12,13},{0,2,3,4,5,6,11,12,13},{0,3,7,8,10,11,13}, {1,2,3,6,7,11,13},{1,2,8,10,11,12,13},{1,3,4,8,9,11,13},{2,3,5 ,7,8,9,12},{2,4,5,6,8,9,10,11,13},{3,5,6,9,10,11,12},{4,7,8,9, 10,12,13}]]];
> #save Code71413, "D:\\ Coding Theory\\CdD7k14r13.m";
Konstruksi Kode Optimal [N,>14,7], dengan menggunakan satu kali basis matriks sebagai berikut: > read "D:\\ Coding Theory\\CdD7k14r13.m"; > nops(Code71413);
> C14P1:=Code71413[1]: > B4:=[C14P1[1],[op(C14P1[2]),{}]];
80
> > > > > > > > >
#NonZeroWt(B4); i:=14: B3:=DelVekM(i,B4): i:=9: B2:=DelVekM(i,B3): i:=5: B1:=DelVekM(i,B2): i:=1: B:=DelVekM(i,B1);
> M:=UbahMtxCR(B);
81
> r:=M[2]; d:=7: k:=B[1];
> t:=min(d-1,k);
> L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L):
Warning,
computation interrupted
> nops(H);
> G:=[1,[]]: > H2:=Kolek2VekMDt(d,H,L,100000,G): > nops(H2); > read "D:\\Coding Theory\\DataOutD7\\DatTemp2.m"; > G:=F: G[1]; nops(G[2]);
> H2:=F: nops(H2);
> G:=[1,[]]: > H3:=Kolek3VekMDt(d,H2,L,160000,G): > nops(H3); > read "D:\\Coding Theory\\DataOutD7\\DatTemp3.m";
82 > G:=F: G[1]; nops(G[2]);
> > > >
H3:=F[2]: G:=[1,[]]: H4:=Kolek4VekMDtX(d,H3,L,10100,G): nops(H4);
> read "D:\\Coding Theory\\DataOutD7\\DatTemp4.m"; > G:=F: G[1]; nops(G[2]);
> > > >
H4:=F[2]: G:=[1,[]]: H5:=Kolek5VekMDtX(d,H4,L,1000,G): nops(H5);
> read "D:\\Coding Theory\\DataOutD7\\DatTemp5.m"; > G:=F: G[1]; nops(G[2]);
> H5:=F: nops(H5);
> H6:=KolekXVekM(6,d,H5,L,1): > nops(H6);
> Q:=ReduEkiX(H6,M): > nops(Q); > #save H4, "D:\\Coding Theory\\D7H5.m"; Hanya bisa mencapai kode [29,15,7] > T:=map(X->AddVekMX(X,M),Q): > Codet15:=map(X->UbahMtxRC(X),T):
83 > Ct15PX:=Codet15[1];
> NonZeroWt(Ct15PX);
> save Code71514, "D:\\ Coding Theory\\DataOutD7X\\CdD7k15r14.m": > read "D:\\Coding Theory\\CdD7k15r14.m"; > nops(Code71514); > B5:=Code71514[1];
> i:=12: > B4:=DelVekM(i,B5): > i:=4:
84 > B3:=DelVekM(i,B4): > i:=3: > > > > >
B2:=DelVekM(i,B3): i:=2: B1:=DelVekM(i,B2): i:=1: B:=DelVekM(i,B1);
> M:=UbahMtxCR(B);
> r:=M[2]; d:=7: k:=B[1];
> t:=min(d-1,k);
> L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
85 > P:=[{},{seq(i,i=1..nops(H))}]: > K:=IdxAddXV(d,P,H,L,0,5): > nops(K);
> save K, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > read "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > H5:=DefHX(K,H): nops(H5);
> H6:=KolekXVM(d,K,H,L,4): > nops(H6);
> Q:=ReduEkiX(H5,M): > nops(Q);
Akhirnya, diperoleh 4 kode optimal [30,16,7] tidak saling ekivalen. > T:=map(X->AddVekMX(X,M),Q): > Code71614:=map(X->UbahMtxRC(X),T): > C16PX:=Code71614[1]; > NonZeroWt(C16PX);
> save Code71614, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\CdD7k16r14.m"; Eksplorasi dilanjutkan: > read "D:\\coding new\\Coding Theory\\DataOutD7Xt\\CdD7k16r14.m"; > nops(Code71614);
> B5:=Code71614[1]: > i:=16: > B4:=DelVekM(i,B5): > i:=15:
86 > > > > > > >
B3:=DelVekM(i,B4): i:=14: B2:=DelVekM(i,B3): i:=13: B1:=DelVekM(i,B2): i:=9: B:=DelVekM(i,B1);
> M:=UbahMtxCR(B);
> r:=M[2]; d:=7: k:=B[1];
> t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H);
87
> P:=[{},{seq(i,i=1..nops(H))}]: > K:=IdxAddXV(d,P,H,L,0,5): > nops(K);
> save K, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > read "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > H5:=DefHX(K,H): nops(H5);
> H6:=KolekXVM(d,K,H,L): > nops(H6);
> Q:=ReduEkiX(H5,M): > nops(Q);
Akhirnya, diperoleh 4 kode optimal [31,17,7] tidak saling ekivalen. > T:=map(X->AddVekMX(X,M),Q): > Code71714:=map(X->UbahMtxRC(X),T): > C17PX:=Code71714[4];
88
> NonZeroWt(C17PX);
> save Code71714, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\CdD7k17r14.m"; Eksplorasi dilanjutkan: > read "D:\\coding new\\Coding Theory\\DataOutD7Xt\\CdD7k17r14.m"; > nops(Code71714);
> B6:=Code71714[1];
89
> > > > > > > > > > > >
i:=17: B5:=DelVekM(i,B6): i:=16: B4:=DelVekM(i,B5): i:=15: B3:=DelVekM(i,B4): i:=14: B2:=DelVekM(i,B3): i:=12: B1:=DelVekM(i,B2): i:=9: B:=DelVekM(i,B1);
> M:=UbahMtxCR(B);
90
> r:=M[2]; d:=7: k:=B[1];
> t:=min(d-1,k); > L:=ListKombM(M,t): > H:=Kolek1VekM(d,r,r,L): > nops(H); > P:=[{},{seq(i,i=1..nops(H))}]: > K:=IdxAddXV(d,P,H,L,0,6): > nops(K);
> save K, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > read "D:\\coding new\\Coding Theory\\DataOutD7Xt\\DatKD7.m"; > H5:=DefHX(K,H): nops(H5);
> H6:=KolekXVM(d,K,H,L): > nops(H6);
> Q:=ReduEkiX(H5,M): > nops(Q);
Akhirnya, diperoleh 4 kode optimal [31,17,7] tidak saling ekivalen. > T:=map(X->AddVekMX(X,M),Q): > Code71714:=map(X->UbahMtxRC(X),T):
91 > C17PX:=Code71714[4];
>
NonZeroWt(C17PX);
> save Code71714, "D:\\coding new\\Coding Theory\\DataOutD7Xt\\CdD7k17r14.m"; >