abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Zajímavý software

    Projekt D7VK dospěl do verze 1.0. Jedná se o fork DXVK implementující překlad volání Direct3D 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    včera 16:00 | Nová verze

    Byla vydána nová verze 2025.4 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení na blogu.

    Ladislav Hagara | Komentářů: 2
    včera 12:44 | IT novinky

    Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) zveřejnil Národní politiku koordinovaného zveřejňování zranitelností (pdf), jejímž cílem je nejen zvyšování bezpečnosti produktů informačních a komunikačních technologií (ICT), ale také ochrana objevitelů zranitelností před negativními právními dopady. Součástí je rovněž vytvoření „koordinátora pro účely CVD“, jímž je podle nového zákona o kybernetické … více »

    Ladislav Hagara | Komentářů: 10
    včera 04:33 | Nová verze

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.12. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    včera 03:55 | Nová verze

    Společnost System76 vydala Pop!_OS 24.04 LTS s desktopovým prostředím COSMIC. Videoukázky na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Nová verze

    Byla vydána verze 1.92.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    včera 01:33 | Komunita

    Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2024. Oceněni byli Andy Wingo, jeden ze správců GNU Guile, Alx Sa za příspěvky do Gimpu a Govdirectory jako společensky prospěšný projekt.

    |🇵🇸 | Komentářů: 3
    11.12. 18:55 | Nová verze

    Bylo vydáno Eclipse IDE 2025-12 aneb Eclipse 4.38. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.

    Ladislav Hagara | Komentářů: 0
    11.12. 17:44 | Nová verze

    U příležitosti oslav osmi let prací na debianím balíčku vyšlo GPXSee 15.6. Nová verze přináší především podporu pro geotagované MP4 soubory, včetně GoPro videí. Kdo nechce čekat, až nová verze dorazí do jeho distribuce, nalezne zdrojové kódy na GitHubu.

    Martin Tůma | Komentářů: 15
    11.12. 09:22 | Nová verze

    Monado, tj. multiplatformní open source implementace standardu OpenXR specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro virtuální realitu (VR) a rozšířenou realitu (AR), bylo vydáno ve verzi 25.1.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (48%)
     (19%)
     (17%)
     (23%)
     (15%)
     (24%)
     (15%)
     (17%)
    Celkem 460 hlasů
     Komentářů: 19, poslední 11.12. 20:04
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Náhodné kombinace (prvky s různou pravděpodobností)

    |🇵🇸 avatar 21.12.2010 22:41 |🇵🇸 | skóre: 93 | blog:
    Náhodné kombinace (prvky s různou pravděpodobností)
    Přečteno: 278×
    Mám v programu množinu prvků, z nichž každý má přiřazeno nějaké ohodnocení. Potřebuji vygenerovat náhodnou kombinaci (s volitelně připuštěným opakováním) N prvků z té množiny (N přirozené a nemusí se rovnat počtu prvků množiny), přičemž pravděpodobnost, že se prvek množiny v kombinaci vyskytne, je ovlivněna tím ohodnocením prvku. To je právě věc, kterou mě nenapadá, jak jednoduše implementovat (program píšu v Pythonu).

    Nakopne mě, prosím, někdo správným směrem?
    🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána

    Řešení dotazu:


    Odpovědi

    21.12.2010 23:26 Goheeca
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)

    nakopnuti:

    bud nahodny vyber z pole/monziny, kde pocet vyskytu nejakeho prvku je umerny vaze prvku
    nebo udelat nejakou prevodni funkci

    int prvky[N],vahy[N];
    int rnd2index(int rnd) {
      int i,tmp = 0;
      for(i=0;i<N;i++) if((tmp+=vahy[i])>=rnd) break;
      return i;
    }

    rnd je generovano od 0 do suma(vahy)

    21.12.2010 23:43 Goheeca
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)

    vlastne od 1 do suma(vahy)
    nebo nahradit >= za > a pak od 0 do suma(vahy)-1

    22.12.2010 11:36 Goheeca
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)

    hm je tam chyba ...
    oprava:

    int prvky[N],vahy[N];
    int rnd2index(int rnd) {
      int i,tmp = 0;
      for(i=0;i<N;i++) {
        tmp+=vahy[i];
        if(tmp>rnd) break;
      }
      return i;
    }

    |🇵🇸 avatar 24.12.2010 14:07 |🇵🇸 | skóre: 93 | blog:
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)
    Díky. Tu převodní funkci jsem moc nepobral, takže jsem nakonec (aspoň dočasně) použil tu variantu s množinou s počtem výskytů odpovídajícím váze, nicméně to může mít nezanedbatelnou paměťovou náročnost...
    🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
    24.12.2010 15:05 chrono
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)
    Skús sa pozrieť na Generating Random Integers With Arbitrary Probabilities. Je to na prvý pohľad dosť zložité, ale celý algoritmus je tam vysvetlený a je tam aj kód v pythone.
    |🇵🇸 avatar 24.12.2010 17:23 |🇵🇸 | skóre: 93 | blog:
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)
    Ha, díky moc, tohle už bude ono.
    🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
    25.12.2010 22:55 Goheeca
    Rozbalit Rozbalit vše Re: Náhodné kombinace (prvky s různou pravděpodobností)

    no myslel jsem to nejak takhle:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int suma(int j, int* p) {
    	int i=0,tmp=0;
    	for(;i<j;i++) tmp += *(p+i);
    	return tmp;
    }
    
    int weightedrnd(int j, int* values, int* weights) {
    	int i=0,tmp=0,sum=suma(j, weights),rnd=rand();
    	for(;i<j;i++) {
    		tmp += weights[i];
    		if(tmp>rnd%sum) break;
    	}
    	return *(values+i);
    }
    
    int main(int argc, char** argv) {
    	int i,*v,*w;
    	if (argc<=2 || !argc%2) return -1;
    	int n = argc/2-1;
    	v = (int*) malloc(sizeof(int)*n);
    	w = (int*) malloc(sizeof(int)*n);
    	for(i=0;i<n;i++) {
    		v[i] = atoi(argv[i*2+2]);
    		w[i] = atoi(argv[i*2+3]);
    		if (w[i]<=0) {        
    			free(v);
    			free(w);
    			return -2;
    		}
    	}
    	/*for(i=0;i<n;i++) printf ("v:%d w:%d\n", v[i], w[i]);*/
    	srand(time(NULL));
    	for(i=0;i<atoi(argv[1]);i++) printf ("%d ", weightedrnd(n,v,w));
    	free(v);
    	free(w);
    	return 0;
    }
    

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.