-
X-Received: by 10.182.129.227 with SMTP id nz3mr288671obb.2.1461404312937; Sat, 23
Apr 2016 02:38:32 -0700 (PDT)
X-Received: by 10.182.129.227 with SMTP id nz3mr288671obb.2.1461404312937; Sat, 23
Apr 2016 02:38:32 -0700 (PDT)
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin3!goblin.stu.neva.ru!news.ripco.com!news.glorb.com!g8no5633612ig
r.0!news-out.google.com!u9ni92igk.0!nntp.google.com!sq19no227328igc.0!postnews.
google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sat, 23 Apr 2016 02:38:32 -0700 (PDT)
In-Reply-To: <nfed5s$4oo$1@node2.news.atman.pl>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=178.37.232.66;
posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 178.37.232.66
References: <nfbjra$fer$1@node2.news.atman.pl>
<5...@g...com>
<nfed5s$4oo$1@node2.news.atman.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <d...@g...com>
Subject: Re: Szybki algorytm na permutację
From: "M.M." <m...@g...com>
Injection-Date: Sat, 23 Apr 2016 09:38:32 +0000
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:209338
[ ukryj nagłówki ]On Saturday, April 23, 2016 at 1:47:09 AM UTC+2, bartekltg wrote:
> On 22.04.2016 18:43, M.M. wrote:
> > On Friday, April 22, 2016 at 12:22:35 AM UTC+2, Borneq wrote:
> >> z wykorzystaniem random()
> >> Przychodzi mi do głowy jeden pomysł: tablicę posortowanych wielkości n i
> >> drugą, początkowo wielkości 0.
> >> Z posortowanych wybieram za pomocą random(n) któryś element, i
> >> najważniejsze: w dziurę (dziura - element o indeksie random(n)) wkładam
> >> element ostatni.
> >> Potem wybieram za pomocą random(n-1) wkładam w dziurę.
> >> I tak dalej
>
> >
> > Może tak?
> > for( int i=1 ; i<=N ; i++ )
> > tab[i] = i;
> > for( int i=0 ; i<N*2 ; i++ )
> > swp( tab[rand()%N] , tab[rand()%N] );
>
> Bardzo źle.
> Wynonujesz 4N losowań.
> Czy rozkład wyniku jest równomierny, wcale bym się nie zakładał.
>
> pzdr
> bartekltg
Nie wiem, też bym się nie założył, ale na pewno Knuth shuffle dał
mniejsze odchylenie standardowe w kilku testach:
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <QHash>
#include <QString>
#include <cmath>
#define N (10000000)
#define M (5)
static void swp( int &a , int &b ) {
const int x = a;
a = b;
b = x;
}
static QHash<QString,int> test1() {
QHash<QString,int> hash;
for( int i=0 ; i<N ; i++ ) {
int tab[M];
for( int j=0 ; j<M ; j++ )
tab[j] = j;
for( int j=0 ; j<M*2 ; j++ )
swp( tab[rand()%M] , tab[rand()%M] );
QString p;
for( int j=0 ; j<M ; j++ )
p.append( QString::number(tab[j]) );
if( hash.contains(p) )
hash[p]++;
else
hash.insert(p,1);
}
return hash;
}
static QHash<QString,int> test2() {
QHash<QString,int> hash;
for( int i=0 ; i<N ; i++ ) {
int tab[M];
for( int j=0 ; j<M ; j++ )
tab[j] = j;
for( int j=0 ; j<M-1 ; j++ )
swp( tab[j] , tab[ j + rand()%(M-j) ] );
QString p;
for( int j=0 ; j<M ; j++ )
p.append( QString::number(tab[j]) );
if( hash.contains(p) )
hash[p]++;
else
hash.insert(p,1);
}
return hash;
}
static void stat( const QHash<QString,int> &hash ) {
double sum=0, sum2=0, avg, cnt=0, min=1, max=0;
for( QHash<QString,int>::const_iterator i=hash.begin() ; i!=hash.end() ; ++i ) {
const double tmp = (double) i.value() / N;
sum += tmp;
cnt ++ ;
if( min > tmp ) min = tmp;
if( max < tmp ) max = tmp;
}
avg = sum / cnt;
for( QHash<QString,int>::const_iterator i=hash.begin() ; i!=hash.end() ; ++i ) {
const double tmp = (double) i.value() / N;
sum2 += (tmp-avg) * (tmp-avg);
}
printf("cnt=%.0lf sum=%lf min=%lf max=%lf avg=%lf std=%lf\n" , cnt , sum , min ,
max , avg , sqrt( sum2 / cnt ) );
fflush(stdout);
}
int main(int argc, char *argv[])
{
const uint seed = (uint)time(NULL);
printf("seed = %u\n",seed);
srand( seed );
{
const QHash<QString,int> hash = test1();
stat(hash);
}
srand( seed );
{
const QHash<QString,int> hash = test2();
stat(hash);
}
return 0;
}
seed = 1461404107
cnt=120 sum=1.000000 min=0.008029 max=0.009185 avg=0.008333 std=0.000209
cnt=120 sum=1.000000 min=0.008270 max=0.008425 avg=0.008333 std=0.000029
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-11 Koszty prowadzenia firmy za granicą
- 2025-01-11 19 migrantów
- 2025-01-11 300km/h
- 2025-01-11 Kongres USA uchwalił "Prawo babci Pawlakowej" na MTK [Lex Gradma Pawlak]
- 2025-01-11 Riga => Specjalista ds. public relations <=
- 2025-01-11 Przestępca wyborczy Musk nadciąga nad Tuskistan?
- 2025-01-11 Białystok => Delphi Programmer <=
- 2025-01-09 Jaka nawigacja z asystentem zmiany pasa ruchu?
- 2025-01-10 Coś dusi.
- 2025-01-09 akumulator napięcie 12.0v
- 2025-01-10 Białystok => Architekt rozwiązań (doświadczenie w obszarze Java, A
- 2025-01-10 Warszawa => Software .Net Developer <=
- 2025-01-10 Białystok => Application Security Engineer <=
- 2025-01-10 Warszawa => System Architect (Java background) <=
- 2025-01-10 Warszawa => Solution Architect (Java background) <=