Algorytmy obsługi tablic jedno- i dwuwymiarowych

Algorytmy obsługi tablic jedno- i dwuwymiarowych
DO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

O czym muszę wiedzieć?

Dana jest jednowymiarowa tablica liczb całkowitych, zadeklarowana jako int t[N];
Zapisz algorytm, który wyszukuje jednocześnie wartość najmniejszego i największego elementu
tablicy.

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
1

Wszystko co potrzebne masz właściwie w zadaniu…

Zapamiętaj sobie jaki jest pierwszy element dwa razy, a potem przejrzyj element po elemencie, patrząc czy nowo napotkana wartość będzie większa od aktualnego maksimum lub mniejsza od aktualnego minimum, jeśli tak, to je zaktualizuj.

Andrzejjan111
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
1

Nie wiem co się stało ale wysłałem ci rozwiązanie bo miałeś mały błąd...

Kopiuj
void minMax( )
{
 int min=t[0];
 int max=t[0];
 for(int i=1; i<N; i++){
 if(t[i]<min) min=t[i];
 if(t[i]>max) max=t[i];
 }
 wypisz: min, max;
}
DO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Możecie mi jeszcze powiedzieć coś na temat tego zadania ?

Dana jest jednowymiarowa tablica liczb całkowitych, zadeklarowana jako int t[N];
Zapisz algorytm, który bada, czy wśród wszystkich elementów tablicy występuje przynajmniej jedna
para liczb równych sobie.

DO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

@dorotamikroblog:

Kopiuj
boolean wystepuje( )
{
 boolean jest=false;
 int i=0;
 while((i<N) && !jest)
 {
 if(t1[i]==t2[i]) jest=true;
 i++;
 }
 return jest;
}
Andrzejjan111
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
1
Kopiuj
boolean wystepuje( )
{
 int i=0; int j;
 boolean jest=false;
 while(!jest && (i<N-1))
 { j=i+1;
 while(!jest && (j<N))
 if(t[i]==t[j]) jest=true;
 else j++;
 i++;
 }
 return jest;
}

Ja bym tak to zrobił może ktoś jeszcze potwierdzi..

Andrzejjan111
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
1

@dorotamikroblog:
Tłumaczenie :
Analiza poprawności dla dla tablicy dwuelementowej (N=2):
W tej sytuacji pętla wewnętrzna wykona się tylko jeden raz, bo j osiągnie N niezależnie od
tego czy flaga przestawi się na true, czy nie.
Po powrocie do pętli zewnętrznej i będzie miało wartość N i powtórne wykonanie pętli
zewnętrznej nie będzie miało miejsca.

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
3

Dana jest jednowymiarowa tablica liczb całkowitych, zadeklarowana jako int t[N];
Zapisz algorytm, który bada, czy wśród wszystkich elementów tablicy występuje przynajmniej jedna para liczb równych sobie.

Narzucają się trzy rozwiązania:

  1. Przejrzeć tablicę „na pałę” — dla każdego elementu po kolei przejrzeć wszystkie następujące po nim, czy nie są takie same. Kwadratowa złożoność obliczeniowa, stała i bardzo mała (dwie wartości) złożoność pamięciowa.
  2. Posortować tablicę i przejrzeć, patrząc czy dwie kolejne wartości się nie powtarzają. Złożoność obliczeniowa liniowa plus złożoność sortowania, czyli w praktyce pseudoliniowa, liniowa złożoność pamięciowa (potrzebujesz kopii tablicy i drobiazgów potrzebnych przy sortowaniu, a potem jednej wartości na samo przejrzenie).
  3. Przejrzeć tablicę i w ramach przeglądania wrzucać napotkane do haszmapy. Złożoność obliczeniowa linowa, ale z pokaźną stałą, złożoność pamięciowa liniowa (na haszmapę o rozmiarze, w najgorszym przypadku, równym wielokrotności oryginalnej tablicy); wymaga zaimplementowania haszmapy.
piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3303
1

Dodam jeszcze, że ponieważ mowa jest o sortowaniu liczb, można nieco zoptymalizować etap sortowania, przez zastąpienie go zliczaniem. Jakiś SparseArray będzie właściwym rodzajem kolekcji. Skończy się na pojedynczym przejściu przez tablicę wejściową, pojedynczym przejściu przez kolekcję zliczającą.

PL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 104
0

Można też użyć metody - dziel i zwyciężaj (devide and conquare).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.