Data structures (with python) - 1. Array
Data structures (with python)
1. Array
๐ก Arrays store elements in contiguous memory locations, resulting in easily calculable addresses for the elements stored and this allows faster access to an element at a specific index.
๋ฐฐ์ด์ ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์์๋ฅผ ์ ์ฅํ๋ฏ๋ก ์ ์ฅ๋ ์์์ ์ฃผ์๋ฅผ ์ฝ๊ฒ ๊ณ์ฐํ ์ ์์ด ํน์ ์ธ๋ฑ์ค์ ์์์ ๋ ๋น ๋ฅด๊ฒ ์ก์ธ์คํ ์ ์์ต๋๋ค.
Array
- ์ธ๋ฑ์ค ์กด์ฌ
- ๋ฐ์ดํฐ ์์น์ ์ง์ ์ ์ธ ์ ๊ทผ ๊ฐ๋ฅ
- ํ ๋น๋ ๊ณต๊ฐ์ ์ฐ์์ ์ -> ์กฐํ๊ฐ ๋น ๋ฅด๊ณ ,cache hit ๊ฐ๋ฅ์ฑ์ด ๋์
- ๋ฏธ๋ฆฌ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ผํ๊ณ , ๊ณ ์ ๋์ด ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋๋ฌธ์ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ๋ถํธ
List (in Commonly CS)
- ์ธ๋ฑ์ค ์กด์ฌ, ๋ช๋ฒ์งธ ๋ฐ์ดํฐ ์ ๋์ธ์ง ์๋ฏธํจ
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ฐ์์ ์ด ์๋ ์๋ ์์
- ํฌ์ธํฐ๋ฅผ ํตํด ๋ค์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ด ์ฝ์ , ์ญ์ ๊ฐ ์ฌ์
- ๋์ ์ด๋ฏ๋ก, ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์์ง ์์
- ๊ฒ์ ์ฑ๋ฅ์ด ์ข์ง ์์, ์ง์ ์ ์ธ ์ ๊ทผ์ด ๋ถ๊ฐ, ์ฒ์๋ถํฐ ์ฐพ์์ผํจ -> ํ์คํ๊ฒ ์ ํด์ ธ ์๋ ๋ฐ์ดํฐ๋ ๋ฐฐ์ด์ด ํจ์จ์
#1 ์์
python์์ list ๋ ์ผ๋ฐ์ CS์ list์ ์ข ๋ค๋ฅธ๋ฐ, array ๋ผ๊ณ ์๊ฐํ๋๊ฒ ํธํ๋ค.
python ์์ List๋ array์ ๊ฐ์ ์ญํ ์ ์ํํ๋ค.
1. ๋ค์ํ ๋ฐ์ดํฐ ํ์
์ ๋ด์์ ์๋ค.
2. ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ค.
3. ์ธ๋ฑ์ฑ๊ณผ ์ฌ๋ผ์ด์ฑ์ ์ง์, ํน์ ์์น์ ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
python ์์ list๋ '๋ฐฐ์ด(array)'์ '์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)'์ ํน์ฑ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
๋ด๋ถ์ ์ผ๋ก๋ ๋์ ๋ฐฐ์ด๋ก ๊ตฌํ ๋๋ฉฐ, ๋ฐฐ์ด์ ํน์ฑ์ ๊ฐ์ง๋ฉด์๋ ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ์กฐ์ ๋ ์ ์๋ค.
๋ํ, ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ฑ์ ๊ฐ์ง๋ค๊ณ ์ดํดํ ์ ์๋ ๋ถ๋ถ -> ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์๋์ ์ผ๋ก ์ฉ์ดํ๋ค๋ ์ .
๋ฐ๋ผ์, python์ list๋ 'array'๋ก ์ดํดํ๋๊ฒ์ ๋ถ์ ํํ๋ฉฐ, '๋์ ๋ฐฐ์ด'๋ก ์ดํดํ๋ ๊ฒ์ด ๋ ์ ํํ๋ค.
python์ list๋ 'indexing'๊ณผ 'slicing'์ ์ง์ํ๋ฏ๋ก ์ง์ ์ ์ธ ๋ฐ์ดํฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ ์ผ๋ฐ์ ์ธ 'linked list'์ ํน์ฑ๊ณผ๋ ๋ค๋ฅด์ง๋ง, pyhton ์ list๋ ๋ด๋ถ์ ์ผ๋ก '๋์ ๋ฐฐ์ด'๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
numbers = [1,2,3,4,5]
์ด๋ฐ numbers๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค, ํน์ ์์์ ์ ๊ทผํ๋ ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ด์ฌ์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก,
numbers[2] ๋ผ๋ฉด '3'์ ๋ฐํํ๋ค.
print(numbers[2]) # 3
์ง์ ์ ์ธ ํ์ด์ฌ์๋ array ๋ชจ๋์ด ์กด์ฌํ๋ค. list์ array์ ์ฐจ์ด๋ฅผ ๋ณด์.
# List
my_list = [1, "Hello", 3.14]
# Array
import array
my_array = array.array('i', [1, 2, 3, 4, 5]) # 'i'๋ integer๋ฅผ ์๋ฏธํฉ๋๋ค.
my_list ๋ ์ ์, ๋ฌธ์์ด, ์ค์ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์์๋ฅผ ํฌํจ.
๋ฐ๋ฉด my_array๋ ๋จ์ผ ํ์ ์ ์์๋ง์ ํฌํจํ๋ค.
๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ Array๊ฐ ๋ ํจ์จ์ ์ด๋ค.
-> ๋์ผํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ๋ง์ ์ ์ฅํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
my_array.append("Hello") # ์ค๋ฅ
my_array ์ hello๋ผ๋ string ๊ฐ์ array์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ฉด, array๊ฐ ์ ์ ํ์ ์ ๊ฐ๋ง์ ์ ์ฅํ๋๋ก ์ ์ธ ๋์๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๊ฐ์ธ์ ์ธ ์๊ฐ
Array
- ๋ฉ๋ชจ๋ฆฌ ์ ํ ๊ด๋ จ
- ๋ฐ์ดํฐ ํ์ ๊ณผ ๊ด๋ จ๋ ์ค๋ฅ ๋ฐฉ์ง
List
- ๋ฒ์ฉ์ ์ธ ๋ฐ์ดํฐ ๋ด๊ธฐ
- ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค์ ๋ด์ ๋