![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Interesuje mnie, czy jest gotowy algorytm (na wzór Longest common substring), który operowałby bezpośrednio na tablicach z nieposortowanymi elementami? Przykład dużo bardziej rozjaśni, czego poszukuję:
Wejście:
Wyjście
Próbowałem to wykonać za pomocą array_diff i rekurencji, ale dostawałem nieunikalne wyniki i nie zawsze poprawne. Ten post edytował sabat24 11.03.2015, 09:52:07 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Po poprawce zwraca także zbiór niepoprawny:
Ten post edytował sabat24 11.03.2015, 10:32:56 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Co dokładnie ma być na wyjściu, bo twój przykład jest dość niejasny, i można go interpretować na kilka sposobów
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Każda "podtablica" jest swoistym podzbiorem, stanowiącym pewną całość. Czyli mamy zbiory (prefix 'bo_' pominę, bo jest nieistotny i tak, a mogą być tam inne wartości):
a = {5, 1} b = {1, 5, 17} c = {17, 18} d = {19, 1, 5, 17} Zbiór d zawiera w sobie całkowicie zbiór a oraz b, zatem do wyjścia powinien zostać wybrany zbiór d. Zbiór c nie zawiera się w całości nigdzie, więc także powinien być dodany do wyniku. Kolejność w podzbiorach nie ma znaczenia. Tzn. {5, 1} jest równe {1, 5}. Ten post edytował sabat24 11.03.2015, 10:42:31 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
czyli na wyjściu powinien być zbiór który nie zawiera się w żadnym innym zbiorze oraz zbiór który zawiera maksymalną ilość podzbiorów zawierających się w całości?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Zgadza się. Oczywiście zarówno zbiorów, które nie zawierają się w innych zbiorach w całości może być kilka, jak i może być kilka różnych zbiorów, które posiadają "w sobie" maksymalną liczbę podzbiorów. Np.
wejście: a = {1, 2, 3} b = {2, 3, 5} c = {1, 2, 3, 4} b = {2, 3, 4, 5} e = {5, 6} f = {5, 7} powinno dać wyjście: {1, 2, 3, 4}, {2, 3, 4, 5}, {5, 6}, {5, 7} |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję. Wygląda bardziej przyzwoicie niż mój kod. Jedno pytanie. Przy powyższych danych wejściowych daje mi następujący rezultat:
$maxArrays zawiera zbiór c, ale posiada tylko wartość 2 $none jest w porządku, ale ląduje tam zbiór b, który powinien być chyba w $maxArrays Generalnie dla mnie nie ma to znaczenia, bo i tak sobie mogę pobrać orginalne dane ze zbioru c i też nie muszę mieć podziału na dwie zmienne, więc nieważne gdzie finalnie wyląduje b. Pytam z ciekawości, czy taki jest zamierzony efekt? |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie bo B nie zawiera się w żadnym zbiorze w całości,
a w maxArrays masz tylko klucze zbiorów które mają maksymalną ilość zbiorów w których dany zbiór się zawiera , jak podzielisz przez /2 to dostaniesz ile zbiorów zawiera się w tym zbiorze ![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Mój błąd. W przykładzie dałem 2 zbiory z kluczem B (przez co jeden nadpisywał drugi), a powinno być D dla czwartego zbioru. Wieczorem zrobię jeszcze różne testy. Jeśli nie obrazisz się za symboliczną zapłatę, to podeślij mi proszę nr konta w PW.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 04:51 |