본문 바로가기

C Language

상대적 순위의 인덱스로 변환 | Converting to index for relative order

상대적 순위의 인덱스로 변환 ❘ Converting to index for relative order

이 indexing 함수는 주어진 리스트를 인덱싱하여 원래 값 대신 상대적 순위를 나타내는 인덱스로 변환합니다. 함수의 각 부분을 상세히 설명하겠습니다:


함수 목적
원본 리스트의 각 요소를 해당 요소의 상대적 순위(인덱스)로 대체합니다. 이는 정렬 알고리즘을 단순화하고 최적화하는 데 유용합니다.


매개변수
stacks: 리스트와 관련 정보를 포함하는 구조체에 대한 포인터


주요 변수
idx_list: 새로운 인덱스 값을 저장할 배열
idx: 현재 처리 중인 인덱스
max_idx: 현재 최대값의 인덱스


메모리 할당:
malloc을 사용하여 idx_list에 메모리를 할당합니다.
할당 크기는 원본 리스트의 크기와 동일합니다.
메모리 할당 실패 시 ps_error 함수를 호출합니다.


초기화:
idx를 stacks->list_size - 1로 설정하여 가장 큰 인덱스부터 시작합니다.


주요 루프:
idx가 0 이상인 동안 반복합니다.
이는 모든 요소에 대해 인덱싱을 수행함을 의미합니다.


최대값 찾기:
find_list_max 함수를 호출하여 현재 리스트에서 최대값의 인덱스를 찾습니다.
이 함수는 아마도 현재 최대값을 찾고, 그 값을 특별한 값(예: INT_MIN)으로 대체하여 다음 반복에서 무시되도록 할 것입니다.


인덱스 할당:
idx_list[max_idx] = idx는 현재 최대값의 위치에 현재 인덱스를 할당합니다.
이는 가장 큰 값부터 시작하여 각 요소에 내림차순으로 인덱스를 부여합니다.


인덱스 감소:
idx--로 다음 낮은 순위를 준비합니다.
메모리 정리 및 교체:
원본 리스트 stacks->list의 메모리를 해제합니다.
stacks->list에 새로 생성된 idx_list를 할당합니다.


주요 포인트
이 함수는 원본 값을 보존하지 않고 순위로 대체합니다.
결과적으로 가장 큰 값은 list_size - 1의 인덱스를, 가장 작은 값은 0의 인덱스를 갖게 됩니다.
이 방법은 원본 값의 범위에 관계없이 0부터 list_size - 1까지의 연속된 정수로 작업할 수 있게 해줍니다.
이 인덱싱 과정은 후속 정렬 작업을 단순화하고, 특히 값의 범위가 넓거나 불규칙할 때 유용합니다.

 

This indexing function converts the given list by replacing original values with indices representing their relative rank. Here's a detailed explanation of each part of the function:


Function Purpose
Replaces each element of the original list with its relative rank (index). This is useful for simplifying and optimizing sorting algorithms.


Parameter
stacks: A pointer to a structure containing the list and related information


Key Variables
idx_list: An array to store the new index values
idx: The current index being processed
max_idx: The index of the current maximum value


Memory Allocation:
Uses malloc to allocate memory for idx_list.
The allocation size is equal to the size of the original list.
Calls ps_error function if memory allocation fails.


Initialization:
Sets idx to stacks->list_size - 1, starting from the largest index.


Main Loop:
Repeats while idx is greater than or equal to 0.
This means indexing is performed for all elements.


Finding Maximum Value:
Calls find_list_max function to find the index of the current maximum value in the list.
This function likely finds the current maximum and replaces it with a special value (e.g., INT_MIN) to be ignored in the next iteration.


Index Assignment:
idx_list[max_idx] = idx assigns the current index to the position of the current maximum value.
This assigns indices in descending order, starting from the largest value.


Index Decrement:
idx-- prepares for the next lower rank.


Memory Cleanup and Replacement:
Frees the memory of the original list stacks->list.
Assigns the newly created idx_list to stacks->list.


Key Points
This function does not preserve original values but replaces them with ranks.
As a result, the largest value gets an index of list_size - 1, and the smallest value gets an index of 0.
This method allows working with consecutive integers from 0 to list_size - 1, regardless of the range of original values.
This indexing process simplifies subsequent sorting operations and is particularly useful when the range of values is wide or irregular.