eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming"Najbardziej imponujący kod, jaki widziałem"Re: "Najbardziej imponujący kod, jaki widziałem"
  • X-Received: by 2002:ac8:25b1:: with SMTP id e46mr2069724qte.36.1565081704145; Tue, 06
    Aug 2019 01:55:04 -0700 (PDT)
    X-Received: by 2002:ac8:25b1:: with SMTP id e46mr2069724qte.36.1565081704145; Tue, 06
    Aug 2019 01:55:04 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.tel
    efonica.de!telefonica.de!weretis.net!feeder7.news.weretis.net!news.mixmin.net!p
    roxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!b26no5870406qtq.0!news-o
    ut.google.com!a5ni1344qtd.0!nntp.google.com!b26no5870398qtq.0!postnews.google.c
    om!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 6 Aug 2019 01:55:03 -0700 (PDT)
    In-Reply-To: <e...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=194.9.245.29;
    posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
    NNTP-Posting-Host: 194.9.245.29
    References: <e...@g...com>
    <1...@g...com>
    <c...@g...com>
    <0...@g...com>
    <b...@g...com>
    <d...@g...com>
    <2...@g...com>
    <c...@g...com>
    <b...@g...com>
    <1...@g...com>
    <a...@g...com>
    <e...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <c...@g...com>
    Subject: Re: "Najbardziej imponujący kod, jaki widziałem"
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Tue, 06 Aug 2019 08:55:04 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:213755
    [ ukryj nagłówki ]

    > > Prosta sprawa - zmodyfikuj rozwiązanie w Mathematice tak, żeby koszt zamiany
    elementu wynosił 2 a nie 1.
    >
    > Pytanie jest fair i odpowiedź (również fair) jest taka: sam sobie policz.

    OK, żeby nie było, że jestem nieuprzejmy, i dla własnej zabawy, zrobiłem mały
    research w tej sprawie.
    Jest taka fajna funkcja:

    https://reference.wolfram.com/language/ref/SequenceA
    lignment.html

    Ta funkcja rozpisuje różnice między sekwencjami, z czego można wyciągnąć poszczególne
    operacje (usunięcie, wstawienie, zamiana). Jeżeli dobrze zrozumiałem ćwiczenie, to
    rozwiązeniem może być takie coś:

    myDistance[s1_, s2_] := Total[
    Min[#] + Max[#] & /@
    Cases[SequenceAlignment[s1, s2], a_List :> StringLength /@ a]
    ]

    Pozwoliłem sobie użyć skróconych (idiomatycznych) zapisów na podstawowe operacje
    mapowania i lambdy - skoro w innych językach są śmieszne znaczki, to ja też
    skorzystam.

    Wyrażenie Min+Max załatwia podwójne zliczenie zamian w porównaniu do
    wstawień/usunięć. Pełne wyrażenie dla dowolnych wag to:

    replacementCost*Min[#] + deletionCost*(Max[#] - Min[#])

    gdzie # to anonimowa para {del, ins}, gdzie del to ilość znaków do usunięcia a ins to
    ilość znaków do wstawienia; jeśli obie są niezerowe, to znaczy, że jest zastąpienie,
    więc np. para {3,5} oznacza, że są 3 znaki do zastąpienia i 2 do
    usunięcia/wstawienia. Wszystkie takie wartości są sumowane.
    Czy to jest prawidłowy sposób liczenia - nie wiem, ale tak to zrozumiałem.

    Czyli nadal nie wyszło jakoś dramatycznie dużo tego kodu, prawda?

    Nadal jednak szukałbym gotowych implementacji tutaj (choćby po to, żeby skorzystać z
    optymalizacji, które ktoś zrobił za mnie):

    https://reference.wolfram.com/language/guide/Distanc
    eAndSimilarityMeasures.html

    I właśnie na tym polega użyteczność tego produktu.

    --
    Maciej Sobczak * http://www.inspirel.com

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: