Wpis z mikrobloga

Utworzyć metodę statyczną, która przyjmuje jako parametry tablicę liczb całkowitych/rzeczywistych oraz liczbę elementów tablicy. Metoda ma sprawdzić dla których różnych elementów ich iloczyn jest największy i ma zwrócić dwa odpowiednie indeksy. Można użyć klasy pomocniczej.
Ktoś pomoże?
#naukaprogramowania #java #programowanie
  • 32
@quetran: Tworzysz metodę i sprawdzasz kombinacje każdy z każdym pomijając te same elementy i liczysz max z mnożeń. Jeżeli masz n elementów:
od i równego 0 do n-1 wykonuj {
od j równego 0 do n-1 wykonuj {
jeśli i jest równe j lub tablica[i] jest równe tablica[j] pomiń iterację;
jeśli tablica[i] * tablica[j] jest większe od wartości maksymalnej zaktualizuj wartość maksymalną i zapisz ich indeksy;
}
}
zwróć indeksy;

W
@quetran: Jak możesz użyć klasy pomocniczej to utwórz sobie klasę par ( to klasa pomocnicza którą sobie utworzysz) coś w stylu

public class Pair {
public A element;
public B indeks;
... // reszta stuffu z konstruktorem na czele
}

utwórz tablicę tych par wstawiając dane z tablicy wejściowej i indeksy, posortuj ją od najmniejszej do największej po 'element' - wtedy wynik masz w dwóch ostatnich parach, pobierasz indeksy które są
@lavsprat: Działa? Działa. Nie widzę w czym problem. W ten sposób można by podać masę innych rozwiązań. Nie zamierzam się w tym przypadku rozwodzić nad tym które by było lepsze lub mniało mniejszą złożoność.
@lavsprat: Wziąłem pod uwagę fakt, że on ma się jednak czegoś nauczyć. A tak to sobie poczyta np. o komparatorach, nauczy się sortowania, wypełniania tablic własnymi strukturami itd.
Bo najprościej to zadanko jest na 20 sekund, 4 zmienne nie licząc indeksu w pętli, dwa porównania i koniec. Co to za nauka?
różnica jest znikoma.


@kamil062: Jakbyś rzucił coś takiego szefowi, to by Cię chyba z pracy wywalili. Przecież różnica zależy od ilości elementów, a nie od stopnia skomplikowania problemu.

Jeżeli koszt wykonania jednej operacji elementarnej wynosi 0.1 sekund, to dla 10.000 elementów mój algorytm potrwa niecałe 17 minut, a Twój 2777 godzin.
@quetran: Być może nie najlepszy pomysł, ale ja bym chyba najpierw poszukał dwóch największych i dwóch najmniejszych liczb. I jeżeli wynik mnożenia większych > wynik mnożenia mniejszych to zwracam indeksy większych ELSE indeksy mniejszych.
@kamil062: Ja jedynie źle założyłem, że działamy na liczbach dodatnich. Mój algorytm może równie dobrze sprawdzać cztery największe liczby bez znaku i działać dla ujemnych, a przy tym nie stracić złożoności.
@quetran: To zadanie to wymiar wyżej od zadania, gdzie masz tablicę liczb, ilość elementów - tych liczb i należy znaleźć największą wartość. Dołożyć kombinację, działanie jakim jest iloczyn, porównanie to samo, dodatkowa pamięć, bo więcej informacji.