Potreboval sem najit neco, co by mi poskladalo ulozena data pseudonahodne, takze sekvencni pristup begin → end by byl „nahodny“. Nasledujici kod ma par masarek, predevsim v „nahodnosti“.
Pouzity algoritmus premapovava bity v cislech na jine pozice a pak tyto premapovane hodnoty porovnava, je zrejme ze takoveto mapovani neni optimalni, pokud kdokoliv najde lepsi reseni budu jen rad.
class LChaos{
private:
vector<int> *_remap;
int _offset,_xor;
public:
LChaos(){
int sizeint = sizeof(int)*8;
_remap = new vector<int>(sizeint);
srand(time(NULL));
for(int i=0;i<sizeint;i++)
(*_remap)[i]=i;
int temp,rindex;
for(int index=sizeint;index>1;index--){
rindex = (int)( ( ((float)rand())/RAND_MAX )*index );
//swap
temp = (*_remap)[index-1];
(*_remap)[index-1]=(*_remap)[rindex];
(*_remap)[rindex]=temp;
}
_offset=rand();
_xor=rand();
}
LChaos(LChaos const ©){
_remap = new vector<int>(*copy.getRemap());
_xor = copy.getXor();
_offset = copy.getOffset();
}
~LChaos(){
delete _remap;
}
vector<int> const *getRemap() const{return _remap;};
int getOffset() const{return _offset;};
int getXor() const{ return _xor;};
bool operator()(int a, int b){
int sizeint = sizeof(int)*8;
int rea=0;
for(int i=0,bit=1;i<sizeint;i++,bit<<=1){
if(((a^_xor)+_offset)&bit){
rea|=1<<(*_remap)[i];
}
}
int reb=0;
for(int i=0,bit=1;i<sizeint;i++,bit<<=1){
if(((b^_xor)+_offset)&bit){
reb|=1<<(*_remap)[i];
}
}
return rea < reb;
}
};
Vysledek tri „posloupnosti“ 0 – 159:
92, 95, 36, 39, 88, 91, 32, 35, 44, 47, 52, 55, 40, 43, 48, 51, 156, 159, 100, 103, 28, 31, 152, 155, 96, 99, 24, 27, 108, 111, 116, 119, 104, 107, 112, 115, 94, 89, 38, 33, 90, 37, 34, 45, 46, 41, 54, 49, 42, 53, 50, 61, 158, 153, 102, 97, 30, 25, 154, 101, 98, 109, 26, 110, 105, 118, 113, 106, 117, 114, 125, 132, 135, 60, 63, 4, 7, 128, 131, 56, 59, 0, 3, 140, 143, 148, 151, 12, 15, 20, 23, 136, 139, 144, 147, 8, 11, 16, 19, 124, 127, 68, 71, 120, 123, 64, 67, 76, 79, 84, 87, 72, 75, 80, 83, 134, 129, 62, 57, 6, 1, 133, 130, 141, 58, 5, 2, 13, 142, 137, 150, 145, 14, 9, 22, 17, 138, 149, 146, 157, 10, 21, 18, 29, 126, 121, 70, 65, 122, 69, 66, 77, 78, 73, 86, 81, 74, 85, 82, 93
133, 53, 141, 61, 137, 57, 49, 33, 132, 52, 140, 60, 136, 56, 48, 32, 5, 69, 117, 13, 77, 125, 9, 73, 121, 113, 97, 4, 68, 116, 12, 76, 124, 8, 72, 120, 112, 96, 149, 37, 21, 157, 45, 29, 153, 41, 25, 145, 129, 17, 1, 148, 36, 20, 156, 44, 28, 152, 40, 24, 144, 128, 16, 0, 101, 85, 109, 93, 105, 89, 81, 65, 100, 84, 108, 92, 104, 88, 80, 64, 135, 55, 143, 63, 139, 59, 51, 35, 134, 54, 142, 62, 138, 58, 50, 34, 7, 71, 119, 15, 79, 127, 11, 75, 123, 115, 99, 6, 70, 118, 14, 78, 126, 10, 74, 122, 114, 98, 151, 39, 23, 159, 47, 31, 155, 43, 27, 147, 131, 19, 3, 150, 38, 22, 158, 46, 30, 154, 42, 26, 146, 130, 18, 2, 103, 87, 111, 95, 107, 91, 83, 67, 102, 86, 110, 94, 106, 90, 82, 66
115, 112, 83, 80, 127, 124, 95, 92, 51, 48, 19, 16, 63, 60, 31, 28, 147, 144, 159, 156, 99, 96, 67, 64, 111, 108, 79, 76, 35, 32, 3, 0, 47, 44, 15, 12, 131, 128, 143, 140, 113, 126, 81, 94, 125, 122, 93, 90, 49, 62, 17, 30, 61, 58, 29, 26, 145, 158, 157, 154, 97, 110, 65, 78, 109, 106, 77, 74, 33, 46, 1, 14, 45, 42, 13, 10, 129, 142, 141, 138, 123, 120, 91, 88, 103, 100, 71, 68, 59, 56, 27, 24, 39, 36, 7, 4, 155, 152, 135, 132, 107, 104, 75, 72, 87, 84, 55, 52, 43, 40, 11, 8, 23, 20, 139, 136, 151, 148, 119, 116, 121, 102, 89, 70, 101, 98, 69, 66, 57, 38, 25, 6, 37, 34, 5, 2, 153, 134, 133, 130, 105, 86, 73, 54, 85, 82, 53, 50, 41, 22, 9, 21, 18, 150, 137, 118, 149, 146, 117, 114
Poslední komentáře
před 43 týdny 15 hod
před 43 týdny 4 dny
před 43 týdny 4 dny
před 1 rok 19 týdnů
před 1 rok 19 týdnů
před 1 rok 19 týdnů
před 1 rok 37 týdnů
před 1 rok 44 týdny
před 1 rok 45 týdnů
před 2 roky 3 týdny