![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam
czy ktos moze naprowadzic mnie w pewnej kwestii. chcialbym zrobic losowanie cyferek 0-9 ale tak aby cyferki 3,6,9 byly losowane czesciej (tak jakby bardziej promowane przy losowaniu) samo losowanie moge zrobic mt_rand ale z tymi wagami to nie wiem jak ruszyc |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Celbarowicz: Jeśli zrobisz ileś liczb to w Twoim wykonaniu tracę informację o wagach w określinym momencie. Czemu? A co z wartościami mniejszymi od wartości bazowej?
Mamy sytuację, że mamy mieć po 1 razie 1,2,3, po 2 razy 4 i 3 razy 5. Co robimy w Twoim wypadku? a[1] = 1, a[2] = 2, a[3] = 3, a[4] = 4, a[5] = 4, a[6] = 5, a[7] = 5, a[8] = 5 Fajnie. A teraz zmieniamy wagi do pół szansy na 1 (IMG:style_emoticons/default/smile.gif) Co trzeba zrobić? Mnożyć wszystkie wagi razy 2 by ustandaryzować wszystkie tak, by najniższa wartość była 1, a wszystkie inne były wartościami naturalnymi. W efekcie mamy cudowne normalizowanie, które w przypadku wielu liczb zajmie ogrom czasu, bo musi utworzyć: a[1] = 1, a[2] = 2, a[3] = 2, a[4] = 3, a[5] = 3, a[6] = 4, a[7] = 4, a[8] = 4, a[9] = 4, a[10] = 5, a[11] = 5, a[12] = 5, a[13] = 5, a[14] = 5, a[15] = 5 A co w przypadku tortu? Mogę się bawić jak chcę, bo i tak ostateczne 100% to suma wszystkich wag i mi się obliczenia normalizują "same". Twój kod więc jest nawet dla małych liczb niezbyt dobry jeśli wprowadzisz mniejsze niż 1 wartości wag. W trakcie normalizacji musisz wtedy taką wartość znaleźć, by znajdowało ewentualny najmniejszy całkowity mnożnik, który doprowadzi wszystkie ułamki do zmiany w liczby całkowite. Przykład? Masz wagę 0.5 i 0.6, a więc tak naprawdę wartością bazową nie będzie 1 ale inna wartość. Teraz powiesz mi jaki jest wzorek na ową wartość bazową i mnożnik, którym wszystkie liczby potraktować? Rozwiązanie Twoje jest po prostu bardzo nieodporne na modyfikacje i określanie wagi jako szacowanej względem wartości bazowej. Tu akurat jest proste rozwiązanie, bo na upartego zawsze można jako mnożnik przyjąć potęgę 10 taką, ktora pozbawia obie liczby części ułamkowej, a więc dla tego przypadku byłoby to 10 jako i mnożnik i wartość bazowa jednocześnie. Tak więc zamiast bazowej tablicy z kilkoma elementami masz już tablice z minimum kilkudziesięcioma, jesli tego nie optymalizujemy by szukał najmniejszej możliwej liczby, dla zaledwie może 5-6 liczb. Widzisz jak właśnie posypałeś wydajność? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 05:53 |