eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Zamknięta pętla
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2009-01-21 16:08:54
    Temat: Zamknięta pętla
    Od: Tomasz Kiełpiński <F...@p...onet.pl>

    Witam,

    Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to że
    googlać nie umiem, bo nie wierzę żeby podobny temat nie był poruszany :)

    Szukam algorytmu albo wręcz metody matematycznej (mam cały czas nieodparte
    wrażenie, że problem da się rozwiązać na poziomie pierwszej klasy liceum) na
    sprawdzenie zamkniętej pętli. Chodzi o jeden z elementów progamu
    rozwiązującego łamigłówki SlitherLink (znane również jako Fences lub
    Pokropek)

    Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym kwadraciku.
    Wymiary x,y określają położenie kwadracika na płaszczyźnie, natomiast w
    wartości zakodowane jest położenie kwadratu względem pętli (na zewnątrz lub
    wewnątrz) i stan każdego z jego boków (Jedna z trzech wartości: jest/nie
    ma/nie jest oznaczone)

    Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w kwadraciku na
    pozycji 1,1 spowoduje domknięcie pętli.

    Pozdrawiam,
    Kiełpiś


    --
    Brzdeśniało już; ślimonne prztowie Tomasz Kiełpiński
    Wyrło i warło się w gulbieży; a.k.a. "Kiełpiś"
    Zmimszałe ćwiły borogowie Odpowiadając prywatnie,
    I rcie grdypały z mrzerzy. usuń: FALSZYWY z adresu


  • 2. Data: 2009-01-21 16:13:13
    Temat: Re: Zamknięta pętla
    Od: Tomasz Kiełpiński <F...@p...onet.pl>

    'Twas brillig when Tomasz Kiełpiński wrote:
    > Witam,
    > Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to że
    > googlać nie umiem, bo nie wierzę żeby podobny temat nie był poruszany :)
    > Szukam algorytmu albo wręcz metody matematycznej (mam cały czas
    > nieodparte wrażenie, że problem da się rozwiązać na poziomie pierwszej
    > klasy liceum) na sprawdzenie zamkniętej pętli. Chodzi o jeden z
    > elementów progamu rozwiązującego łamigłówki SlitherLink (znane również
    > jako Fences lub Pokropek)
    > Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym
    > kwadraciku. Wymiary x,y określają położenie kwadracika na płaszczyźnie,
    > natomiast w wartości zakodowane jest położenie kwadratu względem pętli
    > (na zewnątrz lub wewnątrz) i stan każdego z jego boków (Jedna z trzech
    > wartości: jest/nie ma/nie jest oznaczone)
    > Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w kwadraciku
    > na pozycji 1,1 spowoduje domknięcie pętli.
    > Pozdrawiam,
    > Kiełpiś

    PS. Hobbystycznie, nie komercyjnie :)


    --
    Bzdrężyło. Szłapy maślizgajne Tomasz Kiełpiński
    Bujowierciły w gargazonach a.k.a. "Kiełpiś"
    Tubylerczykom spełły fajle, Odpowiadając prywatnie,
    Humpel wyświchnął ponad usuń: FALSZYWY z adresu


  • 3. Data: 2009-01-22 17:12:07
    Temat: Re: Zamknięta pętla
    Od: Maciej Piechotka <u...@g...com>

    Tomasz Kiełpiński <F...@p...onet.pl> writes:

    > Witam,
    >
    > Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to
    > że googlać nie umiem, bo nie wierzę żeby podobny temat nie był
    > poruszany :)
    >
    > Szukam algorytmu albo wręcz metody matematycznej (mam cały czas
    > nieodparte wrażenie, że problem da się rozwiązać na poziomie pierwszej
    > klasy liceum) na sprawdzenie zamkniętej pętli. Chodzi o jeden z
    > elementów progamu rozwiązującego łamigłówki SlitherLink (znane również
    > jako Fences lub Pokropek)
    >
    > Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym
    > kwadraciku. Wymiary x,y określają położenie kwadracika na
    > płaszczyźnie, natomiast w wartości zakodowane jest położenie kwadratu
    > względem pętli (na zewnątrz lub wewnątrz) i stan każdego z jego boków
    > (Jedna z trzech wartości: jest/nie ma/nie jest oznaczone)
    >
    > Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w
    > kwadraciku na pozycji 1,1 spowoduje domknięcie pętli.
    >
    > Pozdrawiam,
    > Kiełpiś

    Hmm. Czy nie dało by się potraktować tego jak grafu gdzie koszt
    przejścia przez nieoznaczoną krawędz jest duży (np. X*Y*1000) a koszt
    przejścia na przez zaznaczoną mały (np. 1)? Teraz szukasz optymalnej
    drogi dla każdych z par punktów (tzn. 4 punkty więc 6 dróg) i znajdujesz
    miminum. Jeśli wynosi ono X*Y*1000 (tzn przejście jest przez ten punkt)
    to nie ma takiej pętli. Jeśli jest mniejsza to taka pętla istnieje.

    Pozdrawiam

    PS. Piszę tak jak rozumiem problem - nie znam tej łamigłówki.
    --
    I've probably left my head... somewhere. Please wait untill I find it.
    Homepage (pl_PL): http://uzytkownik.jogger.pl/
    (GNU/)Linux User: #425935 (see http://counter.li.org/)


  • 4. Data: 2009-01-23 10:00:19
    Temat: Re: Zamknięta pętla
    Od: Tomasz Kiełpiński <F...@p...onet.pl>

    'Twas brillig when Maciej Piechotka wrote:
    > Tomasz Kiełpiński <F...@p...onet.pl> writes:
    >> Witam,
    >> Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to
    >> że googlać nie umiem, bo nie wierzę żeby podobny temat nie był
    >> poruszany :)
    >> Szukam algorytmu albo wręcz metody matematycznej (mam cały czas
    >> nieodparte wrażenie, że problem da się rozwiązać na poziomie pierwszej
    >> klasy liceum) na sprawdzenie zamkniętej pętli. Chodzi o jeden z
    >> elementów progamu rozwiązującego łamigłówki SlitherLink (znane również
    >> jako Fences lub Pokropek)
    >> Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym
    >> kwadraciku. Wymiary x,y określają położenie kwadracika na
    >> płaszczyźnie, natomiast w wartości zakodowane jest położenie kwadratu
    >> względem pętli (na zewnątrz lub wewnątrz) i stan każdego z jego boków
    >> (Jedna z trzech wartości: jest/nie ma/nie jest oznaczone)
    >> Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w
    >> kwadraciku na pozycji 1,1 spowoduje domknięcie pętli.
    >> Pozdrawiam,
    >> Kiełpiś
    > Hmm. Czy nie dało by się potraktować tego jak grafu gdzie koszt
    > przejścia przez nieoznaczoną krawędz jest duży (np. X*Y*1000) a koszt
    > przejścia na przez zaznaczoną mały (np. 1)? Teraz szukasz optymalnej
    > drogi dla każdych z par punktów (tzn. 4 punkty więc 6 dróg) i znajdujesz
    > miminum. Jeśli wynosi ono X*Y*1000 (tzn przejście jest przez ten punkt)
    > to nie ma takiej pętli. Jeśli jest mniejsza to taka pętla istnieje.
    > Pozdrawiam
    > PS. Piszę tak jak rozumiem problem - nie znam tej łamigłówki.

    Dzięki Maćku za zainteresowanie.

    Koncepcja brzmi dość ciekawie, ale (chyba?) nie spełnia moich oczekiwań.
    Może spróbuję narysować o co chodzi?

    Przykład I:
    .___. .___.
    | | | |
    |1,1|2,1|3,1|
    . .___. .
    | |
    |1,2 2,2 3,2|
    .___.___. .


    Przykład II:
    . .___.___.
    | |
    |1,1 2,1 3,1|
    . . . .
    | |
    |1,2 2,2 3,2|
    .___.___. .

    Z mojego punktu widzenia nie ma znaczenia czy brak linii wynika z ze stanu
    "BRAK" czy ze stanu "NIE OZNACZONY" danej krawędzi kwadratu. W przykładzie
    pierwszym umieszczenie linii na dole kwadratu 3,2 spowoduje zamknięcie pętli
    (przy czym wszystkie kwadraty z wyjątkiem 2,1 będą wewnątrz tej pętli). W
    drugim przypadku pętla pozostanie otwarta. Pętla nie rozgałęzia się
    natomiast może na tym etapie rozwiązywania urywać się. Ogólnie można
    powiedzieć, że chodzi o sprawdzenie czy istnieje jakakolwiek droga między
    dwoma punktami.

    Pozdrawiam,
    Kiełpiś

    --
    Bzdr


  • 5. Data: 2009-01-23 16:17:00
    Temat: Re: Zamknięta pętla
    Od: Maciej Piechotka <u...@g...com>

    Tomasz Kiełpiński <F...@p...onet.pl> writes:

    > 'Twas brillig when Maciej Piechotka wrote:
    >> Tomasz Kiełpiński <F...@p...onet.pl> writes:
    >>> Witam,
    >>> Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to
    >>> że googlać nie umiem, bo nie wierzę żeby podobny temat nie był
    >>> poruszany :)
    >>> Szukam algorytmu albo wręcz metody matematycznej (mam cały czas
    >>> nieodparte wrażenie, że problem da się rozwiązać na poziomie pierwszej
    >>> klasy liceum) na sprawdzenie zamkniętej pętli. Chodzi o jeden z
    >>> elementów progamu rozwiązującego łamigłówki SlitherLink (znane również
    >>> jako Fences lub Pokropek)
    >>> Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym
    >>> kwadraciku. Wymiary x,y określają położenie kwadracika na
    >>> płaszczyźnie, natomiast w wartości zakodowane jest położenie kwadratu
    >>> względem pętli (na zewnątrz lub wewnątrz) i stan każdego z jego boków
    >>> (Jedna z trzech wartości: jest/nie ma/nie jest oznaczone)
    >>> Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w
    >>> kwadraciku na pozycji 1,1 spowoduje domknięcie pętli.
    >>> Pozdrawiam,
    >>> Kiełpiś
    >> Hmm. Czy nie dało by się potraktować tego jak grafu gdzie koszt
    >> przejścia przez nieoznaczoną krawędz jest duży (np. X*Y*1000) a koszt
    >> przejścia na przez zaznaczoną mały (np. 1)? Teraz szukasz optymalnej
    >> drogi dla każdych z par punktów (tzn. 4 punkty więc 6 dróg) i znajdujesz
    >> miminum. Jeśli wynosi ono X*Y*1000 (tzn przejście jest przez ten punkt)
    >> to nie ma takiej pętli. Jeśli jest mniejsza to taka pętla istnieje.
    >> Pozdrawiam
    >> PS. Piszę tak jak rozumiem problem - nie znam tej łamigłówki.
    >
    > Dzięki Maćku za zainteresowanie.
    >
    > Koncepcja brzmi dość ciekawie, ale (chyba?) nie spełnia moich
    > oczekiwań. Może spróbuję narysować o co chodzi?
    >
    > Przykład I:
    > .___. .___.
    > | | | |
    > |1,1|2,1|3,1|
    > . .___. .
    > | |
    > |1,2 2,2 3,2|
    > .___.___. .
    >
    >
    > Przykład II:
    > . .___.___.
    > | |
    > |1,1 2,1 3,1|
    > . . . .
    > | |
    > |1,2 2,2 3,2|
    > .___.___. .
    >
    > Z mojego punktu widzenia nie ma znaczenia czy brak linii wynika z ze
    > stanu "BRAK" czy ze stanu "NIE OZNACZONY" danej krawędzi kwadratu. W
    > przykładzie pierwszym umieszczenie linii na dole kwadratu 3,2
    > spowoduje zamknięcie pętli (przy czym wszystkie kwadraty z wyjątkiem
    > 2,1 będą wewnątrz tej pętli). W drugim przypadku pętla pozostanie
    > otwarta. Pętla nie rozgałęzia się natomiast może na tym etapie
    > rozwiązywania urywać się. Ogólnie można powiedzieć, że chodzi o
    > sprawdzenie czy istnieje jakakolwiek droga między dwoma punktami.
    >
    > Pozdrawiam,
    > Kiełpiś

    To dobrze chyba zrozumiałem. Przejściu po linii daj koszt równy np. 1 a po
    braku X*Y*1000 (albo nie dawaj - to zapewne zależy od konkretnego
    algorytmu

    Jak masz taką sytłację:

    .__. .__.
    | | | |
    | | | |
    . .__. .
    | |
    | |
    .__.__. .

    I sprawdzasz dla dolnego kwadratu czy istnieje droga poza tą krawędzią i
    jaką ma długość (istnieje inna droga <=> jest pętla).

    Tutaj jest droga o długości 11 < 3*4*1000 = 12000 więc zamykamy pętle.

    . .__.__.
    | |
    | |
    . . . .
    | |
    | |
    .__.__. .

    Tutaj najkrótszą drogą jest 3*4*1000 (dokładnie przez 'nowo zaznaczone'
    pole [Albo - nie ma drogi]) więc nie zamyka to pętli.

    A algorytmów wyszukiwania drogi w grafie jest mnówtwo - choćby na
    wikipedii.

    Pozdrawiam

    PS. Brak rozgałęzień to wiedza czy wymóg? Jeśli wiedza to można iść po
    koleji zaznaczonymi krawędziami aż do końca. Jeśli wymóg to przypisz
    drogom z rozgałęzienia koszt 3*4*1000/uczyń nieprzechadzalnymi.
    --
    I've probably left my head... somewhere. Please wait untill I find it.
    Homepage (pl_PL): http://uzytkownik.jogger.pl/
    (GNU/)Linux User: #425935 (see http://counter.li.org/)


  • 6. Data: 2009-01-24 05:49:27
    Temat: Re: Zamknięta pętla
    Od: "bartekLTG" <b...@o...ciach.pl>

    Tomasz Kiełpiński wrote:
    > Witam,
    >
    > Przejrzałem archiwum grupy, pogooglałem, ale wszystko wskazuje na to
    > że googlać nie umiem, bo nie wierzę żeby podobny temat nie był
    > poruszany :)
    > Szukam algorytmu albo wręcz metody matematycznej (mam cały czas
    > nieodparte wrażenie, że problem da się rozwiązać na poziomie
    > pierwszej klasy liceum) na sprawdzenie zamkniętej pętli. Chodzi o
    > jeden z elementów progamu rozwiązującego łamigłówki SlitherLink
    > (znane również jako Fences lub Pokropek)
    >
    > Mam daną tablicę dwuwymiarową, zawierającą informacje o każdym
    > kwadraciku. Wymiary x,y określają położenie kwadracika na
    > płaszczyźnie, natomiast w wartości zakodowane jest położenie kwadratu
    > względem pętli (na zewnątrz lub wewnątrz) i stan każdego z jego boków
    > (Jedna z trzech wartości: jest/nie ma/nie jest oznaczone)
    >
    > Jak sprawdzić/policzyć czy np. narysowanie górnej krawędzi w
    > kwadraciku na pozycji 1,1 spowoduje domknięcie pętli.


    Punkty siatki sa weirzcholkami grafu, oznaczone na 'tak'
    kreski są krawedziemi grafu.

    Zalozmy, ze dorysowujesz krawedz miedzy wierzcholkami
    a i b ( (n,m) --- [(n+1,m) lub (n,m+1)] )

    Kiedy zamykami petle? Wtedy, gdy _przed_ dodaniem
    naszej krawedzi istnieje polaczenie miedzy a i b.

    Wystarczy wiec, ze sprawdzisz, czy istnieje polaczenie
    miedzy a i b. Jest to dosc czesto spotykane zagadnienie;)
    Algorytm nazywa sie 'przeszukiwanie drzewa w szerz'
    (Breadth-first search, w skrócie BFS) jest dobrze
    opisany w ksiezkach i sieci. Dlaczego 'w szerz' a nie
    'w glab'? ze wzgledu na pesymistyczna ilosc operacji.
    Jesli najkrotsza sciazka ma dlugosc L, to odwiedzisz
    nie wiecej niz max(4L^2,M) a M to liczba wierzcholkow
    do ktorych mozesz dojsc;)
    Algorytm zybszy i prostrzy w implementacji niz proponowana
    obok Dijkstra, potrzebujesz jedynie kolejki fifo, czyli
    zwyklej listy.


    Bieresz element z kolejki i wrzucasz do kolejki
    wszyskich sasiadow (wierzcholki, do ktorych masz bezposrednie
    polaczenie krawedzią 'tak'), przy okazji sprawdzajac,
    czy to nie jest nasz cel i czy nie byl 'odhaczony' (tych
    nie wrzucasz). Wrzucane wierzcholki zaznaczamy jako 'odhaczone'

    W pierwszym kroku wrzucasz do kolejki wierzcholek startowy.


    BTW, Mozna to jeszcze zbic (do 2L^/2) idac na zmiane jedno
    pietro z wierzcholka 'a' - jedno pietro z wierzcholka 'b'
    i czekac na spotkanie, ale algorytm robi sie ciut bardziej
    skomplikowany.


    pzodrawiam
    bartekltg


  • 7. Data: 2009-01-29 10:42:58
    Temat: Re: Zamknięta pętla
    Od: Tomasz Kiełpiński <F...@p...onet.pl>

    'Twas brillig when bartekLTG wrote:
    [...]
    > Punkty siatki sa weirzcholkami grafu, oznaczone na 'tak'
    > kreski są krawedziemi grafu.
    > Zalozmy, ze dorysowujesz krawedz miedzy wierzcholkami
    > a i b ( (n,m) --- [(n+1,m) lub (n,m+1)] )
    > Kiedy zamykami petle? Wtedy, gdy _przed_ dodaniem
    > naszej krawedzi istnieje polaczenie miedzy a i b.
    > Wystarczy wiec, ze sprawdzisz, czy istnieje polaczenie
    > miedzy a i b. Jest to dosc czesto spotykane zagadnienie;)
    > Algorytm nazywa sie 'przeszukiwanie drzewa w szerz'
    > (Breadth-first search, w skrócie BFS) jest dobrze
    > opisany w ksiezkach i sieci. Dlaczego 'w szerz' a nie
    > 'w glab'? ze wzgledu na pesymistyczna ilosc operacji.
    > Jesli najkrotsza sciazka ma dlugosc L, to odwiedzisz
    > nie wiecej niz max(4L^2,M) a M to liczba wierzcholkow
    > do ktorych mozesz dojsc;)
    > Algorytm zybszy i prostrzy w implementacji niz proponowana
    > obok Dijkstra, potrzebujesz jedynie kolejki fifo, czyli
    > zwyklej listy.
    > Bieresz element z kolejki i wrzucasz do kolejki
    > wszyskich sasiadow (wierzcholki, do ktorych masz bezposrednie
    > polaczenie krawedzią 'tak'), przy okazji sprawdzajac,
    > czy to nie jest nasz cel i czy nie byl 'odhaczony' (tych
    > nie wrzucasz). Wrzucane wierzcholki zaznaczamy jako 'odhaczone'
    > W pierwszym kroku wrzucasz do kolejki wierzcholek startowy.
    > BTW, Mozna to jeszcze zbic (do 2L^/2) idac na zmiane jedno
    > pietro z wierzcholka 'a' - jedno pietro z wierzcholka 'b'
    > i czekac na spotkanie, ale algorytm robi sie ciut bardziej
    > skomplikowany.
    > pzodrawiam
    > bartekltg

    Bartku, Maćku,

    Dzięki za cenne uwagi. Poczytałem o BFS (a przy okazji innych algorytmach
    związanych z grafami) i przemyślałem wasze propozycje. W efekcie końcowym
    zdecydowałem się na uproszczone (ze względu na zasady łamigłówki)
    rozwiązanie. Poniżej pseudo algorytm:

    1.Ustaw koordynaty wierzchołka A jako początkowe, wierzchołka B jako
    końcowe. Wyklucz odcinek AB
    2.PETLA:
    - sprawdź wszystkie narysowane odcinki z początkowego wierzchołka.
    - wybierz pierwszy niewykluczony
    - jeśli nie ma niewykluczonego odcinka:
    - jeśli koordynaty bieżącego wierzchołka i wierzchołka B są zgodne to
    PETLA ZAMKNIĘTA,
    jeśli nie to PETLA OTWARTA. Wyjdź z funkcji.
    - w przeciwnym razie:
    - przejdź do nowego wierzchołka
    - wyklucz pokonany właśnie odcinek
    - ustaw nowe koordynaty początkowe
    - wróć na początek pętli

    Pozdrawiam,
    Kiełpiś




    --
    Był czas mrutszławy, ślibkie skrątwy Tomasz Kiełpiński
    Na wałzach wiercząc świrypły, a.k.a. "Kiełpiś"
    A mizgłe do cna borogłątwy Odpowiadając prywatnie,
    I zdomne świszczury zgrzypły. usuń: FALSZYWY z adresu

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: