AHA.POMORZE.PL

Forum dyskusyjne
It is currently September 5, 2010, 10:49 am

All times are UTC



Viewing profile - umrzyk

Board presence

Contact

umrzyk
Registered User
Offline
[ Add friend | Add foe ]
E-mail address: E-mail
PM: Send private message
MSNM/WLM:
YIM:
AIM:
ICQ:
Jabber:

Author Message

Topic: "kompresja" danych w objekcie

 Post subject: "kompresja" danych w objekcie
Posted: 2007-03-26 12:29:28 

Replies: 0
Views: 0


- Ukryj cytowany tekst -- Pokaz cytowany tekst -Subversor wrote:
> Witam
> Byc moze ten problem powinienem dac na pl.comp.programming ale ze pisze to w

> javie ,stosuje serializacje itp. wiec pisze to tu :)
> Problem wydawalo by sie jest prosty, otoz jest pewna sytuacja:
> -  sa wyscigi samochodow
> - rodzaji samochodow jest np 65 //pomiajamy ich parametry itd.
> - do wyscigu staja po 4 samochody
> wyscigow jest.. tyle ile kombinacji mozliwych samochodow czyli np. (1 2 3 4)

> (1 2 3 5) ale tez (4 4 3 3)) i tych kombinacji jest ponad 800 000 (to
> jeszcze nie duzo)
> glownym problemem ze te wyscigi od bywaja sie na roznych torach i tych torow

> jest dosyc DUZO ( ponad 2 miliony) i kazdy ma swoja specyfike
> moim celem jest zapamietanie wszystkich wynikow (lub prawie wszystkich)
> wyscigow, jako ze 800 tys x 2 miliony daje dosyc duza liczbe a na dysku mam
> "troche" mniej wolnego miejsca
> (chcialbym sie zmiescic w okolo 30 GB, 50 jeszcze bym przebolal).
> Problem polega tez na tym ze nie mam zbytnio czasu na testy (gdyz bedzie
> tylko prawdopodobnie jedna proba i marze o tym zeby ta proba zajela rosadny
> czas )
> i nie wiem jakie wyniki beda wychodzily (nie potrafie ich nawet
> przewidziec) - (byc moze zawsze bedzie wygrywal samochod nr 13 :P, nastepnie

> 17 itd.)
> ale musze zalozyc bardziej pesymistycznie ze wyniki beda rozne (ale nie
> przypadkowe)
> Byc moze niektorzy zastanawiaja sie dlaczego np. nie wygrywa kazdego wyscigu

> np. 13 skoro jest najlepsza,
> otoz (pomijam cala specyfike wyscigu) w syscigu np. 13 1 2 3 wygrywa 13 w 13

> 4 5 6 tez 13 (no bo jest statystycznie najlepsza)
> ale w wyscigach np.  13 1 2 6 wygrywa 1 (dlaczego? otoz zachodza pewne
> interakcje miedzy  pojazdami i 6 dla pewna moc 1 bo 6 nie lubi 13 tak w
> uproszeniu)
> aha ,zapomnialem o w sumie malo waznym szczegole wyscig moze skonczyc sie
> porazka wszystkich 4 samochodow (wypadek)
> Moja wyobrazenie o zapisie tego.
> jest kalasa:
> Class Tor{
> string nazwa:
> inne duperele...
> Wyscigi wscigi;
> }
> i to ja zapisuje na dysk (czyli cos kolo 2 miliony plikow ;) )
> przeznaczam 30 GB na te pliki czyli na plik przypada 15kb
> czyli musze upchnac w objekcie wyscigi (15kb) 800 tys wynikow, jezeli to nie

> mozliwe
> chce upchnac jak najwiecej. (reszte na oko :P czy jak to mowia
> statystycznie)
> Moja wstepna idea
> mam 800 000 wynikow
> int[] statystycznie najlepsze[66] ->poukladane wg. liczby wygranych (czyli
> nasza 13 jest na poczatku)
> boolean[][] przegrane=new boolean[65][66];->zapisane z kim wygrywa dany
> rodzaj.czyli prawdopodobnie 13 bedzie miala ze wygrywala z wszystkimi
> rodzajami
>                                                                         ale
> niestety druga (17) z kolei tez bedzie miala wszystkie 66 true nawet byc
> moze 13 (bo w jakism wyscigu byc moze z nia wygra)
>                                                                        
 (wiec
> dla pierwszych ilus bedzie to to samo co tablica "statystycznie najlepsze"
> tablica wyjatkow - w niej beda trzymane wyjatki (bedzie ich tyle ile mi sie
> zmiesci w tych 15 kb) i np. te wyscigi 17 w ktorych wygrala ona z 13,
>                             w tablicy tej beda wg. ilosci wygranych, czyli
> wyjatki najzadziej wygrywajacego samochodu(ale jednak czasem wygrywajacego)
> zostana niestety
>                             prawodpodobnie pominiete.

jesli dobre zrozumialem, chcesz zachowac na dysku informacje [tor, nr
wyscigu, samochod, miejsce], zgadza sie? jesli tak, to zapomnij o
serializacji obiektow. po pierwsze bedzie to kompletnie niewydajne, po
drugie zachowujesz niepotrzebne informacje. to, co tak naprawde chcesz
zachowac to wlasnie te cztery informacje: tor, numer wyscigu, samochod i
zajete miejsce. dopiero pozniej przy prezentacji wynikow doczytasz sobie
informacje np. o samochodzie nr 1 i torze nr 24.
druga sprawa to jak te informacje zapisac zeby zajely najmniej miejsca.
wezmy sobie na przyklad  tor 1, w ktorym biora udzial samochody 1,2,3,4
(wyscig 1) i 2,3,4,5 (wyscig 2) i zapiszmy to w postaci [tor:
n_wyscigow: (s1 s2 s3 s4) ...], tak aby czworka w nawiasie odpowiadala
jednemu wyscigowi (s1 odpowiadalo samochodowi, ktory zajal pierwsze
miejsce, s2 - temu ktory zajal drugie miejsce itd):
[1: 2: (2 4 3 1) (2 3 4 5)] - oznacza ze na torze 1 w wyscigu 1,
samochod nr 2 zajal pierwsze miesce, 4 - drugie, 3 - trzecie, 1 -
czwarte, a w wyscigu 2, samochod 2 zajal pierwsze miejsce, 3 - drugie, 4
- trzecie, 5 - czwarte.
Jak widzisz do zapisu takiej informacji wystarczy 10 bajtow: [1 2 2 4 3
1 2 3 4 5]. co wiecej, dane dla kazdego toru mozna  potraktowac dowolnym
algorytmem pakujacym i przy wiekszej liczbie wyscigow na torze okaze sie
ze miejsca bedzie potrzeba o 50% mniej.
trzecia sprawa to oszacowanie najbardziej pesymistycznego wariantu,
czyli ze na kazdym torze bierze udzial kazda czworka z 65 samochodow i
kazdy samochod z tej czworki zajmuje dowolne miejsce w wyscigu.
Liczba kombinacji 4 sposrod 65 samochodow to 677040, kazdy z nich moze
byc na jednym z 4! miejsc, wiec wynikowo daje to 16248960 kombinacji dla
jednego toru. torow mamy 2mln, w sumie dostajemy 16248960 * 2mln =
32497920000000 kombinacji. ile to zajmie na dysku? 32497920000000
(bajty) / 1024 (kb) / 1024 (mb) / 1024 (gb) = ok. 30266 GB, a tak na
prawde to jeszcze wiecej, bo nr toru (jesli jest ich 2mln) w jednym
bajcie nie zapiszesz. wyglada to troche pesymistycznie, ale jesli
zastosujesz jakakolwiek kompresje zapisywanych danych moze okazac sie ze
na dysku 50GB niechcacy sie zmiescisz :)
pozdrawiam,
m.
Sort by:  

Who is online

Users browsing this forum: Radoslaw P.,Marcin Bielewicz,Andy A,ReeD, prezenty and 3 guests


New posts New posts    No new posts No new posts    Announce Announcement
New posts [ Popular ] New posts [ Popular ]    No new posts [ Popular ] No new posts [ Popular ]    Sticky pozycjonowanie
New posts [ Locked ] New posts [ Locked ]    No new posts [ Locked ] No new posts [ Locked ]    Moved topic Moved topic
You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group - Pozycjonowanie