나는 바보 같은 질문 일지 모르지만 알고리즘이 5 초 안에 100,000 개의 정수를 정렬한다고 가정 해 봅시다. 같은 알고리즘이 5 초 만에 100,000 개의 문자열을 정렬합니까, 아니면 정렬 시간이 다를 것입니까?알고리즘은 정수와 문자열을 동일한 시간 일관성으로 정렬합니까?
답변
문자열 비교는 정수 비교보다 비쌉니다. 정수 비교는 일반적으로 CPU에서 발생하는 연산입니다. 반면에 문자열 비교는 소프트웨어로 구현해야합니다. 따라서 문자열 비교는 문자열에있는 문자만큼 많은 작업을 수행 할 수 있습니다.
--dmg
간단한 대답은 아니오입니다. 문자열 정렬은 일반적으로 정수 정렬보다 훨씬 오래 걸립니다.
"paper"와 "papa"를 정렬하는 것을 고려하십시오. "paper"가 처음 4자를 비교하여 "papa"보다 더 큰 것을 알아야합니다. 큰 문자열, 특히 문구를 사용하면 더 길어질 수 있습니다.
대조적으로 정수 비교는 단일 명령을 사용합니다.
정렬을 수행하려면 이러한 종류의 비교를 반복해야합니다. 그래서 문자열 정렬은 거의 항상 더 오래 걸릴 것입니다.
문자열은 더 많은 시간이 걸릴 것입니다. 정수는 비트 연산 집합과 비교됩니다. 문자열과 관련하여 각 바이트 또는 문자는 정수에 필요한만큼 동일한 연산과 비교되어야합니다.
사실상, 문자열 집합을 정렬하는 것은 최악의 경우 모든 문자열에서 총 문자 수를 비교하는 것을 포함합니다. 최악의 경우는 모든 문자열이 동일하다는 것입니다. 모든 문자열은 끝에 도달 할 때까지 동일해야합니다 (strcmp()는이 방식과 비교됩니다)
Q : 알고리즘은 정수와 문자열을 같은 시간 일관성으로 정렬합니까?
A : 의미하는 경우 "asymptotic"/"Big O notation" : 예. 문자열은 분명히 오래 걸릴 것입니다 ... 그러나 비례하여 길어.
사전 순으로 정렬하고 빠른 정렬을 사용한다고 가정합니다. 문자열과 정수를 비교하는 자체 비교 함수를 작성합니다.
정수는 매우 간단합니다. 문자열의 값은 인덱스와 같지만 그 내용을 비교해야합니다. 빠른 정렬은 O (nlogn)의 평균 시간 복잡도에서 실행되며, 최악의 경우 O (n^2)이며, 선택한 피벗이 현재 파티션의 최소 또는 최대 일 때 발생합니다. 모든 것이 순조롭게 진행된다고 가정 할 것이고, 현재 우리는 평균적인 사건을 가지고 있습니다.
시간 복잡도는 비교 함수입니다. 정수는 O (1)이 가장 빠르며, 문자열을 비교하는 것은 O (min (len (a), len (b)), worst case 첫 번째 문자가 다른 경우 O (1)의 경우
그렇기 때문에 문자열을 고려하면 속도는 느리지 만 나쁜 것은 아니며 최악의 경우는 드물게 발생합니다. (Barney Goven은 , 두 개의 비슷한 문자열 비교)
알고리즘의 시간 복잡성에 대해 이야기 할 때, 우리는 일반적으로 데이터가 커지면 그 성장에 대해 이야기합니다 .paulsm4가 말했듯이, 비례하여 길어집니다.
- 1. 동일한 문자열을 그룹화하는 가장 좋은 알고리즘은 무엇입니까?
- 2. 정수와 문자열을 함께 입력하십시오.
- 3. mysql은 문자열을 어떻게 정렬합니까?
- 4. 문자열을 정수와 비교하는 방법 Postgres
- 5. 정수와 문자열을 단일 문자열에 연결하기
- 6. 문자열을 정수와 비교하는 방법은 무엇입니까?
- 7. 정수와 문자열을 배열 값으로 결합
- 8. 문자열을 정수와 구분하여 저장하는 방법
- 9. Objective C에서 정수와 문자열을 연결하십시오.
- 10. 정렬 기준 정수와 날짜 시간
- 11. 정수와 시간 값을 더하는 것
- 12. 문자열을 "짧게"하기위한 알고리즘은 무엇입니까?
- 13. mysql : 정수와 문자열을 비교하여 true를 반환하십시오.
- 14. 쉘 스크립트에서 정수와 문자열을 비교하는 방법은 무엇입니까?
- 15. 정수와 문자열을 비교하는 mysql SQL 쿼리
- 16. 텍스트 파일에서 정수와 문자열을 정렬하는 방법은 무엇입니까?
- 17. Json MySql은 두 개의 정수와 문자열을 얻습니다.
- 18. 파이썬은 어떻게 문자열을 정수와 비교할 수 있습니까?
- 19. 문자열에 대한 선형 시간 정렬 알고리즘은 무엇입니까?
- 20. 시간 값의 파이썬 목록을 어떻게 정렬합니까?
- 21. 이 코드로 어떻게 동일한 값을 정렬합니까?
- 22. 패턴 일치 시간 세리에 선택할 알고리즘은?
- 23. () 시간 알고리즘은 (2) 시간 알고리즘보다 항상 빠르지 않습니다.
- 24. 독서 정수와
- 25. 스케줄링 알고리즘은
- 26. 정수와 소수 부분을 구하십시오.
- 27. MD5 알고리즘은 항상 동일한 문자열에 대해 동일한 출력을 생성합니까?
- 28. 정수와 문자열 충돌
- 29. C에서 정수와 문자열을 모두 사용하여 배열 인쇄 - 작동하지 않습니다.
- 30. 정수와 문자열을 가진 양식 데이터를 보내는 방법이 있습니까?
벤치 마크는 어떻습니까? (대답은 대부분, 아니 ...). –
문제는 정렬하는 문자열의 길이입니다. 알고리즘이 작고 정수의 크기와 비교할 수있는 경우 정렬 알고리즘은 알고리즘에 따라 다르지만 동일하지 않은 경우 매우 짧을 수 있지만 일반적으로 문자열입니다. 정수보다 비교하는 데 더 많은 시간이 걸립니다. 부분적으로는 문자열이 일반적으로 비교되는 방식과 정수가 CPU에서 하나의 명령으로 비교 될 수 있다는 점 때문입니다. – Nomad101
두 정수를 비교하는 것은 대부분의 프로세서에서 단 하나의 연산 (즉, 매우 빠르고 일정한 시간에 실행)입니다. 문자열을 비교하는 것은 일정한 시간에 실행되지 않으며 대부분 매우 긴 문자열은 비교가 간단하고 짧은 문자열보다 오래 걸릴 수 있습니다. –