eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming"Najbardziej imponujący kod, jaki widziałem" › Re: "Najbardziej imponujący kod, jaki widziałem"
  • Data: 2019-08-06 10:55:03
    Temat: Re: "Najbardziej imponujący kod, jaki widziałem"
    Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: