Algorytmy obsługi tablic jedno- i dwuwymiarowych

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.

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.

1

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

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;
}
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.

0

@dorotamikroblog:

boolean wystepuje( )
{
 boolean jest=false;
 int i=0;
 while((i<N) && !jest)
 {
 if(t1[i]==t2[i]) jest=true;
 i++;
 }
 return jest;
}
1
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..

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.

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.
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ą.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1