데이터 정보의 역순 대
역순 대 는 한 요소 서열 에서 일정한 크기 비교 방법 에 따라 서열 에서 두 요소 의 크기 순 서 를 뒤 바 꾸 는 조합 을 말한다.
A [1. n] 을 설정 하면 n 개의 다른 수 를 포함 하 는 배열 입 니 다. i < j 의 경우 A [i] > A [j] 가 있 으 면 (i, j) 는 A 중의 역순 대 라 고 합 니 다.
주어진 정렬 대기 서열 에 대해 그 중의 역순 대 에 대한 발견 과 복원 은 바로 정렬 이 해결 해 야 할 일이 다. 정렬 과정 에서 역순 대 를 먼저 발견 한 다음 에 복원 하 는 것 은 정렬 성능 이 향상 되 는 방법 을 연상 시 키 기 때문이다.
1. 한 번 의 복원 작업 으로 여러 그룹의 역순 을 복원 합 니 다.
eg: 총 21 쌍, 총 10 쌍.
7, 6, 5, 4, 3, 2, 1 - (1 과 7 교환) -- > 1, 6, 5, 4, 3, 2, 7
한 번 에 11 쌍 을 복원 처리 했다.
2. 한 번 에 조작 을 바 꾼 후, 가능 한 한 추가 적 인 역순 이 발생 하지 않도록 한다.
eg: 총 16 쌍, 총 11 쌍.
7, 6, 5, 1, 3, 2, 4 - (4 와 7 의 교환) -- > 4, 6, 5, 1, 3, 2, 7
한 번 에 5 쌍 을 복원 처리 하고, 또 한 쌍 이 더 생 겼 다.
내 가 관찰 한 비교 류 정렬 에서 빠 른 정렬 은 1 을 나타 내 는데 2 가 부족 하 다.합병 순 서 는 반대로 2 가 부족 하 다 는 것 을 보 여 준다.
역순 대 에 관 한 통계 알고리즘 코드 참조
/* Copyright (C) 2000-2007 Wang Pengcheng <[email protected]>
* Licensed to the Wang Pengcheng under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The LGPL licenses this file to You under the GNU Lesser General Public
* Licence, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.gnu.org/licenses/lgpl.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package mypackage.algorithm.unit02;
public class Inversion ...{
private static int tot;
/** *//**
*InsertionSort
*The time limit of this sort is O(n^2)
*<strong>O(n^2)</strong>
*@param element will be sorted
*/
private static <Type extends Comparable> void insertionSort(Type element[])...{
for(int j=1;j<element.length;j++)...{
Type key = element[j];
int i = j-1;
while( (i>=0)&&(element[i].compareTo(key)>0))...{
element[i+1] = element[i];
tot++;
i--;
}
element[i+1] = key;
}
}
/** *//**
*Merge used in the mergeSort
*<strong>O(n)</strong>
*@param element Type[] the elements to be merged
*@param p int the begin of the first elements
*@param q int the end of the first elements
*@param r int the end of the second elements
*/
private static <Type extends Comparable> void merge(Type element[],int p,int q,int r)...{
int nl = q-p+1;
int nr = r-q;
Type[] lElement,rElement;
lElement = (Type[])java.lang.reflect.Array.newInstance(element.getClass().getComponentType(),nl);
rElement = (Type[])java.lang.reflect.Array.newInstance(element.getClass().getComponentType(),nr);
for(int i=0;i<nl;i++)...{
lElement[i] = element[p+i];
}
for(int i=0;i<nr;i++)...{
rElement[i] = element[q+i+1];
}
int i=0,j=0;
int k = p;
while((i<nl)&&(j<nr))...{
if(lElement[i].compareTo(rElement[j])<=0)...{
element[k] = lElement[i];
i++;
}else...{
element[k] = rElement[j];
j++;
tot+=nl-i;
}
k++;
}
while(i<nl)...{
element[k] = lElement[i];
i++;
k++;
}
while(j<nr)...{
element[k] = rElement[j];
j++;
k++;
}
}
/** *//**
*mergeSort
*Sort the elements by the compareTo method
*<strong>O(nlgn)</strong>
*@param element Type[] that will be sorted
*@param p the begin of the list will be sorted
*@param r the end of the list will be sorted
*/
private static <Type extends Comparable> void mergeSort(Type element[],int p,int r)...{
if(p<r)...{
int q = (p+r)/2;
mergeSort(element,p,q);
mergeSort(element,q+1,r);
merge(element,p,q,r);
}
}
private static <Type extends Comparable> void mergeSort(Type element[])...{
mergeSort(element,0,element.length-1);
}
/** *//**
* Count the inversion number by O(nlgn)
* @param <Type> inversion number type
* @param element inversion number list
* @return count number of inversion
*/
public static <Type extends Comparable> int countMerge(Type element[])...{
tot=0;
mergeSort(element.clone());
return tot;
}
/** *//**
* Count the inversion number by O(n^2)
* @param <Type> inversion number type
* @param element inversion number list
* @return count number of inversion
*/
public static <Type extends Comparable> int countInsertion(Type element[])...{
tot=0;
insertionSort(element.clone());
return tot;
}
/** *//**
* @param args
*/
public static void main(String[] args) ...{
Integer[] a = ...{4,6,5,1,3,2,7};
System.out.println(Inversion.countMerge(a));
}
}
마지막 으로 명심 하 자.
《 이 개 복: 알고리즘 의 힘 》 알고리즘 을 따 는 것 은 컴퓨터 와 네트워크 에 국한 되 지 않 는 다.
컴퓨터 분야 밖의 예 를 들 어 고에너지 물리 연구 에 있어 서 많은 실험 들 이 매 초 에 몇 TB 의 데 이 터 를 얻 을 수 있다.그러나 처리 능력 과 저장 능력 이 부족 하기 때문에 과학자 들 은 처리 되 지 않 은 대부분의 데 이 터 를 버 려 야 한다.그러나 새로운 요소 의 정 보 는 우리 가 처리 하지 못 한 데이터 안에 숨 어 있 을 가능성 이 높다 는 것 을 알 아야 한다.마찬가지 로 다른 어떤 분야 에서 도 알고리즘 은 인간 의 삶 을 바 꿀 수 있다.예 를 들 어 인류 유전자 에 대한 연 구 는 알고리즘 때문에 새로운 의료 방식 을 발명 할 수 있다.국가 안 보 분야 에서 효과 적 인 알고리즘 은 다음 911 의 발생 을 피 할 수 있다.기상 에 있어 서 알고리즘 은 미래 천재 의 발생 을 더욱 잘 예측 하여 생명 을 구 할 수 있다.
그래서 만약 에 컴퓨터 의 발전 을 응용 과 데이터 가 급속히 증가 하 는 큰 환경 에 두 면 반드시 발견 할 것 이다.알고리즘 의 중요성 은 날로 줄 어드 는 것 이 아니 라 날로 강화 되 고 있다.
감사합니다.
참고서
토 마 스 H. C. 코 멘, 찰스 E. 레이 서 슨, 로 널 드 L. 리 베 스 트, 클 리 퍼 드 스타 인 기계공 업 출판사
은 인 곤, 도 영 뢰, 사 약 양, 성 현화청화대학 출판사
유 여 가, 황 량 청화대학 출판사
《 이 개 복: 산법 의 힘 》.http://www.ieee.org.cn/dispbbs.asp?boardID=60&ID=31651
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.