나는 A.I. "Maze of Life"퍼즐을 해결할 수 있습니다. 상태를 HashSet
에 저장하려고하면 모든 것이 느려집니다. 탐색 된 상태 집합없이 실행하는 것이 더 빠릅니다. 나는 상당히 노드 노드 (상태 저장)가 equals를 구현하고 hashCode
테스트가 HashSet
중복 상태를 추가하지 않는다는 것을 보여주는 것으로 확신한다. hashCode
함수를 재 작업해야 할 수도 있지만 느려지는 것은 HashSet
재진입 및 크기 조정입니다.최적의 HashSet 초기화 (스칼라 | Java)
나는 매우 많은 수의 초기 용량 설정을 시도했습니다,하지만 매우 느린 여전히 : 여기,
class QuickQueue[T](capacity: Int) {
val hashSet = new HashSet[T](capacity)
val queue = new Queue[T]
//methods below
더 많은 정보를 들면 :
val initCapacity = java.lang.Math.pow(initialGrid.width*initialGrid.height,3).intValue()
val frontier = new QuickQueue[Node](initCapacity)
여기에 빠른 큐 코드 해시 함수입니다. 에
override def hashCode(): Int = {
var sum = Math.pow(grid.goalCoords._1, grid.goalCoords._2).toInt
for (y <- 0 until grid.height) {
for (x <- 0 until grid.width) {
sum += Math.pow(grid((x, y)).doubleValue(), x.toDouble).toInt
}
sum += Math.pow(sum, y).toInt
}
return sum
}
어떤 제안을 설정하는 방법에 천천히 일을 실 거예요 HashSet
: 나는 두 배열의 바이트 그리드 값 및 액세스 그것을 사용하여 튜플을 저장? 탐험 한 국가를 기억하는 방법에 대한 또 다른 제안입니까?
P. java.util.HashSet
을 사용하고/
'hashCode'에서'Math.pow'에 대한 많은 호출이있었습니다! 해시 값을 캐시 할 수 있습니다. –
hashCode 함수가 너무 계산적으로 많이 사용되는 것처럼 보입니다. 빨리 조금 놀리는 것만으로도 훨씬 더 좋아 보일 것입니다. – hatchet
상태를 표현하기 위해 immutable 클래스를 사용하고 hashCode를 캐쉬하기 위해'val'을 사용할 것을 권한다. 또한 표준 라이브러리 모음에 바이트를 저장하면 직접 제공하는 해시 함수를 사용할 수도 있습니다. – Kane