python 의 운행 속도 에 대하 여
너무 느 린 것 같 아서 c 버 전의 같은 프로그램 을 찾 았 습 니 다.
#include
#include
#include
int is_prime(int i)
{
int j;
for(j=2;j=i)
return 1;
}
int main()
{
clock_t start, finish;
double duration;
int i;
start = clock();
for(i=2;i<=10000;i++)
{
if(is_prime(i)==1)
{
printf("%d\t",i);
}
}
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("
%f seconds
", duration);
return 0;
}
실행 결 과 는 0.05 초 이내 이 며, 파 이 썬 버 전 을 손 쉽게 썼 습 니 다. numba 를 추가 하려 고 시도 하면, 결 과 는 numba 를 추가 하지 않 는 것 보다 40 배 빠 를 것 입 니 다.
import numba
import time
start = time.time()
@numba.jit
def primeNumber(start, end):
x = 0 #
for i in range(start, end + 1):
result = True
for j in range(2, i-1):
if i % j == 0:
result = False
if result == True:
# print(i,end='\t')
x += 1
# if x % 10 == 0: # 10
# print()
primeNumber(0,10000)
print("
totally take: {} second".format(time.time()-start))
처음에 운행 시간 은 0.32 초 정도 이 고 몇 번 운행 한 후에 내부 시스템 이 최적화 되 었 고 시간 은 0.16 초 정도 로 바 뀌 었 을 것 이다.더 빨리 할 수 있 을까요?나 는 반드시 할 수 있 을 것 이 라 고 믿는다. 이것 은 cuda 가 필요 하 다. 그러나 본인 이 현재 사용 하고 있 는 컴퓨터 는 mac 이다.
이 알고리즘 에 큰 문제 가 있다 는 것 을 인정 해 야 한다 고 생각 합 니 다. 그리고 제 가 이렇게 쓴 코드 는 어 리 석 습 니 다. 다음은 is 를 다시 쓰 겠 습 니 다.prime 함수 로 하나의 숫자 가 질 수 인지 아 닌 지 를 판단 합 니 다.
import time
import math
start = time.time()
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
for i in range(10000):
if is_prime(i):
print(i)
print('totally took {} seconds'.format(time.time() - start))
어, 느낌 이 대단 해. 사용 시 0.012: totally took 0.012696027557305 seconds 의 서로 다른 알고리즘 차이 가 매우 크다.
생각 보다 6 초 넘 었 어.하지만 is 에서prime 앞 에 함수 numba. jit 를 붙 여 볼 까요?totally took 0.1609799861907959 seconds 시간 은 0.16 으로 바 뀌 었 고 오히려 프로그램의 운행 에 지장 을 주 었 다.이것 은 도대체 어디 에 상황 이 생 겼 는 지 알 아 볼 필요 가 있 고, numba 라 이브 러 리 와 그의 고급 용법 도 좀 더 알 아야 한다.
지금도 c 알고리즘 을 업데이트 할 필요 가 있 습 니 다.
#include
#include
#include
#include
int is_prime(int i)
{
int j;
if(i > 1){
if(i == 2){
return 1;
}
if(i % 2 == 0){
return 0;
}
for(j = 3; j < sqrt(i); j++){
if(i%j==0){
return 0;
}
}
return 1;
}
return 0;
}
int main()
{
clock_t start, finish;
double duration;
int i;
start = clock();
for(i=2;i<=10000;i++)
{
if(is_prime(i)==1)
{
printf("%d\t",i);
}
}
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf("
%f seconds
", duration);
return 0;
}
그리고 gcc - o is 사용prime is_prime. c 컴 파일 해 보 세 요. 실 행 된 결 과 는 0. 01520 seconds 입 니 다. 네, 아무래도 가장 빠 른 python 보다 10 배 빠 릅 니 다.사실 나 는 틀림없이 더 빠 른 알고리즘 이 있 을 것 이 라 고 믿는다.나중에 업데이트 할 게 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.