Почему реализация PyPy работает намного медленнее, чем python? - PullRequest
1 голос
/ 16 июня 2019

Я пишу код на основе BFS, в котором необходимо рассчитать ближайшее расстояние от полей, отмеченных 1. Расстояние между полями, отмеченными 1, равно 0.

Это проблема из Google Kickstart 2019 раунд A: Посылки.

Ссылка: https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050e01/000000000006987d

import time 
def multibfs (office, r, c):

    #office is a 2-D list with 0's and 1's
    visited = [[False]*c for x in range (r)] 
    values = [[1e9]*c for x in range (r)] #closest distance

    queue = [] #Bfs queue

    for i in range (r): 
        for j in range (c): 
            if office[i][j]==1: 
                visited[i][j]=True 
                values[i][j]=0 
                queue.append([i,j]) 

    while queue: 
        s = queue.pop(0)
        iPos = s[0]
        jPos = s[1]

        for i in range (iPos-1, iPos+2):
            if i in range (0, r): 
                if visited[i][jPos] == False:
                    queue.append([i, jPos])
                    visited[i][jPos] = True
                    values[i][jPos] = values[iPos][jPos] + 1

        for j in range (jPos-1, jPos+2):
            if j in range (0, c):
                if visited[iPos][j] == False:
                    queue.append([iPos, j])
                    visited[iPos][j] = True
                    values[iPos][j] = values[iPos][jPos] + 1

    return values 

tic=time.time() 
o = [[1]*250 for x in range (250)]
val = multibfs(o, 250, 250) 
print(time.time()-tic)

для r и c, равных 250, и для офиса, имеющего только 1, время выполнения для python3.6 составляет примерно 0,7 с. Я ожидал, что реализация PyPy будет намного быстрее, но это займет гораздо больше времени

...