தரவு கட்டமைப்புகள்basics

Arrays: முழுமையான தொடக்க கையேடு

TT
Testlaa Team
April 26, 20265 min read

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]

படிப்படியாக:

  1. Index 1-க்குச் செல்லவும்
  2. 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-ல் பெரும்பாலும் shiftingO(n)

அதனால் arrays-ல் அடிக்கடி deletion செய்வதை தவிர்க்க நினையுங்கள்.


இறுதி புரிதல்

பகுதி சுருக்கம்
Update (ஒரு index) வேகம் → O(1)
Processing முழு scan → O(n)
Comparison traversal உடன் → தொடர்ச்சியாக O(n)
Deletion shifting காரணம் → அடிக்கடி O(n)

Tags:

Arraysஅடிப்படைதரவு கட்டமைப்புகோடிங்அல்கோரிதம்