eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingpoprawność algorytmu › Re: poprawność algorytmu
  • X-Received: by 10.140.41.104 with SMTP id y95mr631416qgy.7.1427895086585; Wed, 01 Apr
    2015 06:31:26 -0700 (PDT)
    X-Received: by 10.140.41.104 with SMTP id y95mr631416qgy.7.1427895086585; Wed, 01 Apr
    2015 06:31:26 -0700 (PDT)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin2!goblin.stu.neva.ru!newsfeed.xs4all.nl!newsfeed3a.news.xs4all.n
    l!xs4all!newspeer1.nac.net!border2.nntp.dca1.giganews.com!border1.nntp.dca1.gig
    anews.com!nntp.giganews.com!l13no281066iga.0!news-out.google.com!q90ni3qgd.1!nn
    tp.google.com!q107no1087677qgd.1!postnews.google.com!glegroupsg2000goo.googlegr
    oups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Wed, 1 Apr 2015 06:31:26 -0700 (PDT)
    In-Reply-To: <b...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=153.19.246.208;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 153.19.246.208
    References: <4...@g...com>
    <d...@g...com>
    <meti4e$osd$1@srv.chmurka.net>
    <f...@g...com>
    <mevfpd$gpa$1@srv.chmurka.net>
    <e...@g...com>
    <mf1tnf$d48$1@srv.chmurka.net>
    <d...@g...com>
    <e...@g...com>
    <f...@g...com>
    <b...@g...com>
    <4...@g...com>
    <f...@g...com>
    <8...@g...com>
    <b...@g...com>
    <c...@g...com>
    <2...@g...com>
    <b...@g...com>
    <6...@g...com>
    <b...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <7...@g...com>
    Subject: Re: poprawność algorytmu
    From: g...@g...com
    Injection-Date: Wed, 01 Apr 2015 13:31:26 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Lines: 144
    Xref: news-archive.icm.edu.pl pl.comp.programming:207761
    [ ukryj nagłówki ]

    W dniu środa, 1 kwietnia 2015 11:57:13 UTC+2 użytkownik M.M. napisał:

    > > > > "Najlepiej jak to możliwe" -- to też nieprecyzyjne określenie.
    > > > > Można je rozumieć jako "najlepiej jak komputer potrafi", albo
    > > > > "najlepiej jak programista potrafi". To ostatnie jest zresztą
    > > > > zazwyczaj twardym limitem, chyba że klient znajdzie lepszego
    > > > > programistę
    > > > No oczywiście że jest nieprecyzyjne. Jest nieprecyzyjne jak każde
    > > > generalizowanie.
    > >
    > > Generalizowanie to tyle, co uogólnianie, czyli przechodzenie
    > > od przypadku konkretniejszego do ogólniejszego. Stąd, że Twoje
    > > generalizowanie jest nieprecyzyjne, nie wynika, że każde generalizowanie
    > > jest nieprecyzyjne.
    > Poczekaj bo się robią jakieś jaja z tej rozmowy:) Wątek ten dotyczy
    > (nie)przydatności formalnego dowodu na poprawność programu w
    > praktyce programistycznej/biznesowej. Potem ja wtrąciłem, że
    > wymagania są różne, np. klient chce najlepszy program. Jak słuszne
    > zauważyłeś, nie precyzowałem co oznacza najlepszy. Piłem do tego,
    > że jeśli już tak ściśle i formalnie chcemy dowodzić, to należało
    > by również dowieść, że program istotnie jest najlepszy. Więc moje
    > generalizowanie obejmuje zbiór kryteriów według których
    > w praktyce programistycznej ocenia się programy. Co widzisz
    > nieprecyzyjnego w takim generalizowaniu?

    To Ty (nie ja) napisałeś, cytuję "[określenie >najlepiej<] jest
    nieprecyzyjne jak każde generalizowanie", stwierdzając
    tym samym, że każde generalizowanie jest nieprecyzyjne.

    > > Na przykład dodanie funkcji porównującej jako parametru
    > > dla funkcji "sort" jest generalizowaniem, a jest piekielnie
    > > precyzyjne.
    > Dlaczego można precyzyjne generalizować po tejże funkcji, a po
    > spotykanych kryteriach oceny programu nie można?

    Nie wiem. To Ty twierdzisz, że nie można precyzyjnie generalizować
    (chyba że coś źle zrozumiałem, bo teraz wydajesz się sugerować,
    że jednak można?)

    > > > Przypuszczasz, że chodziło mi o dowód formalny (na podstawie kodu
    > > > źródłowego) na istnienie lepszego programu na rynku? ;-)
    > >
    > > Problem polega na tym, że nie wiem, o co Ci chodziło, bo wyraziłeś
    > > się dość nieprecyzyjnie
    > Myślałem że jak tylko odrzucisz przypadki nonsensowne, to będzie
    > precyzyjnie.

    Jak odrzuciłem przypadki nonsensowne, to wyszedł mi zbiór pusty.

    > > W pewnym zakresie może tak. Ale znajdzie się również taki, w którym
    > > eksperci będą między sobą dywagować, czy Słomczyński, czy Barańczak
    > TO też da się rozwiązać, można uznać za takie same, jeśli eksperci od
    > razu nie są jednoznaczni - ale nie ma sensu brnąć dalej.

    I w ten sposób może się okazać, że nie zabrniemy za daleko.

    > > Też nie wiem. Prawdopodobnie nie można, tym bardziej, że
    > > nie umiemy nawet uściślić, co to znaczy "lepiej tłumaczyć tekst"
    > No więc właśnie. Co z tego, że nawet jeśli są jakieś znikome
    > szanse na udowodnienie poprawności programu, to zwykle nie ma
    > żadnych szans, czy program, choć jest poprawny, to realizuje
    > zamierzony cel.

    Pytanie, które chcemy sobie zadać, brzmi: w jakim zakresie
    istnieje potrzeba udowodnienia tego, że program zachowuje
    określone niezmienniki? Podane przez Ciebie przykłady całkowicie
    chybiają. Koledzy podają przykłady np. sterowników hamulców
    w samochodzie. Inny prosty przykład, to udowodnić, że urządzenie
    odpowiedzialne za zmianę świateł na skrzyżowaniu nie dopuści
    nigdy do tego, że dla obu kierunków skrzyżowania nie będzie
    się paliło jednocześnie zielone światło.

    > > Ale niestety Twoje użycie słowa "najlepszy" jest nieprecyzyjne,
    > > bo "najlepszy" może być również w sensie "maintainability" -- że
    > > ma najlepsze komentarze, jest najłatwiej rozszerzalny itd.
    > Oczywiście że może. Przecież to jest bardzo często spotykany
    > wymóg. Ja np. mam sprzeczne wymogi: program ma być wydajny, ma
    > obsługiwać bardzo dużą ilość użytkowników na tanim sprzęcie i
    > jednocześnie ma być bardzo podatny na zmiany, żeby szybko go
    > rozbudowywać.

    A gdzie jest ta sprzeczność?

    > > > > Nieprawda. To, jak się coś skonkretyzuje (oraz co się skonkretyzuje),
    > > > > ma kluczowe znaczenie dla łatwości/trudności przeprowadzenia dowodu.
    > > > Może czegoś nie wiem, dla jakich kryteriów dowód będzie łatwy w
    > > > przeprowadzeniu?
    > >
    > > Nie rozumiem o co pytasz. W ogólności zależy to od przypadku.
    > Pytam o to, jakie miałeś na myśli przypadki, gdy pisałeś, że
    > może dowód być łatwy.

    Na przykład wspominany przeze mnie przypadek, że funkcja append
    jest operatorem łącznym.

    > > > > owo polecenie. Deadlocka otrzymamy w każdym przypadku, gdy którykolwiek
    > > > > z wątków w danej jednostce uruchomieniowej nie wywoła polecenia
    __syncthreads().
    > > > Nigdy nie używałem tego polecenia. Czy jest konieczne używanie?
    > > > Co ono usprawnia?
    > >
    > > Umożliwia synchronizację wątków przed dostępem do pamięci.
    > Po to jest prawie każda synchronizacja, a jeśli słowo pamięć
    > zmienimy na zasób, to chyba dosłownie każda.

    No widzisz.

    > > Jeśli Cię to bardziej interesuje, polecam kurs z "Heterogenous Parallel
    > > Programming" na Courserze albo książkę "CUDA w przykładach" (wyd. Helion)
    > Nie mam aż tyle czasu, myślalem że rzucisz kilka zalet.

    Zalet synchronizacji wątków przed dostępem do pamięci?

    > > Nie. Każdy wątek może bezpiecznie wywołać __syncthreads i nie ma potrzeby
    > > zabezpieczania jej semaforami,
    > Nie pisałem że trzeba ją zabezpieczać semaformai, tylko że trzeba ją
    > traktować jakby była zabezpieczona według takiego schematu.

    I co to nam daje, w sensie udowodnienia, że program nie ma deadlocka?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: