Arrays: முழுமையான தொடக்க கையேடு
Array என்றால் என்ன?
Array என்பது programming-இல் மிக அடிப்படையான, அதிகம் பயன்படுத்தப்படும் data structure-களில் ஒன்று.
ஒரே variable-க்குள் பல values-ஐ வரிசையாக (ordered) சேமிக்க இது பயன்படுகிறது.
Array-இல் ஒவ்வொரு value-க்கும் index என்ற இடம் (position) இருக்கும்.
உறுப்புகள் ஒன்றன் பின் ஒன்றாக வரிசையில் இருப்பதால் arrays-ஐ linear data structures என்று சொல்வோம்.
Python குறிப்பு
Python-இல் array போல அடிக்கடி பயன்படுத்தும் structure-க்கு பெயர் list.
உதாரணம்:
marks = [85, 90, 78]
தொழில்நுட்ப ரீதியாக இது Python list; ஆனால் programming மற்றும் coding interview-களில் இந்த மாதிரி வரிசையான collection-க்கு பலர் array என்ற சொல்லையும் பயன்படுத்துவார்கள்.
இந்த பாடத்தில்:
- Array → பொதுவான programming concept
- Python list → Python-இல் அந்த concept-ன் செயல்பாட்டு வடிவம்
இதனால் பல programming மொழிகளிலும் பயன்படும் அதே core ideas-ஐ நாம் கற்றுக்கொள்ள முடியும்.
பல மொழிகளில் Arrays
மொழிக்கு மொழி implementation மற்றும் பெயர் மாறும்:
| Language | Structure |
|---|---|
| C | Array |
| C++ | Array / Vector |
| Java | Array / ArrayList |
| Python | List |
| JavaScript | Array |
| C# | Array / List |
பெயர் வேறுபட்டாலும் அடிப்படை idea ஒன்றே:
- பல values-ஐ ஒன்றாக சேமித்தல்
- Index மூலம் values-ஐ அணுகுதல்
- உறுப்புகளின் வரிசை-ஐ பேணுதல்
Arrays-ன் நன்மைகள்
1. வேகமான random access - O(1)
Index மூலம் நேரடியாக ஒரு element-ஐ அணுகலாம்.
arr = [10, 20, 30]
print(arr[1]) # 20
முந்தைய elements-ஐ ஒவ்வொன்றாக சோதிக்காமல், computer தேவையான position-க்கு நேராக செல்ல முடியும்.
2. வரிசைச் சேமிப்பு (sequential storage) திறமை
உறுப்புகள் order-இல் இருப்பதால் iteration மற்றும் sequential processing திறமையாக இருக்கும்.
3. பல data structures-க்கு அடித்தளம்
Stack, queue, hash table, heap, dynamic programming tables, graph representations போன்றவற்றுக்கு arrays முக்கிய அடிப்படை அல்லது inspiration ஆக அமைகின்றன.
Arrays-ன் வரம்புகள்
Arrays இவற்றில் மிகவும் திறமையானவை:
- வேகமான indexing
- Traversal
- Sequential processing
ஆனால்:
- நடுவில் insert செய்தல்
- நடுவில் delete செய்தல்
போன்றவை பெரும்பாலும் மெதுவாக இருக்கலாம்; elements contiguous-ஆ இருக்க shift செய்ய வேண்டி வரும்.
Indexing and Access
Indexing என்பது element-ன் position (index) தெரிந்திருந்தால் அதை அணுகுவது.
Python list / array-இல் முதல் இடம் பெரும்பாலும் index 0.
arr = [100, 200, 300]
print(arr[0]) # 100
print(arr[2]) # 300
விளக்கம்
- arr[0] → 100
- arr[1] → 200
- arr[2] → 300
ஏன் இது வேகமாக இருக்கும்?
Computer element எங்கே இருக்கிறது என்று கணக்கிட முடியும்.
எந்த index-ஐ access செய்தாலும் time complexity O(1).
செல்லாத index (invalid)
arr = [1, 2, 3]
# arr[5]
இது இல்லாத locker-ஐ திறக்க முயல்வது போன்றது.
மதிப்புகளை மாற்றுதல் - array_updates
நாம் array-ல் values-ஐ பார்ப்பது மட்டும் இல்லை, சில நேரங்களில் மாற்றவும் (update) வேண்டும்.
இது எப்படி புரியும்?
ஒரு locker-ஐத் திறந்து அதற்குள்ளிருக்கும் பொருளை மாற்றுவது போல.
உதாரணம் 1: அடிப்படை update
arr = [10, 20, 30]
arr[1] = 99
print(arr) # [10, 99, 30]
படிப்படியாக:
- Index
1-க்குச் செல்லவும் 20-ஐ99-ஆக மாற்றவும்
ஒரு இடம் மட்டுமே தொடுகிறது → O(1)
உதாரணம் 2: எல்லா values-க்கும் +5 சேர்க்க
arr = [10, 20, 30]
for i in range(len(arr)):
arr[i] = arr[i] + 5
print(arr) # [15, 25, 35]
ஒவ்வொரு element-யும் புதுப்பிக்கிறோம் → O(n)
முக்கிய கருத்து
- ஒரு index மட்டும் புதுப்பித்தல் → O(1)
- முழு array-யும் புதுப்பித்தல் → O(n)
செயலாக்கம் - array_processing
Processing என்றால் என்ன?
Array-இல் உள்ள ஒவ்வொரு value-க்கும் போய் ஏதேனும் வேலை செய்வது.
உதாரணம் 1: Sum கண்டுபிடிக்க
arr = [10, 20, 30]
total = 0
for num in arr:
total += num
print(total) # 60
உதாரணம் 2: Even எண்களின் எண்ணிக்கை
arr = [1, 2, 3, 4, 5, 6]
count = 0
for num in arr:
if num % 2 == 0:
count += 1
print(count) # 3
உதாரணம் 3: புதிய array உருவாக்க (double values)
arr = [1, 2, 3]
result = []
for num in arr:
result.append(num * 2)
print(result) # [2, 4, 6]
முக்கிய கருத்து
ஒவ்வொரு element-யையும் visit செய்ய வேண்டும் → O(n)
Coding-ல் மிக அடிக்கடி வரும் pattern இது.
உறுப்புகளை ஒப்பிடுதல் - array_comparison
Comparison என்றால்: இரண்டு values / neighbors-ஐ ஒப்பிட்டு முடிவு செய்வது.
பயன்பாடுகள்:
- Maximum கண்டுபிடிக்க
- Minimum கண்டுபிடிக்க
- Array sorted-ஆ இருக்கிறதா சோதிக்க
உதாரணம் 1: Maximum
arr = [5, 2, 9, 1]
max_val = arr[0]
for num in arr:
if num > max_val:
max_val = num
print(max_val) # 9
உதாரணம் 2: Minimum
arr = [5, 2, 9, 1]
min_val = arr[0]
for num in arr:
if num < min_val:
min_val = num
print(min_val) # 1
உதாரணம் 3: Array sorted-ஆ?
arr = [1, 2, 3, 4]
is_sorted = True
for i in range(len(arr) - 1):
if arr[i] > arr[i + 1]:
is_sorted = False
print(is_sorted) # True
முக்கிய கருத்து
ஒப்பீடுகள் பெரும்பாலும் array-யை முழுவதும் சுற்றி வரும் traversal-உடன் சேர்த்துதான் வருகின்றன.
மேற்கண்ட உதாரணங்களில் time complexity பொதுவாக → O(n)
உறுப்புகளை நீக்குதல் - array_deletion
Array-இல் சில நிலையில் deletion உடனடியாக அல்லது சுமை குறைவாக முடிவதில்லை.
ஏன்?
Array memory இணையான (contiguous) layout-ல் அமைந்திருக்கும்.
உதாரணம் 1: pop() பயன்படுத்தி நீக்குதல்
arr = [10, 20, 30, 40]
arr.pop(1)
print(arr) # [10, 30, 40]
உள்ளே என்ன நிகழும்?
Before: [10, 20, 30, 40]
Index: 0 1 2 3
Delete index 1
After: [10, 30, 40]
மீதமுள்ள elements இடப்புறம் shift ஆகும்.
உதாரணம் 2: ஒரு value-ஐ remove செய்தல்
arr = [10, 20, 30, 20]
arr.remove(20)
print(arr) # [10, 30, 20]
முதல் தோற்றம் மட்டும் நீக்கப்படும்.
உதாரணம் 3: எல்லா occurrences-ஐயும் வேறு பட்டியலாக சேகரிப்பு
arr = [10, 20, 30, 20]
result = []
for num in arr:
if num != 20:
result.append(num)
print(result) # [10, 30]
முக்கிய கருத்து
நடுவில் ஓட்டை உண்டாகும் deletion-ல் பெரும்பாலும் shifting → O(n)
அதனால் arrays-ல் அடிக்கடி deletion செய்வதை தவிர்க்க நினையுங்கள்.
இறுதி புரிதல்
| பகுதி | சுருக்கம் |
|---|---|
| Update (ஒரு index) | வேகம் → O(1) |
| Processing | முழு scan → O(n) |
| Comparison | traversal உடன் → தொடர்ச்சியாக O(n) |
| Deletion | shifting காரணம் → அடிக்கடி O(n) |
