-
11. Data: 2010-05-16 12:11:36
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Mariusz Marszałkowski <m...@g...com>
On 16 Maj, 12:39, "j...@f...adres.to"
<w...@c...barg.cy> wrote:
> Mariusz Marszałkowski wrote:
> > On 15 Maj, 18:19, Michoo<m...@v...pl> wrote:
> >> Jacek pisze:
>
> >>> Macie jakis pomysl na prosty algorytm, ktory pokaze ilosc grup i zsumuje
> >>> wartosci w poszczegolnych grupach?
>
> >> Sortujesz w dowolnym monotonicznym porządku. Zapisujesz pierwszy element
> > To chyba najlepszy sposób.
>
> Aby uzyskać wynik taki, jak w twoim algorytmie, wystarczy tylko raz
> przeglądnąć tablicę.
Fakt, można wydajniej (ale kosztem większej pamięci) z użyciem
hash-table.
Pozdrawiam
-
12. Data: 2010-05-16 12:25:47
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Jacek <a...@o...pl>
Dnia Sun, 16 May 2010 12:32:43 +0200, j...@f...adres.to napisał(a):
> Jacek wrote:
>> Witajcie.
>> Szukam rozwiazania takiego problemu.
>> Mamy tablice jednowymiarowa, 4-elementowa.
>> Wyszukujemy elementy tej samej wartosci i te, ktore sie roznia.
>> Przyklad:
>> 1=2=3=4 - w wyniku mamy 1 grupe
>> 1=2=3<>4 - w wyniku mamy 2 grupy
>> 1=2& 3=4 - tez 2 gr.
>> 1=3=4<>2 - rowniez 2
>> ..i pozostale kombinacje
>>
>> Ostatnim przypadkiem bedzie 1<>2<>3<>4, czyli mamy 4 grupy.
>> Ogolnie beda kombinacje: 1grupa, 2 grupy i 4 grupy.
>> Macie jakis pomysl na prosty algorytm, ktory pokaze ilosc grup i zsumuje
>> wartosci w poszczegolnych grupach?
>> Moze jakis prosty przyklad?
>>
>> Pozdrawiam.
>
> Jeśli rzeczywiście chcesz jako wynik dostać liczbę podzbiorów o takich
> samych elementach oraz dla każdego podzbioru sumę jego elementów, to
> jest to banalnie proste do zaprogramowania nawet w czymś takim jak awk.
>
> Przykładowy kod w awk :
>
> { wynik[$0]+=$0 }
> END { for (i in wynik) liczba_grup++
> print "grup jest " liczba_grup
> for (i in wynik) print "suma elementów o wartości " i " wynosi " wynik[i]
> }
>
> Na przykład dla danych wejściowych:
> 0
> 0
> 1
> 1
> 2
> 2
> 2
>
> jako wynik działania powyższego kodu otrzymasz:
> grup jest 3
> suma elementów o wartości 0 wynosi 0
> suma elementow o wartości 1 wynosi 2
> suma elementow o wartości 2 wynosi 6
>
>
> j..
Dzieki.
Jak widac zle napisalem watek.
Moze wiec tak:
Mamy tablice 4 elementowa.
Mamy takie kombinacje wyjsciowe:
-jezeli wszystkie elementy maja rowne wartosci - liczymy sume tych
elemetow,
-jezeli 2 rowne i 2 rozne - w wyniku mamy 3 wartosci (suma dwoch rownych i
wartosci dwoch roznych elementow),
-3 rowne i 1 rozny - w wyniku mamy sume trzech rownych i wartosc czwartego
elementu,
-2 rowne i 2 rowne - dwie sumy,
-4 rozne - cztery wartosci.
Oczywiscie (dla np. drugiej kombinacji) moze byc tak:
a(1)=a(2) i a(3)=a(4) ale tez a(1)=a(3) i a(2)=a(4) jak i a(1)=a(4) i
a(2)=a(3)- to to samo logicznie, bo operujemy na dwoch 'grupach', ale sumy
powinny byc liczone, gdy a(1)=a(2) i a(3)=a(4), to mamy a(1)+a(2) i
a(3)+a(4) itd.
Mam nadzieje, ze jasniej...
Pozdrawiam.
-
13. Data: 2010-05-16 12:55:58
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Mariusz Marszałkowski <m...@g...com>
On 16 Maj, 14:25, Jacek <a...@o...pl> wrote:
> Dnia Sun, 16 May 2010 12:32:43 +0200, j...@f...adres.to napisał(a):
>
>
>
> > Jacek wrote:
> >> Witajcie.
> >> Szukam rozwiazania takiego problemu.
> >> Mamy tablice jednowymiarowa, 4-elementowa.
> >> Wyszukujemy elementy tej samej wartosci i te, ktore sie roznia.
> >> Przyklad:
> >> 1=2=3=4 - w wyniku mamy 1 grupe
> >> 1=2=3<>4 - w wyniku mamy 2 grupy
> >> 1=2& 3=4 - tez 2 gr.
> >> 1=3=4<>2 - rowniez 2
> >> ..i pozostale kombinacje
>
> >> Ostatnim przypadkiem bedzie 1<>2<>3<>4, czyli mamy 4 grupy.
> >> Ogolnie beda kombinacje: 1grupa, 2 grupy i 4 grupy.
> >> Macie jakis pomysl na prosty algorytm, ktory pokaze ilosc grup i zsumuje
> >> wartosci w poszczegolnych grupach?
> >> Moze jakis prosty przyklad?
>
> >> Pozdrawiam.
>
> > Jeśli rzeczywiście chcesz jako wynik dostać liczbę podzbiorów o takich
> > samych elementach oraz dla każdego podzbioru sumę jego elementów, to
> > jest to banalnie proste do zaprogramowania nawet w czymś takim jak awk.
>
> > Przykładowy kod w awk :
>
> > { wynik[$0]+=$0 }
> > END { for (i in wynik) liczba_grup++
> > print "grup jest " liczba_grup
> > for (i in wynik) print "suma elementów o wartości " i " wynosi " wynik[i]
> > }
>
> > Na przykład dla danych wejściowych:
> > 0
> > 0
> > 1
> > 1
> > 2
> > 2
> > 2
>
> > jako wynik działania powyższego kodu otrzymasz:
> > grup jest 3
> > suma elementów o wartości 0 wynosi 0
> > suma elementow o wartości 1 wynosi 2
> > suma elementow o wartości 2 wynosi 6
>
> > j..
>
> Dzieki.
> Jak widac zle napisalem watek.
> Moze wiec tak:
> Mamy tablice 4 elementowa.
> Mamy takie kombinacje wyjsciowe:
>
> -jezeli wszystkie elementy maja rowne wartosci - liczymy sume tych
> elemetow,
> -jezeli 2 rowne i 2 rozne - w wyniku mamy 3 wartosci (suma dwoch rownych i
> wartosci dwoch roznych elementow),
> -3 rowne i 1 rozny - w wyniku mamy sume trzech rownych i wartosc czwartego
> elementu,
> -2 rowne i 2 rowne - dwie sumy,
> -4 rozne - cztery wartosci.
>
> Oczywiscie (dla np. drugiej kombinacji) moze byc tak:
> a(1)=a(2) i a(3)=a(4) ale tez a(1)=a(3) i a(2)=a(4) jak i a(1)=a(4) i
> a(2)=a(3)- to to samo logicznie, bo operujemy na dwoch 'grupach', ale sumy
> powinny byc liczone, gdy a(1)=a(2) i a(3)=a(4), to mamy a(1)+a(2) i
> a(3)+a(4) itd.
> Mam nadzieje, ze jasniej...
Teraz to zupełnie nic nie rozumiem :)
Masz tablice N-elementową. Zakładając że każdy z elementów może
trafić do zbioru co najwyżej jeden raz, możesz utworzyć z tej
tablicy 2^N różnych zbiorów ( ze zbiorem pustym ).
Np. dla a[0], a[1], a[2], masz:
1) a[0],
2) a[1],
3) a[2],
4) a[0],a[1],
5) a[0],a[2],
6) a[1],a[2],
7) a[0],a[1],a[2],
8) zbiór pusty
Trzy elementy, czyli 2^3 = 8 zbiorów. Bez powtórzeń więcej
się nie da, jest dokładnie 2^N.
Teraz pytanie, co decyduje o tym które zbiory Cię interesują, a
które nie?
Pozdrawiam
-
14. Data: 2010-05-16 13:12:41
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Jacek <a...@o...pl>
Czesc Mariusz.
Chodzi o to, ze wystawiam fakture na podstawie 4 wartosci.
Jezeli te wartosci sa rowne, to wystawiam 1 f. - suma wartosci.
Jezeli wszystkie 4 wartosci sa rozne, to wystawiam 4 f.
Nastepnie sa zaleznosci, jak opisalem w poscie wyzej, czyli:
- 2 wartosci z 4-rech sa rowne i pozostale dwie sa rowne, wiec wystawie 2
f.
- 2 wartosci sa takie same, pozostale 2 rozne, wiec wystawie jedna na dwie
rowne i dwie na te nierowne,
- 3 wartosci sa takie same i jedna inna, wiec 1 f. na te 3 rowne i 1 f. na
pozostala wartosc,
Ogolnie chodzi o wybranie z tego zbioru elemtow rownych i roznych i
umieszczenie ich w grupach.
Mam nadzieje, ze przyklad obrazowy pomoze;)
Chyba jednak wszytko to bede musial zalawic Case i If...
-
15. Data: 2010-05-16 13:38:09
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Mariusz Marszałkowski <m...@g...com>
On 16 Maj, 15:12, Jacek <a...@o...pl> wrote:
> Czesc Mariusz.
>
> Chodzi o to, ze wystawiam fakture na podstawie 4 wartosci.
> Jezeli te wartosci sa rowne, to wystawiam 1 f. - suma wartosci.
Czyli propozycja z sortowaniem i hash-table były dobre.
Masz np. 7,4,7,7
sortujesz:4,7,7,7
pierwsza grupa to jedna czwórka
druga grupa to 3 siódemki.
Masz np. 2,3,2,3
sortujesz:2,2,3,3
pierwsza grupa to dwie dwójki, druga to dwie trójki.
1) Sortujesz liczby.
2) Zapamiętujesz w zmiennej x początkową liczbę
3) Wrzucasz na pierwszą fakturę kolejne liczby, tak długo
dopóki są równe x.
4) Jeśli napotkałeś inną liczbę niż x, bierzesz następną
fakturę, w x zapamiętujesz tą inną liczbę i znów
wrzucasz tak długo do póki kolejne liczby są równe x.
Pozdrawiam
-
16. Data: 2010-05-16 13:38:13
Temat: Re: Wspolne i rozne elementy tablicy.
Od: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>
On May 16, 3:12 pm, Jacek <a...@o...pl> wrote:
[...]
> Ogolnie chodzi o wybranie z tego zbioru elemtow rownych i roznych i
> umieszczenie ich w grupach.
> Mam nadzieje, ze przyklad obrazowy pomoze;)
>
> Chyba jednak wszytko to bede musial zalawic Case i If...
Po co kombinować z case i if rozpatrując poszczególne przypadki
osobno, skoro problem jest trywialny w ogólnym przypadku?
Na przykład w Perlu:
my @values = (10, 20, 30, 20); # Przykład.
my %groups = ();
foreach my $value (@values) {$groups{$value}++}
foreach my $value (keys %groups) {print "$groups{$value} x $value\n"}
Wynik:
1 x 30
1 x 10
2 x 20
-
17. Data: 2010-05-17 14:23:09
Temat: Re: Wspolne i rozne elementy tablicy.
Od: Jacek <a...@o...pl>
Dnia Sun, 16 May 2010 06:38:13 -0700 (PDT), Marcin 'Qrczak' Kowalczyk
napisał(a):
> On May 16, 3:12 pm, Jacek <a...@o...pl> wrote:
> [...]
>> Ogolnie chodzi o wybranie z tego zbioru elemtow rownych i roznych i
>> umieszczenie ich w grupach.
>> Mam nadzieje, ze przyklad obrazowy pomoze;)
>>
>> Chyba jednak wszytko to bede musial zalawic Case i If...
>
> Po co kombinować z case i if rozpatrując poszczególne przypadki
> osobno, skoro problem jest trywialny w ogólnym przypadku?
>
> Na przykład w Perlu:
> my @values = (10, 20, 30, 20); # Przykład.
> my %groups = ();
> foreach my $value (@values) {$groups{$value}++}
> foreach my $value (keys %groups) {print "$groups{$value} x $value\n"}
>
> Wynik:
> 1 x 30
> 1 x 10
> 2 x 20
No dziekuje bardzo. Wyglada na to, ze rozwiazuje moj problem.
Ale wystapil kolejny... nie znam Perla.
Daloby sie to przerobic do VB?
-
18. Data: 2010-05-17 14:29:46
Temat: Re: Wspolne i rozne elementy tablicy.
Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
On 2010-05-17, Jacek <a...@o...pl> wrote:
> Dnia Sun, 16 May 2010 06:38:13 -0700 (PDT), Marcin 'Qrczak' Kowalczyk
> napisał(a):
>
>> On May 16, 3:12 pm, Jacek <a...@o...pl> wrote:
>> [...]
>>> Ogolnie chodzi o wybranie z tego zbioru elemtow rownych i roznych i
>>> umieszczenie ich w grupach.
>>> Mam nadzieje, ze przyklad obrazowy pomoze;)
>>>
>>> Chyba jednak wszytko to bede musial zalawic Case i If...
>>
>> Po co kombinować z case i if rozpatrując poszczególne przypadki
>> osobno, skoro problem jest trywialny w ogólnym przypadku?
>>
>> Na przykład w Perlu:
>> my @values = (10, 20, 30, 20); # Przykład.
>> my %groups = ();
>> foreach my $value (@values) {$groups{$value}++}
>> foreach my $value (keys %groups) {print "$groups{$value} x $value\n"}
>>
>> Wynik:
>> 1 x 30
>> 1 x 10
>> 2 x 20
>
> No dziekuje bardzo. Wyglada na to, ze rozwiazuje moj problem.
> Ale wystapil kolejny... nie znam Perla.
> Daloby sie to przerobic do VB?
Szukasz słowa kluczowego: tablica haszująca (hash map).
--
Secunia non olet.
Stanislaw Klekot