Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #28616

Re: Matching - rozszerzone porównanie dwóch posortowanych list

From Borneq <borneq@antyspam.hidden.pl>
Newsgroups pl.comp.programming
Subject Re: Matching - rozszerzone porównanie dwóch posortowanych list
Date 2016-05-20 17:55 +0200
Organization ATMAN - ATM S.A.
Message-ID <nhnc15$khu$1@node2.news.atman.pl> (permalink)
References <nhn4f9$d67$1@node2.news.atman.pl> <nhn9j8$i1r$1@node2.news.atman.pl> <41188837-396f-41ff-983d-fd516cb6bd3e@googlegroups.com>

Show all headers | View raw


W dniu 20.05.2016 o 17:20, M.M. pisze:
> Jeśli to działa na pamięci RAM, to wersja z hash-table może
> zadziałać szybciej niż z sortowaniem.

Zrobiłem tak:
int i1 = 0, i2 = 0;
	int valueBoth = 0;
	bool lastBoth = false;
	while (i1 < vecA.size() && i2 < vecB.size())
	{
		if (vecA[i1] < vecB[i2])
		{
			if (lastBoth)
			{
				if (vecA[i1] == valueBoth)
					printf("match - pierwsza lista %d\n", vecA[i1]);
				else
					lastBoth = false;
			}			
			i1++;
		}
		else if (vecA[i1] > vecB[i2])
		{			
			if (lastBoth)
			{
				if (vecB[i2] == valueBoth)
					printf("match - druga lista %d\n", vecB[i2]);
				else
					lastBoth = false;
			}			
			i2++;
		}
		else
		{
			printf("match - dwie listy %d\n", vecA[i1]);
			valueBoth = vecA[i1];
			lastBoth = true;
			i1++;
			i2++;
		}
	}
	printf("dokończenie A\n");
	while (i1 < vecA.size())
	{		
		if (lastBoth)
		{
			if (vecA[i1] == valueBoth)
				printf("match - pierwsza lista %d\n", vecA[i1]);
			else
				lastBoth = false;
		}
		i1++;
	}
	printf("dokończenie B\n");
	while (i2 < vecB.size())
	{
		if (lastBoth)
		{
			if (vecB[i2] == valueBoth)
				printf("match - druga lista %d\n", vecB[i2]);
			else
				lastBoth = false;
		}
		i2++;
	}

Mam dwie pomocnicze zmienne, nie wystarczy valueBoth, które na początku 
trzeba by inicjować na +maxint (nawet to nie pewne, bo co gdy w tablicy 
się pojawi maxint?) ale porównanie z bool lastBoth jest znacznie szybsze 
niż valueBoth, które będzie kluczem i trzeba będzie użyć strcmp()


A to przykładowe dane:
	vecA.push_back(0);
	vecA.push_back(1);
	vecA.push_back(5);
	vecA.push_back(8);
	vecA.push_back(9);
	vecA.push_back(11);
	vecA.push_back(11);
	vecA.push_back(15);
	vecA.push_back(17);
	vecA.push_back(17);
	vecA.push_back(20);
	vecA.push_back(25);
	vecA.push_back(25);

	vecB.push_back(1);
	vecB.push_back(1);
	vecB.push_back(1);
	vecB.push_back(3);
	vecB.push_back(4);
	vecB.push_back(4);
	vecB.push_back(8);
	vecB.push_back(8);
	vecB.push_back(8);
	vecB.push_back(11);
	vecB.push_back(16);
	vecB.push_back(17);
	vecB.push_back(17);
	vecB.push_back(17);
	vecB.push_back(25);

Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Matching - rozszerzone porównanie dwóch posortowanych list Borneq <borneq@antyspam.hidden.pl> - 2016-05-20 15:46 +0200
  Re: Matching - rozszerzone porównanie dwóch posortowanych list Borneq <borneq@antyspam.hidden.pl> - 2016-05-20 17:13 +0200
    Re: Matching - rozszerzone porównanie dwóch posortowanych list "M.M." <mmarszik@gmail.com> - 2016-05-20 08:20 -0700
      Re: Matching - rozszerzone porównanie dwóch posortowanych list Borneq <borneq@antyspam.hidden.pl> - 2016-05-20 17:55 +0200
        Re: Matching - rozszerzone porównanie dwóch posortowanych list Borneq <borneq@antyspam.hidden.pl> - 2016-05-20 19:14 +0200
          Re: Matching - rozszerzone porównanie dwóch posortowanych list "M.M." <mmarszik@gmail.com> - 2016-05-20 13:18 -0700

csiph-web