Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

izbacivanje duplikata iz liste uz pomoc hash tabele

[es] :: C/C++ programiranje :: izbacivanje duplikata iz liste uz pomoc hash tabele

Strane: 1 2

[ Pregleda: 5045 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

demon_01
jasmin bajramovic
student
bihac

Član broj: 261520
Poruke: 40
91.191.20.*



+1 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele05.09.2010. u 19:02 - pre 166 meseci
#include<iostream>
using namespace std;

struct Cvor{
int broj;
Cvor *sljedeci;
};

struct HashZapis{
Cvor *pok;
HashZapis *sljedeci;
};

Cvor *headListe=NULL;

Cvor *iniCvor(int br) {
Cvor *novi=new Cvor();
novi->broj=br;
novi->sljedeci=NULL;
return novi;
}
#define VELICINA_TABELE 100

unsigned int hash(int vrednost) {
return abs(vrednost) % VELICINA_TABELE;
}

HashZapis *hashTabela[VELICINA_TABELE];

void dodajUlistu(Cvor *novi) {
if(headListe==NULL)
headListe=novi;
else {
novi->sljedeci=headListe;
headListe=novi;
}
}

void ispisListe() {
if(headListe==NULL)
cout<<"Prazna lista."<<endl;
else {
Cvor *temp=headListe;
while(temp!=NULL) {
cout<<temp->broj;
temp=temp->sljedeci;
}
}
}



/*
prethodnik[in] - pokazivac na element u listi koji je prethodnik elementu koji zelimo da obrisemo
*/
void obrisiElementIzListe(Cvor *prethodnik) {
if(prethodnik == 0) return;//Ne zelimo da ispadnemo budale, te ako je argument NULL pointer, sa prezirom cemo izignorisati celu operaciju.
Cvor *zaBrisanje = prethodnik->sljedeci;
if(zaBrisanje == 0) return; //ovo je kraj liste, trazeni element ni ne postoji ili je u pitanju neka greska.
prethodnik->sljedeci = zaBrisanje->sljedeci;//prevezujemo elemente liste
free(zaBrisanje);//ili delete zaBrisanje - vidi 3. b)
return;// moze, a i ne mora da stoji
}




int dajVrednostPodatka(HashZapis *zapis) {
if(zapis == 0) return 0;
Cvor *prethodnik = zapis->pok->sljedeci;
if(prethodnik == 0) return 0;
if(prethodnik->sljedeci == 0) return 0;
//ok, sada mozemo da dohvatimo podatak
return prethodnik->sljedeci->broj;
}

HashZapis *dajRedIzHashTabele(int kljuc){
unsigned int indeks = hash(kljuc);
HashZapis *rezultat = hashTabela[indeks];
return rezultat;
}


/*
kljuc[in] - kljuc koji se odnosi na elemente cije duplikate valja izbaciti
return broj obrisanih elemenata
*/
unsigned int izbaciDuplikate(int kljuc) {
unsigned int rezultat = 0;
HashZapis *redUHashTabeli = dajRedIzHashTabele(kljuc);
if(redUHashTabeli == 0) return 0;
//trazimo original
while(redUHashTabeli) {
if(kljuc == dajVrednostPodatka(redUHashTabeli)) break;//nasli smo ga
redUHashTabeli = redUHashTabeli->sljedeci;
}

if(redUHashTabeli == 0) return 0;//nismo nasli ni original
HashZapis *prethodni = redUHashTabeli;//trebace nam za brisanje duplikata iz Hash tabele
redUHashTabeli = redUHashTabeli->sljedeci;//prvi posle originala
while(redUHashTabeli) {
if(kljuc == dajVrednostPodatka(redUHashTabeli)) {
//duplikat - obrisacemo ga
obrisiElementIzListe(redUHashTabeli->pok);
//sada da izbacimo i ovaj hash zapis
prethodni->sljedeci = redUHashTabeli->sljedeci;
free(redUHashTabeli);//ili delete redUHashTabeli;
++rezultat;
} else {
prethodni = redUHashTabeli;
}
redUHashTabeli = prethodni->sljedeci;
}
return rezultat;


}

void napraviTabelu(Cvor *headListe) {
//inicijalizacija
for(int i = 0; i < VELICINA_TABELE; ++i) {
hashTabela = NULL;
}
//glavna prica
if(headListe == NULL) return;
Cvor *prethodni = headListe;
Cvor *zaObradu = headListe->sljedeci;
while(zaObradu) {
HashZapis *zapis = (HashZapis *) malloc(sizeof(HashZapis));
zapis->pok = prethodni;
unsigned int indeks = hash(zaObradu->broj);
HashZapis *sledeci = hashTabela[indeks];
zapis->sljedeci = sledeci;
hashTabela[indeks] = zapis;
prethodni = zaObradu;
zaObradu = zaObradu->sljedeci;
}
return;
}

int main(){

int opcija;
int b;
while(opcija!=0){
cout<<"<<MENI>>"<<endl;
cout<<"1.DODAJ CVOR NA POCETAK."<<endl;
cout<<"2.ISPIS LISTE."<<endl;
cout<<"3. hashiraj "<<endl;
cout<<"4. ispisi vrijednost na osnovu unesenog kljuca:"<<endl;


cout<<"0.IZLAZ."<<endl;
cin>>opcija;
switch(opcija) {

case 1: {
Cvor *n=new Cvor();
cout<<"Unesi broj:"<<endl;
cin>>b;
n=iniCvor(b);
dodajUlistu(n);
cout<<endl;
break;
}


case 2: {
cout<<"ISPIS LISTE:"<<endl;
ispisListe();
cout<<endl;
break;
}
case 3:{
//for(int i = 0; i < VELICINA_TABELE; ++i) {
// izbaciDuplikate(i);
//}
napraviTabelu(headListe);
break;

}
case 4:{
int k;
cout<<"unesi kljuc"<<endl;
cin>>k;
cout<<"vrijednost tog kljuca je"<<dajVrednostPodatka(hashTabela[k]);
break;
}

}
}

cout<<endl;

system("pause");
return 0;

}





ewo cjeli program sto sam sklopio, ako moze neko naci gresku bio bih zahvalan
 
Odgovor na temu

VladimirCDT
VladimirCDT
programer
Beograd

Član broj: 220281
Poruke: 45
*.cpe.vektor.net.



+2 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele05.09.2010. u 23:11 - pre 166 meseci
Citat:
demon_01: ajoj cuj izvini,trebam se ja izvinut sto gnjavim uvjek...
napravio sam test kod je prosao ali program ne radi kako bi trebao vjerovatno sam ja nesto pogresno pozvao u mainu
na koji nacin cu sad hashirat listu?? i da li je ova funkcija tacna za ispis liste??


void ispisiTabelu(){


for (int i=0;i<VELICINA_TABELE;i++)

cout<<hashTabela<i>;}


Zdravo, evo mene opet.

Konacno sam se dohvatio alata, pa sam imao priliku i da vidim kakve sam sve gluposti nalupetao. Ali dobro, ocistio sam musice, video glavni nedostatak (pored ostalih bugova), te sredio.
Glavni nedostatak je bio u tome sto, posle izbacivanja jednog elementa iz liste, nije azuriran hash zapis onog koji dolazi posle njega.
Takodje, promenio sam funkciju izbaciDuplikate jer sam shvatio da ce na ovaj nacin, izbacivanje biti brze i korektnije.

Elem, evo ti kompletnog resenja, uglavnom baziranog na prethodnoj prici:

Code:

//esmain.cpp

#include <stdlib.h>
#include <iostream>

using namespace std;

struct Cvor {
    int broj;
    Cvor *sljedeci;
};

struct HashZapis {
    Cvor *pok;
    HashZapis *sljedeci;
};

#define VELICINA_TABELE 100

unsigned int hash(int vrednost) {
  return abs(vrednost) % VELICINA_TABELE;
}

HashZapis *hashTabela[VELICINA_TABELE];

/*
prethodnik[in] - pokazivac na element u listi koji je prethodnik elementu koji zelimo da obrisemo
*/
Cvor *obrisiElementIzListe(Cvor *prethodnik) {
    if(prethodnik == 0) return 0;//Ne zelimo da ispadnemo budale, te ako je argument NULL pointer, sa prezirom cemo izignorisati celu operaciju.
    Cvor *zaBrisanje = prethodnik->sljedeci;
    if(zaBrisanje == 0) return 0; //ovo je kraj liste, trazeni element ni ne postoji ili je u pitanju neka greska.
    prethodnik->sljedeci = zaBrisanje->sljedeci;//prevezujemo elemente liste
    free(zaBrisanje);//ili delete zaBrisanje - vidi 3. b)
    return zaBrisanje;
}

int dajVrednostPodatka(HashZapis *zapis) {
    if(zapis == 0) return 0;
    Cvor *prethodnik = zapis->pok;
    if(prethodnik == 0) return 0;
    if(prethodnik->sljedeci == 0) return 0;
    //ok, sada mozemo da dohvatimo podatak
    return prethodnik->sljedeci->broj;
}

HashZapis *dajRedIzHashTabele(int kljuc) {
    unsigned int indeks = hash(kljuc);
    HashZapis *rezultat = hashTabela[indeks];
    return rezultat;
}
/*
elementUHashTabeli[in] - hash zapis elementa cije duplikate valja zatuci.
return broj obrisanih elemenata
*/
unsigned int izbaciDuplikate(HashZapis *elementUHashTabeli) {
    if(elementUHashTabeli == 0) return 0;
    unsigned int rezultat = 0;
    int kljuc = dajVrednostPodatka(elementUHashTabeli);
    HashZapis *prethodni = elementUHashTabeli;//trebace nam za brisanje duplikata iz Hash tabele
    elementUHashTabeli = elementUHashTabeli->sljedeci;//prvi posle originala
    while(elementUHashTabeli) {
        if(kljuc == dajVrednostPodatka(elementUHashTabeli)) {
            //duplikat - obrisacemo ga
            Cvor *previous = elementUHashTabeli->pok;
            Cvor *obrisani = obrisiElementIzListe(previous);
            //medjutim, sada je za element koji dolazi posle obrisanog
            //potrebno promeniti hash zapis, tako da ovaj ukazuje na novog prethodnika.
            Cvor *zaAzuriranje = previous->sljedeci;
            if(zaAzuriranje != NULL) {
                unsigned int indeks = hash(zaAzuriranje->broj);
                HashZapis *hashAzuriranog = hashTabela[indeks];
                while(hashAzuriranog) {
                    if(hashAzuriranog->pok == obrisani) {
                        hashAzuriranog->pok = previous;
                        break;
                    }
                    hashAzuriranog = hashAzuriranog->sljedeci;
                }
            }
            //sada da izbacimo i ovaj hash zapis za obrisani element
            prethodni->sljedeci = elementUHashTabeli->sljedeci;
            free(elementUHashTabeli);//ili delete elementUHashTabeli;
            ++rezultat;
        } else {
            prethodni = elementUHashTabeli;
        }
        elementUHashTabeli = prethodni->sljedeci;
    }
    return rezultat;
}


void napraviTabelu(Cvor *headListe) {
    //inicijalizacija
    for(int i = 0; i < VELICINA_TABELE; ++i) {
        hashTabela[i] = NULL;
    }
    //glavna prica
    cout << "Pravljenje tabele" << endl;
    if(headListe == NULL) return;
    Cvor *prethodni = headListe;
    Cvor *zaObradu = headListe->sljedeci;
    while(zaObradu) {
        HashZapis *zapis = (HashZapis *) malloc(sizeof(HashZapis));
        zapis->pok = prethodni;
        unsigned int indeks = hash(zaObradu->broj);
        HashZapis *sledeci = hashTabela[indeks];
        zapis->sljedeci = sledeci;
        hashTabela[indeks] = zapis;
        prethodni = zaObradu;
        zaObradu = zaObradu->sljedeci;
    }
    return;
}

void pisiListu(Cvor *headListe) {
    if(headListe == NULL) return;
    Cvor *element = headListe->sljedeci;
    cout << "Sadrzaj liste:" << endl;
    while(element) {
        cout << element->broj << ", ";
        element = element->sljedeci;
    }
    cout << endl;
}

int main() {
    Cvor head;
    head.sljedeci = NULL;
    int niz[30] = {
            7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83,
            7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83,
            7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83
    };
    for(int i = 0; i < 30; ++i) {//Ovo sve je sada da napravimo nekakvu test listu sa duplikatima
        Cvor *novi = (Cvor *) malloc(sizeof(Cvor));
        novi->broj = niz[i];
        novi->sljedeci = head.sljedeci;
        head.sljedeci = novi;
    }
    pisiListu(&head);
    cout << "Izbacujem duplikate" << endl;
    napraviTabelu(&head);

    for(unsigned int i = 0; i < 100; ++i) {
        HashZapis *trenutni = hashTabela[i];
        while(trenutni != NULL) {
            unsigned n = izbaciDuplikate(trenutni);
            cout << "Izbacio " << n << " elemenata sa vrednoscu " << dajVrednostPodatka(trenutni) << endl;
            pisiListu(&head);
            trenutni = trenutni->sljedeci;
        }


    }
    cout << "Na kraju je" << endl;
    pisiListu(&head);
}



Zao mi je sto sam te samo smorio sa onom gomilom pogresnog i nabrzinu nakucanog koda. I ja sebe zovem programerom... e moj Vladimire...

Uzgred budi receno: primena jednostruko ulancane liste, kao sto vidis, prilicno komplikuje stvar. Sa dvostruko ulancanom listom, sve bi bilo daleko korektnije, jednostavnije i ne tako podlozno greskama. Zbog azuriranja hash zapisa elementa koji dolazi nakon obrisanog, bilo je potrebno izvrsiti poziv hash funkcije. Ova hash funkcija u ovom resenju je jednostavna i ne smatra se dobrom u praksi i realnim primenama. Hash funkcije znaju nekada biti dovoljno "skupe" i isplative su samo zbog indeksiranja ogromnog broja podataka.

Iskompajliraj, poteraj...

Eh, da... ako ovo budes davao profi, malo regulisi nazive promenljivih i funkcija i same komentare. Bilo bi glupo da, ako ti pricas jekavicom, da se naleti na ekavicu.

Inace, ono "cout << hashTabela<i>" ce ti samo ispisati vrednosti pointera, dakle adrese, a ne smislene podatke.
 
Odgovor na temu

demon_01
jasmin bajramovic
student
bihac

Član broj: 261520
Poruke: 40
91.191.20.*



+1 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele05.09.2010. u 23:28 - pre 166 meseci
svaka cast majstore
hvala ti puno sto si mi pomogao i potrosio svoje vrijeme
najbolji si
 
Odgovor na temu

demon_01
jasmin bajramovic
student
bihac

Član broj: 261520
Poruke: 40
91.191.20.*



+1 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele05.09.2010. u 23:37 - pre 166 meseci
Citat:
VladimirCDT: Zdravo, evo mene opet.

Konacno sam se dohvatio alata, pa sam imao priliku i da vidim kakve sam sve gluposti nalupetao. Ali dobro, ocistio sam musice, video glavni nedostatak (pored ostalih bugova), te sredio.
Glavni nedostatak je bio u tome sto, posle izbacivanja jednog elementa iz liste, nije azuriran hash zapis onog koji dolazi posle njega.
Takodje, promenio sam funkciju izbaciDuplikate jer sam shvatio da ce na ovaj nacin, izbacivanje biti brze i korektnije.

Elem, evo ti kompletnog resenja, uglavnom baziranog na prethodnoj prici:

Code:

//esmain.cpp

#include <stdlib.h>
#include <iostream>

using namespace std;

struct Cvor {
int broj;
Cvor *sljedeci;
};

struct HashZapis {
Cvor *pok;
HashZapis *sljedeci;
};

#define VELICINA_TABELE 100

unsigned int hash(int vrednost) {
  return abs(vrednost) % VELICINA_TABELE;
}

HashZapis *hashTabela[VELICINA_TABELE];

/*
prethodnik[in] - pokazivac na element u listi koji je prethodnik elementu koji zelimo da obrisemo
*/
Cvor *obrisiElementIzListe(Cvor *prethodnik) {
if(prethodnik == 0) return 0;//Ne zelimo da ispadnemo budale, te ako je argument NULL pointer, sa prezirom cemo izignorisati celu operaciju.
Cvor *zaBrisanje = prethodnik->sljedeci;
if(zaBrisanje == 0) return 0; //ovo je kraj liste, trazeni element ni ne postoji ili je u pitanju neka greska.
prethodnik->sljedeci = zaBrisanje->sljedeci;//prevezujemo elemente liste
free(zaBrisanje);//ili delete zaBrisanje - vidi 3. b)
return zaBrisanje;
}

int dajVrednostPodatka(HashZapis *zapis) {
if(zapis == 0) return 0;
Cvor *prethodnik = zapis->pok;
if(prethodnik == 0) return 0;
if(prethodnik->sljedeci == 0) return 0;
//ok, sada mozemo da dohvatimo podatak
return prethodnik->sljedeci->broj;
}

HashZapis *dajRedIzHashTabele(int kljuc) {
unsigned int indeks = hash(kljuc);
HashZapis *rezultat = hashTabela[indeks];
return rezultat;
}
/*
elementUHashTabeli[in] - hash zapis elementa cije duplikate valja zatuci.
return broj obrisanih elemenata
*/
unsigned int izbaciDuplikate(HashZapis *elementUHashTabeli) {
if(elementUHashTabeli == 0) return 0;
unsigned int rezultat = 0;
int kljuc = dajVrednostPodatka(elementUHashTabeli);
HashZapis *prethodni = elementUHashTabeli;//trebace nam za brisanje duplikata iz Hash tabele
elementUHashTabeli = elementUHashTabeli->sljedeci;//prvi posle originala
while(elementUHashTabeli) {
if(kljuc == dajVrednostPodatka(elementUHashTabeli)) {
//duplikat - obrisacemo ga
Cvor *previous = elementUHashTabeli->pok;
Cvor *obrisani = obrisiElementIzListe(previous);
//medjutim, sada je za element koji dolazi posle obrisanog
//potrebno promeniti hash zapis, tako da ovaj ukazuje na novog prethodnika.
Cvor *zaAzuriranje = previous->sljedeci;
if(zaAzuriranje != NULL) {
unsigned int indeks = hash(zaAzuriranje->broj);
HashZapis *hashAzuriranog = hashTabela[indeks];
while(hashAzuriranog) {
if(hashAzuriranog->pok == obrisani) {
hashAzuriranog->pok = previous;
break;
}
hashAzuriranog = hashAzuriranog->sljedeci;
}
}
//sada da izbacimo i ovaj hash zapis za obrisani element
prethodni->sljedeci = elementUHashTabeli->sljedeci;
free(elementUHashTabeli);//ili delete elementUHashTabeli;
++rezultat;
} else {
prethodni = elementUHashTabeli;
}
elementUHashTabeli = prethodni->sljedeci;
}
return rezultat;
}


void napraviTabelu(Cvor *headListe) {
//inicijalizacija
for(int i = 0; i < VELICINA_TABELE; ++i) {
hashTabela[i] = NULL;
}
//glavna prica
cout << "Pravljenje tabele" << endl;
if(headListe == NULL) return;
Cvor *prethodni = headListe;
Cvor *zaObradu = headListe->sljedeci;
while(zaObradu) {
HashZapis *zapis = (HashZapis *) malloc(sizeof(HashZapis));
zapis->pok = prethodni;
unsigned int indeks = hash(zaObradu->broj);
HashZapis *sledeci = hashTabela[indeks];
zapis->sljedeci = sledeci;
hashTabela[indeks] = zapis;
prethodni = zaObradu;
zaObradu = zaObradu->sljedeci;
}
return;
}

void pisiListu(Cvor *headListe) {
if(headListe == NULL) return;
Cvor *element = headListe->sljedeci;
cout << "Sadrzaj liste:" << endl;
while(element) {
cout << element->broj << ", ";
element = element->sljedeci;
}
cout << endl;
}

int main() {
Cvor head;
head.sljedeci = NULL;
int niz[30] = {
7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83,
7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83,
7, 9, 12, 347, 283, 25, 1200, 3047, 400, 83
};
for(int i = 0; i < 30; ++i) {//Ovo sve je sada da napravimo nekakvu test listu sa duplikatima
Cvor *novi = (Cvor *) malloc(sizeof(Cvor));
novi->broj = niz[i];
novi->sljedeci = head.sljedeci;
head.sljedeci = novi;
}
pisiListu(&head);
cout << "Izbacujem duplikate" << endl;
napraviTabelu(&head);

for(unsigned int i = 0; i < 100; ++i) {
HashZapis *trenutni = hashTabela[i];
while(trenutni != NULL) {
unsigned n = izbaciDuplikate(trenutni);
cout << "Izbacio " << n << " elemenata sa vrednoscu " << dajVrednostPodatka(trenutni) << endl;
pisiListu(&head);
trenutni = trenutni->sljedeci;
}


}
cout << "Na kraju je" << endl;
pisiListu(&head);
}



Zao mi je sto sam te samo smorio sa onom gomilom pogresnog i nabrzinu nakucanog koda. I ja sebe zovem programerom... e moj Vladimire... :D

Uzgred budi receno: primena jednostruko ulancane liste, kao sto vidis, prilicno komplikuje stvar. Sa dvostruko ulancanom listom, sve bi bilo daleko korektnije, jednostavnije i ne tako podlozno greskama. Zbog azuriranja hash zapisa elementa koji dolazi nakon obrisanog, bilo je potrebno izvrsiti poziv hash funkcije. Ova hash funkcija u ovom resenju je jednostavna i ne smatra se dobrom u praksi i realnim primenama. Hash funkcije znaju nekada biti dovoljno "skupe" i isplative su samo zbog indeksiranja ogromnog broja podataka.

Iskompajliraj, poteraj...

Eh, da... ako ovo budes davao profi, malo regulisi nazive promenljivih i funkcija i same komentare. :) Bilo bi glupo da, ako ti pricas jekavicom, da se naleti na ekavicu. :)

Inace, ono "cout << hashTabela<i>" ce ti samo ispisati vrednosti pointera, dakle adrese, a ne smislene podatke.








profa ima primjedbu na rad :
staticnu velicinu hash tabele tj. max 100 zapisa u hash tabeli. Hash tabela je druga lista sto znaci morate imati metode koja ce dodati novi zapis u hash tabelu (povezati pokazivac *sljedeci iz zapisa sa ostatkom tabele), isprazniti hashtabelu, i nije vam potreban nikakav niz. Broj zapisa u hashtabeli striktno ovisi o broju jedinstvenih cvorova (svaki cvor ima razlicit broj) u listi.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele05.09.2010. u 23:43 - pre 166 meseci
Citat:

6. Ne tražite da Vam neko radi domaći zadatak

Ne očekujte da bilo ko obavezno odradi sav posao umesto Vas! Rado ćemo pomoći oko svakog problema u slučaju da Vam "gori pod nogama", pred neki ispit ili posao, ali morate da pokažete na delu da ste u stvari krenuli sa radom i zastali pošto ne znate kako dalje. Ako samo navedete zadatak i specifikacije, u zavisnosti od raspoloženja članova na forumu, možda će se naći neko da odradi kompletan posao, ali pošto to zavisi od entuzijazma samih članova, ne postoji garancija da će se i dogoditi! [ES] posetioci će Vam pomoći da bolje SHVATITE problem sa kojim ste suočeni, ali ponešto morate i sami da uradite!


ES pravilnik http://www.elitesecurity.org/o/pravilnik/korisnici/
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

VladimirCDT
VladimirCDT
programer
Beograd

Član broj: 220281
Poruke: 45
*.cpe.vektor.net.



+2 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele06.09.2010. u 00:12 - pre 166 meseci
@demon_01

Ako profa ima primedbe, onda je mogao bolje da definise zadatak.
Ja sam hash tabelu i samu hash funkciju dao kao jednostavan predlog. Uopste nisam razumeo da je za sam zadatak veoma bitno sada praviti posebnu klasu za hash tabelu, opremljenu svim mogucim metodama itd. Ako bi se pravio dinamicki niz, onda bi zarad brzog pronalazenja hash zapisa morala da se implementira sortirana lista i metoda binarnog pretrazivanja. Sa takvim resenjem bismo opet opalili u problem brisanja elemenata iz jednostruko ulancane liste. Ali opet, profesor bi morao mnogo bolje da definise zadatak, ako zeli resenje koje ce ga zadovoljiti. Ovako, ne moze da se gleda u pasulj sta on zeli.

Verovatno postoji neko optimalnije resenje od onoga sto sam ja ponudio, koje bi uz to jos i pogodilo profesorovu nameru. Ja bih voleo da ga vidim, posto mi je ovako prica pomalo rebus.

Inace, niz u main metodi je samo zarad punjenja liste nekim glupo izmisljenim vrednostima, na neki smesan nacin, bez zelje da se na tom mestu nesto pravim pametan.
 
Odgovor na temu

demon_01
jasmin bajramovic
student
bihac

Član broj: 261520
Poruke: 40
*.tz.dlp174.bih.net.ba.



+1 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele10.09.2010. u 17:48 - pre 166 meseci
Citat:
VladimirCDT: @demon_01

Ako profa ima primedbe, onda je mogao bolje da definise zadatak.
Ja sam hash tabelu i samu hash funkciju dao kao jednostavan predlog. Uopste nisam razumeo da je za sam zadatak veoma bitno sada praviti posebnu klasu za hash tabelu, opremljenu svim mogucim metodama itd. Ako bi se pravio dinamicki niz, onda bi zarad brzog pronalazenja hash zapisa morala da se implementira sortirana lista i metoda binarnog pretrazivanja. Sa takvim resenjem bismo opet opalili u problem brisanja elemenata iz jednostruko ulancane liste. Ali opet, profesor bi morao mnogo bolje da definise zadatak, ako zeli resenje koje ce ga zadovoljiti. Ovako, ne moze da se gleda u pasulj sta on zeli.

Verovatno postoji neko optimalnije resenje od onoga sto sam ja ponudio, koje bi uz to jos i pogodilo profesorovu nameru. Ja bih voleo da ga vidim, posto mi je ovako prica pomalo rebus.

Inace, niz u main metodi je samo zarad punjenja liste nekim glupo izmisljenim vrednostima, na neki smesan nacin, bez zelje da se na tom mestu nesto pravim pametan.
Citat:
VladimirCDT: @demon_01

Ako profa ima primedbe, onda je mogao bolje da definise zadatak.
Ja sam hash tabelu i samu hash funkciju dao kao jednostavan predlog. Uopste nisam razumeo da je za sam zadatak veoma bitno sada praviti posebnu klasu za hash tabelu, opremljenu svim mogucim metodama itd. Ako bi se pravio dinamicki niz, onda bi zarad brzog pronalazenja hash zapisa morala da se implementira sortirana lista i metoda binarnog pretrazivanja. Sa takvim resenjem bismo opet opalili u problem brisanja elemenata iz jednostruko ulancane liste. Ali opet, profesor bi morao mnogo bolje da definise zadatak, ako zeli resenje koje ce ga zadovoljiti. Ovako, ne moze da se gleda u pasulj sta on zeli.

Verovatno postoji neko optimalnije resenje od onoga sto sam ja ponudio, koje bi uz to jos i pogodilo profesorovu nameru. Ja bih voleo da ga vidim, posto mi je ovako prica pomalo rebus.

Inace, niz u main metodi je samo zarad punjenja liste nekim glupo izmisljenim vrednostima, na neki smesan nacin, bez zelje da se na tom mestu nesto pravim pametan.



ma nek on prica sta hoce vi ste najbolji forum na koji sam dosad naletio,zahvaljujem vam se puno!!!
imali neko ideju kako da promjenim staticnu vrijednost hashTabele?
 
Odgovor na temu

demon_01
jasmin bajramovic
student
bihac

Član broj: 261520
Poruke: 40
*.tz.dlp139.bih.net.ba.



+1 Profil

icon Re: izbacivanje duplikata iz liste uz pomoc hash tabele10.09.2010. u 20:18 - pre 166 meseci
Citat:
VladimirCDT: @demon_01

Ako profa ima primedbe, onda je mogao bolje da definise zadatak.
Ja sam hash tabelu i samu hash funkciju dao kao jednostavan predlog. Uopste nisam razumeo da je za sam zadatak veoma bitno sada praviti posebnu klasu za hash tabelu, opremljenu svim mogucim metodama itd. Ako bi se pravio dinamicki niz, onda bi zarad brzog pronalazenja hash zapisa morala da se implementira sortirana lista i metoda binarnog pretrazivanja. Sa takvim resenjem bismo opet opalili u problem brisanja elemenata iz jednostruko ulancane liste. Ali opet, profesor bi morao mnogo bolje da definise zadatak, ako zeli resenje koje ce ga zadovoljiti. Ovako, ne moze da se gleda u pasulj sta on zeli.

Verovatno postoji neko optimalnije resenje od onoga sto sam ja ponudio, koje bi uz to jos i pogodilo profesorovu nameru. Ja bih voleo da ga vidim, posto mi je ovako prica pomalo rebus.

Inace, niz u main metodi je samo zarad punjenja liste nekim glupo izmisljenim vrednostima, na neki smesan nacin, bez zelje da se na tom mestu nesto pravim pametan.




opet ja ;-)

uspio sam napraviti nesto ali program ne radi bas kako treba jer ako se ponavlja prvi clan liste npr. ako imam listu 4,4,5,7,7 program ce ispisat 4,4,5,7,negdje bi trebalo dodat jos neku provjeru,ako mozes pomagaj! hvala
 
Odgovor na temu

[es] :: C/C++ programiranje :: izbacivanje duplikata iz liste uz pomoc hash tabele

Strane: 1 2

[ Pregleda: 5045 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.