Zbiory w ansi C

0

Witam mam taki problem, probuje napisac algorytm Apriori w Ansi C

[url]http://www.mimuw.edu.pl/~son/[...]ning/materials/w2-w3.pdf[/url]

Jest to dosc skomplikowane bynajmniej dla mnie :/ poniewaz nie mam pomyslu jak przechowywac zbiory produktow :/, poczatkow zapisywalem je do tablicy ale tu sei pojawia problem sprawdzenia czy jakis zbior sie zawiera w jakims zbiorze np mamy tablice

C[1].zbior[1][1] = 1;
C[1].zbior[1][2] = 5;

oraz zawartosc pliku
1 2 3 5

czyli mamy dwa zbiory z1 = [1 5] z2 = [1 2 3 5] i teraz problem polegana tym jak sprawdzic czy z1 zawiera sie w z2 ??

Wiem ze mozna to zrobic w petli for i sprawdzac kazdy element tablicy z kazdym, ale przy bardziej rozbudowanych zbiorach bylo by to za skomplikowane i bylbym wdzieczny jezeli pomogl by mi ktos znalezc jakies standardowe funkcje ktore pozwola mi szybko okreslic czy zbiory sie zawieraja

Prosze o pomoc

0

Mi sie wydaje ze mozesz zrobicto na listach jednokierunkowych. W dwoch listach masz dane zbioray, przeszukujac je w pteli jezeli elementy sie pokrywaja tworzysz nastepna liste do ktorej dodajesz elementy.

0

wlasnie chcialm to sprawdzic jak najprostsza metoda ;)

bo moim zadaniem jest policzenie ile razy zbior np 1 5 zawiera sie w pliku w ktorym jest kilka trrnacakcji.

np: z1 = [1 5]

Zawartosc pliku
1 2 3 5 {jest 1 5]
1 3 4
1 5 {jest}
1 3 5 7 {jest}
...

i teraz wynikiem ma byc liczba 3, czyli w 4 transakcach wpisanych do pliku istnieja takie 3 ktore zwieraja zbior [1 5]

chodzilo by mi o cos takiego czy istnieje taka funkcja np zawiera(tab1,tab2) i zwroci mi 1 jezeli tab1 zawiera sie w tab2 lub 0 jezeli nie.

0

Był taki temat niedawno poruszany a dotyczył właśnie typu, którego nie ma w C. Jeszcze zależy jak duże te zbiory są. Jak małe, to można użyć operacji bitowych definiując elementy jako 1,2,4,8,16... dla typu int można zdefiniować wtedy zbiory do 32 elementów.

0

Dzieki chodnik :) O to wlasnie chodzilo :d

I tak na przyszlosc jakby ktos mial z tym problem:

int zbior1 = 0, zbior2 = 0;

zbior1 |= 1 << (n-1); // n to wartosci jakie maja byc przechowywane z danym zbiorze max to n = 32
                                //czyli jezeli chcemy w zbior1 przechowywac wartosci np 1 5 wpisujemy
                               //zbior1 |= 1 <<(1-1) oraz zbior1 |= 1 <<(5-1)

zbior2 |= 1 << (m-1); // zasada  taka sama jak wyzej

I teraz zeby sprawdzic czy zbior2 zawiera sie w zbierze1 nalezy napisac warunek

if ((zbior1 & zbior2) == zbior2) {zbior2 zawiera sie w zboirze1} else { nie zawiera sie}
0

dopowiem jeszcze: sprawdz czy aby ...

http://www.hmug.org/man/2/select.php

Makr FD_ nie musisz wykorzystywac przeciez dokladnie z ich przeznaczeniem :)

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