Home > 2024 > CPP_DS > ๐Ÿ†™[Cpp DataStructure] ์•ˆ์ •์„ฑ(stability) ํ™•์ธ

๐Ÿ†™[Cpp DataStructure] ์•ˆ์ •์„ฑ(stability) ํ™•์ธ
Cpp DataStructure

์•ˆ์ •์„ฑ(stability) ํ™•์ธ.

#include <iostream>
#include <cassert>
#include <fstream>

using namespace std;

struct Element
{
	int key;
	char value;
};

void Print(Element* arr, int size)
{
	for (int i = 0; i < size; i++)
		cout << arr[i].key << " ";
	cout << endl;

	for (int i = 0; i < size; i++)
		cout << arr[i].value << " ";
	cout << endl;
}

int main()
{
    	// ์•ˆ์ •์„ฑ ํ™•์ธ(unstable)
	{
		Element arr[] = { {2, 'a'}, {2, 'b'}, {1, 'c' } };
		int size = sizeof(arr) / sizeof(arr[0]);

		Print(arr, size);

		int min_index;
		for(int i = 0; i < (size - 1); i++) 
		{
			min_index = i;
			for (int j = (i + 1); j < size; j++)
			{
				if (arr[j].key < arr[min_index].key) 
				{
					min_index = j;
				}
			}

			swap(arr[i], arr[min_index]);

			Print(arr, size);
		}
	}
	return 0;
}

์‹คํ–‰ ๊ฒฐ๊ณผ

2 2 1 
a b c 
1 2 2 
c b a 
1 2 2 
c b a

์ •๋ ฌ์˜ ์•ˆ์ •์„ฑ(stablity)์ด๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ๊ฐœ๋…์€ stableํ•œ์ง€ unstableํ•œ์ง€๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฆ‰, ์•ˆ์ •์ ์ธ์ง€ ๋ถˆ์•ˆ์ •์ ์ธ์ง€๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ ๋ณด๋ฉด Element ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์ด รˆlement๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

struct Element
{
	int key;
	char value;
};
  • Element์˜ key๋Š” ์ •์ˆ˜์ด๊ณ  value๋Š” ๋ฌธ์ž์ž…๋‹ˆ๋‹ค.
    • ๊ทธ๋ž˜์„œ ์ •๋ ฌํ•  ๋•Œ key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
      • ๊ทธ๋Ÿฌ๋ฉด swap์‹œ value(๋ฌธ์ž)๋Š” ํ•จ๊ป˜ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค. -> ๋ณต์‚ฌ๋ฅผ ํ•˜๋‹ˆ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
Element arr[] = { {2, 'a'}, {2, 'b'}, {1, 'c' } };
  • ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์š”์†Œ์˜ key๋Š” 2์ด๊ณ  value๋Š” 'a' ์ž…๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์š”์†Œ์˜ key๋Š” 2์ด๊ณ  value๋Š” 'b' ์ž…๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์š”์†Œ์˜ key๋Š” 1์ด๊ณ  value๋Š” 'c' ์ž…๋‹ˆ๋‹ค.

โ€œ์ •๋ ฌ์‹œ์—๋Š” key๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜๋„๋ก ํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.โ€

  • ์ฆ‰, key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ ์€ โ€œ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์™€ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์š”์†Œ์˜ Valueโ€์ž…๋‹ˆ๋‹ค.

  • ๋‘ ์ธ๋ฑ์Šค์˜ ์š”์†Œ์˜ key ๊ฐ’์€ ๊ฐ™์œผ๋‚˜ value ๊ฐ’์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋น„๊ต ๋กœ์ง์„ ๋ณด๋ฉด key๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋น„๊ต๋ฅผ ํ•˜์ง€๋งŒ swap ์‹œ์—๋Š” key์™€ value๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์›€์ง์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  value์™€ ์•ˆ์ •์„ฑ์˜ ์ƒ๊ด€ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ

2 2 1 
a b c 
1 2 2 
c b a 
1 2 2 
c b a
  • ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด (2 a), (2, b), (1, c)์—์„œ โ€œ(1, c), (2, b), (2, a)โ€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ฒ˜์Œ์—๋Š” (2 a), (2, b) ์ˆœ์„œ์˜€์ง€๋งŒ ์ •๋ ฌ ํ›„์—๋Š” โ€œ(2, b), (2, a)โ€ ๋กœ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด ์ •๋ ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      • value๊ฐ€ ๋’ค๋ฐ”๋€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • key๊ฐ€ ์ •๋ ฌ์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ •๋ ฌ์€ ์ž˜ ๋˜์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜ โ€œkey๊ฐ€ ๊ฐ™์€ ๊ฐ’์ผ ๊ฒฝ์šฐ์—๋Š” value์˜ ์ˆœ์„œ๊ฐ€ a, b์—์„œ b, a ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.โ€
          • โ€œ์—ฌ๊ธฐ์„œ stableํ•œ ๊ฒƒ๊ณผ unstableํ•œ ๊ฒƒ์˜ ์ฐจ์ด์ ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.โ€

โ€œํ‚ค ๊ฐ’์ด ๊ฐ™์•„๋„ ์ •๋ ฌ์‹œ ๋ฒจ๋ฅ˜ ๊ฐ’์ด ์ฒ˜์Œ๊ณผ ๊ฐ™์ด ์œ ์ง€๊ฐ€ ๋œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ stableํ•˜๋‹ค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค, ๊ทธ์™€ ๋ฐ˜๋Œ€๋กœ ํ‚ค ๊ฐ’์ด ๊ฐ™์œผ๋‚˜ ์ฒ˜์Œ๊ณผ ๋‹ฌ๋ฆฌ ๋ฒจ๋ฅ˜์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ๊ฒฝ์šฐ์—๋Š” unstableํ•˜๋‹ค ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.โ€

  • ์ด๊ฒƒ๋„ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ธฐ์ค€ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.