Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 카운팅 정렬을 사용하는 중앙값 및 모드

<시간/>

크기가 n인 배열이 있다고 가정하고 카운팅 정렬 기술을 사용하여 중앙값과 모드를 찾아야 합니다. 이 기술은 배열 요소가 제한된 범위에 있을 때 유용합니다. 요소가 {1, 1, 1, 2, 7, 1}이고 모드가 1이고 중앙값이 1.5라고 가정합니다. 중앙값이 무엇이며 모드가 무엇인지 봅시다 -

  • 중앙값은 정렬된 숫자 목록의 중간 숫자입니다.
  • 모드는 목록에서 가장 많이 발생하는 요소입니다.

중앙값과 모드를 얻으려면 다음 단계를 따라야 합니다.

  • 입력 배열의 크기가 n이라고 가정
  • 이전 개수를 다음 인덱스로 합산하기 전에 개수 배열을 가져옵니다.
  • 저장된 최대값의 인덱스는 주어진 데이터의 모드입니다.
  • 최대 요소가 두 개 이상 있는 경우 그 중 하나를 사용할 수 있습니다.
  • 값을 mode라는 별도의 다른 변수에 저장 .
  • 카운트 정렬의 일반적인 처리를 계속합니다.
  • 정렬된 배열에서 n이 홀수이면 median은 정렬된 배열의 가장 가운데에 있는 요소이고, n이 짝수이면 중간에 있는 두 개의 요소를 취하여 그 평균을 구하여 중앙값을 구합니다.
  • 값을 median이라는 별도의 다른 변수에 저장합니다.

예시

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
   if (isRepresentedInDDigits(num, d, base))
   return true;
   return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

출력

Can be represented