Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Perl tablice

24 views
Skip to first unread message

Anonim Anonimowy

unread,
Dec 23, 2012, 2:42:20 PM12/23/12
to
Witam, czy da się w szybki i wygodny sposób w perlu jakoś określić tablice w ten sposób, aby podać jej maksymalną wielkość, a w momencie gdy dodaje do niej element i jest pełna to żeby nastąpiło przesunięcie elementów w prawo, skasowanie ostatniego i zwolnienie miejsca dla pierwszego (dodanego).

Stachu 'Dozzie' K.

unread,
Dec 23, 2012, 3:30:16 PM12/23/12
to
On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
> Witam, czy da si� w szybki i wygodny spos�b w perlu jako� okre�li� tablice w ten spos�b, aby poda� jej maksymaln� wielko��, a w momencie gdy dodaje do niej element i jest pe�na to �eby nast�pi�o przesuni�cie element�w w prawo, skasowanie ostatniego i zwolnienie miejsca dla pierwszego (dodanego).

Znak zapytania ko�czy pytanie.

To, co ty chcesz, przypomina kolejk� FIFO. Nie widzia�em jeszcze j�zyka
og�lnego przeznaczenia, kt�ry ma to wbudowane (chyba �e w bibliotece
standardowej). U�yj CPAN albo stw�rz sobie w�asny modu� na podstawie
Tie::Array.

--
Secunia non olet.
Stanislaw Klekot

Andrzej Adam Filip

unread,
Dec 23, 2012, 3:35:04 PM12/23/12
to
Anonim Anonimowy <amkrank...@gmail.com> pisze:
Popatrz na "perldoc -f tie" fragment TIEARRAY.
Można zdefiniować klasę/pakiet "udające" tablice.

To powyżej nie jest specjalnie pomocne dla "średnio zaawansowanych"
ale powinno dostarczyć słów kluczowych do szukania bardziej
"łopatologicznych" wersji.

Anonim Anonimowy

unread,
Dec 23, 2012, 4:22:15 PM12/23/12
to
W dniu niedziela, 23 grudnia 2012 21:30:16 UTC+1 użytkownik Stachu 'Dozzie' K. napisał:
> On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
>
> > Witam, czy da się w szybki i wygodny sposób w perlu jakoś określić tablice w ten sposób, aby podać jej maksymalną wielkość, a w momencie gdy dodaje do niej element i jest pełna to żeby nastąpiło przesunięcie elementów w prawo, skasowanie ostatniego i zwolnienie miejsca dla pierwszego (dodanego).
>
>
>
> Znak zapytania kończy pytanie.
>
>
>
> To, co ty chcesz, przypomina kolejkę FIFO. Nie widziałem jeszcze języka
>
> ogólnego przeznaczenia, który ma to wbudowane (chyba że w bibliotece
>
> standardowej). Użyj CPAN albo stwórz sobie własny moduł na podstawie
>
> Tie::Array.
>
>
>
> --
>
> Secunia non olet.
>
> Stanislaw Klekot

Nie, FIFO spełnia zupełnie inną rolę, nie chce, aby pierwszy element na wejściu stawał się pierwszym na wyjściu bo to by nie miało sensu. Problem rozwiązałem w zupełnie inny i szybki sposób korzystając z zakresów, dodaje element na początku, tworzy mi się tablica 101 elementowa, a potem sam robie z niej 100 elementową [0..99].

Pozdrawiam.

Stachu 'Dozzie' K.

unread,
Dec 23, 2012, 6:04:16 PM12/23/12
to
On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
> W dniu niedziela, 23 grudnia 2012 21:30:16 UTC+1 u�ytkownik Stachu 'Dozzie' K. napisa�:
>> On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
>>
>> > Witam, czy da si� w szybki i wygodny spos�b w perlu jako� okre�li� tablice w ten spos�b, aby poda� jej maksymaln� wielko��, a w momencie gdy dodaje do niej element i jest pe�na to �eby nast�pi�o przesuni�cie element�w w prawo, skasowanie ostatniego i zwolnienie miejsca dla pierwszego (dodanego).
>>
>>
>>
>> Znak zapytania ko�czy pytanie.
>>
>>
>>
>> To, co ty chcesz, przypomina kolejk� FIFO. Nie widzia�em jeszcze j�zyka
>>
>> og�lnego przeznaczenia, kt�ry ma to wbudowane (chyba �e w bibliotece
>>
>> standardowej). U�yj CPAN albo stw�rz sobie w�asny modu� na podstawie
>>
>> Tie::Array.

> Nie, FIFO spe�nia zupe�nie inn� rol�, nie chce, aby pierwszy element
> na wej�ciu stawa� si� pierwszym na wyj�ciu bo to by nie mia�o sensu.
> Problem rozwi�za�em w zupe�nie inny i szybki spos�b korzystaj�c
> z zakres�w, dodaje element na pocz�tku, tworzy mi si� tablica 101
> elementowa, a potem sam robie z niej 100 elementowďż˝ [0..99].

A teraz opisz, w jaki spos�b si� r�ni twoje rozwi�zanie od FIFO.

I wyja�nij, czemu uwa�asz przepisywanie za ka�dym razem wszystkich stu
element�w (i to dwukrotnie!) za szybkie.

or...@pwr.wroc.pl

unread,
Dec 23, 2012, 6:20:13 PM12/23/12
to
On 2012-12-23, Stachu 'Dozzie' K. <doz...@go.eat.some.screws.spammer.invalid> wrote:
>> Nie, FIFO spełnia zupełnie inną rolę, nie chce, aby pierwszy element
>> na wejściu stawał się pierwszym na wyjściu bo to by nie miało sensu.
>> Problem rozwiązałem w zupełnie inny i szybki sposób korzystając
>> z zakresów, dodaje element na początku, tworzy mi się tablica 101
>> elementowa, a potem sam robie z niej 100 elementową [0..99].
>
> A teraz opisz, w jaki sposób się różni twoje rozwiązanie od FIFO.

AFAIR FIFO ma dwie operacje - dodawanie na koniec i pobieranie z
początku. Dostępu do dowolnego elementu w czasie stałym nie gwarantuje.
Co więcej autor nie mówi nic o wyjmowaniu elementów.

Taką implementację łatwo stworzyć - wystarczy trzymać indeks początku,
wstawiając element obniżać go o jeden i liczyć modulo wielkość
"kolejki", czyli w tym wypadku 100.

--
Pozdrawiam
orcus

Anonim Anonimowy

unread,
Dec 23, 2012, 7:00:28 PM12/23/12
to
W dniu poniedziałek, 24 grudnia 2012 00:04:16 UTC+1 użytkownik Stachu 'Dozzie' K. napisał:
> On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
>
> > W dniu niedziela, 23 grudnia 2012 21:30:16 UTC+1 użytkownik Stachu 'Dozzie' K. napisał:
>
> >> On 2012-12-23, Anonim Anonimowy <amkrank...@gmail.com> wrote:
>
> >>
>
> >> > Witam, czy da się w szybki i wygodny sposób w perlu jakoś określić tablice w ten sposób, aby podać jej maksymalną wielkość, a w momencie gdy dodaje do niej element i jest pełna to żeby nastąpiło przesunięcie elementów w prawo, skasowanie ostatniego i zwolnienie miejsca dla pierwszego (dodanego).
>
> >>
>
> >>
>
> >>
>
> >> Znak zapytania kończy pytanie.
>
> >>
>
> >>
>
> >>
>
> >> To, co ty chcesz, przypomina kolejkę FIFO. Nie widziałem jeszcze języka
>
> >>
>
> >> ogólnego przeznaczenia, który ma to wbudowane (chyba że w bibliotece
>
> >>
>
> >> standardowej). Użyj CPAN albo stwórz sobie własny moduł na podstawie
>
> >>
>
> >> Tie::Array.
>
>
>
> > Nie, FIFO spełnia zupełnie inną rolę, nie chce, aby pierwszy element
>
> > na wejściu stawał się pierwszym na wyjściu bo to by nie miało sensu.
>
> > Problem rozwiązałem w zupełnie inny i szybki sposób korzystając
>
> > z zakresów, dodaje element na początku, tworzy mi się tablica 101
>
> > elementowa, a potem sam robie z niej 100 elementową [0..99].
>
>
>
> A teraz opisz, w jaki sposób się różni twoje rozwiązanie od FIFO.
>
>
>
> I wyjaśnij, czemu uważasz przepisywanie za każdym razem wszystkich stu
>
> elementów (i to dwukrotnie!) za szybkie.
>
>
>
> --
>
> Secunia non olet.
>
> Stanislaw Klekot

Ty zakładasz, że ja chcę w pewien sposób kolejkować odczytywane elementy, a mi zależy na tablicy którą będę mógł odczytać w dowolny sposób, np. środkowy element w czasie rzeczywistym, zapytałem ogólnie, a nie do konkretnego zastosowania. Po drugie jakie jakie dwukrotne przepisywanie?! Matematyka się kłania...
Załóżmy, że mam tablice i wykonam takie operacje:
@array = (1..10);
@array = @array[0..3];

Gdzie tu dwukrotne przepisanie? Co więcej głowy sobie uciąć nie dam, że perl nie jest wyczulony na tego typu operacje i nie przepisze danych na zupełnie nowe adresy tylko po prostu skróci tablice zamiast całą przepisywać. Moja tablica będzie po prostu z czasem zapełniana elementami, a mi zależy na tym, żeby tych elementów nigdy nie było więcej niż 100, dodanie nowego elementu nie wiąże się z tym, że na pewno w tym samym czasie chce odczytać tablice...

Stachu 'Dozzie' K.

unread,
Dec 23, 2012, 7:39:48 PM12/23/12
to
On 2012-12-24, Anonim Anonimowy <amkrank...@gmail.com> wrote:
[...]
>> A teraz opisz, w jaki spos�b si� r�ni twoje rozwi�zanie od FIFO.
>>
>> I wyja�nij, czemu uwa�asz przepisywanie za ka�dym razem wszystkich stu
>> element�w (i to dwukrotnie!) za szybkie.

> Ty zak�adasz, �e ja chc� w pewien spos�b kolejkowa� odczytywane elementy, a mi zale�y na tablicy kt�r� b�d� m�g� odczyta� w dowolny spos�b, np. �rodkowy element w czasie rzeczywistym, zapyta�em og�lnie, a nie do konkretnego zastosowania.

Bo wiesz, FIFO o sta�ym maksymalnym rozmiarze si� nie da zrobi� na
tablicy. Tylko cicho o tym, bo jak si� m�j kod o tym dowie, to
przestanie dzia�a�.

A ten "czas rzeczywisty", m�j drogi, to si� nazywa czasem sta�ym
("O(1)").

> Po drugie jakie jakie dwukrotne przepisywanie?! Matematyka si� k�ania...
> Za��my, �e mam tablice i wykonam takie operacje:
> @array = (1..10);
> @array = @array[0..3];
>
> Gdzie tu dwukrotne przepisanie?

A jak dok�adasz element na pocz�tku tablicy, jeszcze przed tym kodem, to
niby co siďż˝ robi? Hyc, i system operacyjny alokuje miejsce przed
tablic�? W garbate anio�ki mo�e wierzysz?

> Co wi�cej g�owy sobie uci�� nie dam, �e perl nie jest wyczulony na tego typu operacje i nie przepisze danych na zupe�nie nowe adresy tylko po prostu skr�ci tablice zamiast ca�� przepisywa�.

Tego by si� mo�na spodziewa� po pop(), a nie po przypisaniu z zakresem.
Nie za du�o ty wymagasz od optymalizatora, kt�ry ma by� przede wszystkim
szybki, a nie dawaďż˝ szybki kod?

> Moja tablica b�dzie po prostu z czasem zape�niana elementami, a mi
> zale�y na tym, �eby tych element�w nigdy nie by�o wi�cej ni� 100,
> dodanie nowego elementu nie wi��e si� z tym, �e na pewno w tym samym
> czasie chce odczytaďż˝ tablice...

To po prostu ignoruj dopisanie wszystkiego, co pr�buje wle�� do
zape�nionej tablicy. Chyba �e znowu spieprzy�e� spraw� nieprecyzyjnie
opisuj�c oczekiwany skutek.

Anonim Anonimowy

unread,
Dec 23, 2012, 8:09:00 PM12/23/12
to
W dniu poniedziałek, 24 grudnia 2012 01:39:48 UTC+1 użytkownik Stachu 'Dozzie' K. napisał:
> On 2012-12-24, Anonim Anonimowy <amkrank...@gmail.com> wrote:
>
> [...]
>
> >> A teraz opisz, w jaki sposób się różni twoje rozwiązanie od FIFO.
>
> >>
>
> >> I wyjaśnij, czemu uważasz przepisywanie za każdym razem wszystkich stu
>
> >> elementów (i to dwukrotnie!) za szybkie.
>
>
>
> > Ty zakładasz, że ja chcę w pewien sposób kolejkować odczytywane elementy, a mi zależy na tablicy którą będę mógł odczytać w dowolny sposób, np. środkowy element w czasie rzeczywistym, zapytałem ogólnie, a nie do konkretnego zastosowania.
>
>
>
> Bo wiesz, FIFO o stałym maksymalnym rozmiarze się nie da zrobić na
>
> tablicy. Tylko cicho o tym, bo jak się mój kod o tym dowie, to
>
> przestanie działać.
>
>
>
> A ten "czas rzeczywisty", mój drogi, to się nazywa czasem stałym
>
> ("O(1)").
>
>
>
> > Po drugie jakie jakie dwukrotne przepisywanie?! Matematyka się kłania...
>
> > Załóżmy, że mam tablice i wykonam takie operacje:
>
> > @array = (1..10);
>
> > @array = @array[0..3];
>
> >
>
> > Gdzie tu dwukrotne przepisanie?
>
>
>
> A jak dokładasz element na początku tablicy, jeszcze przed tym kodem, to
>
> niby co się robi? Hyc, i system operacyjny alokuje miejsce przed
>
> tablicą? W garbate aniołki może wierzysz?
>
>
>
> > Co więcej głowy sobie uciąć nie dam, że perl nie jest wyczulony na tego typu operacje i nie przepisze danych na zupełnie nowe adresy tylko po prostu skróci tablice zamiast całą przepisywać.
>
>
>
> Tego by się można spodziewać po pop(), a nie po przypisaniu z zakresem.
>
> Nie za dużo ty wymagasz od optymalizatora, który ma być przede wszystkim
>
> szybki, a nie dawać szybki kod?
>
>
>
> > Moja tablica będzie po prostu z czasem zapełniana elementami, a mi
>
> > zależy na tym, żeby tych elementów nigdy nie było więcej niż 100,
>
> > dodanie nowego elementu nie wiąże się z tym, że na pewno w tym samym
>
> > czasie chce odczytać tablice...
>
>
>
> To po prostu ignoruj dopisanie wszystkiego, co próbuje wleźć do
>
> zapełnionej tablicy. Chyba że znowu spieprzyłeś sprawę nieprecyzyjnie
>
> opisując oczekiwany skutek.
>
>
>
> --
>
> Secunia non olet.
>
> Stanislaw Klekot

Moglibyśmy tak jeszcze do rana wymieniać się poglądami... Tak czy owak operacja na 100 elementach nie jest godna jakiejś optymalizacji bo w tym przypadku nawet się nie odczuje różnicy, a posłuży za to fakt, że kod jest krótki i nie trzeba ładować nowych modułów.

Pozdrawiam.
0 new messages