%   norep

%   This software is protected by german copyright and international treaties.             
%   Copyright 2004 Markus Junghöfer & Peter Peyk. All Rights Reserved.                     
%                                                                                          
%   THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE        
%   NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO,    
%   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE    
%   OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
%   TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT,       
%   INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE      
%   OR DOCUMENTATION.       


clear all;

%Parameter
anzahl=input('wieviel verschiedene elemente?');
while 1
                                                               
	laenge=input('Signallänge?');
	if rem(laenge,anzahl)~=0
   	disp(['Signallänge nicht durch Elementanzahl teilbar!']);
	else break
	end  
end
   

%file und mat bereitstellen
%[savefilename,savefilepath]=uiputfile('*.txt','zielfile:');
%savefile=[savefilepath,savefilename];
%savefilehandle=fopen(savefile,'wt');
reihemat=zeros(laenge,1);
negeyemat=-eye(anzahl)+ones(anzahl);
bestdist=100;
kritsum=input('optimierung? (0=ideal; >0=zunehmend fehlerbehaftet)');


while 1
   	equalvec=zeros(1,anzahl);
   	helpmat=ones(anzahl);
   	while sum(equalvec)<anzahl
			reihemat(1,1)=round(rand*anzahl);
			for k=2:laenge
   			    while 1
     		 	    reihemat(k,1)=floor(rand*anzahl);
      			    if reihemat(k,1)~=reihemat(k-1,1)
        		 	    break
      			    end
   			    end
			end

			%elementanzahl pruefen
			anzahlmat=zeros(laenge,anzahl);
			for k=1:anzahl
   			    anzahlmat(:,k)=((k-1)==reihemat(:,1));
			end	
			anzahlvec=sum(anzahlmat);
			equalvec=(anzahlvec(1)==anzahlvec);
	end

	%Uebergangswahrscheinlichkeiten
	uewktmat=zeros(anzahl);
	for l=1:(laenge-1)
   		for m=1:anzahl
      		for n=1:anzahl
         		if and(anzahlmat(l,m)==1,anzahlmat(l,m)==anzahlmat(l+1,n))
            		uewktmat(m,n)=uewktmat(m,n)+1;
         		end
      		end
   		end
   	end
   	uewktmat

   	helpmat=uewktmat/negeyemat;
   	helpmat=helpmat*(1/helpmat(1,1));
   	distmat=helpmat-eye(anzahl);
   	dist=sum(sum(abs(distmat)));
   	if dist<bestdist
      	bestdist=dist
      	bestreihemat=reihemat;
        bestequalvec=equalvec
      	bestuewktmat=uewktmat
   	end
	if abs(bestdist)<kritsum
   	break
	end
end

