2014-11-09 2 views
0

자바 :Java에서 Random을 사용할 때 수동으로 시드해야합니까?

무엇을 알고 있습니까? Random.setSeed(long seed);입니다. 나는 종자가 무엇인지, 그리고 종자가 용도에 따라 어떻게 변하는지를 안다. 일정 시간이 지나도 시퀀스가 ​​반복되지 않거나 변수 (예 : 시스템 클럭)를 사용하여 시드가 자동으로 조작되도록 시드를 수동으로 변경해야합니까?

시드를 지정하지 않으면 동일한 프로그램을 다시 실행해도 생성자에서 시드를 조작해야하지만 시드를 주기적으로 변경해야합니다 (각 시드와 함께 시드가 변경되는 것은 아닙니다). 용도)?

명확한 설명 :

씨의 모든 사용에 따라 변화하지만, 어떤 점에서 씨앗이 무작위가 구축되었을 때 그것이 숫자가된다.

Random.setSeed(System.currentTimeInMillis())으로 전화해야합니까? 한번 사용하면 순서가 반복되지 않을 것입니다.

/** 
* Creates a new random number generator. This constructor sets 
* the seed of the random number generator to a value very likely 
* to be distinct from any other invocation of this constructor. 
*/ 
public Random(); 

씨앗을 설정 (또는 생성자에 씨앗을 공급하는) 당신이 pseuodo 난수의 동일한 순서를 생성 할 경우에 유용합니다

+0

[무작위 클래스의 시드로 가장 적합한 숫자] 가능한 복제본 (http://stackoverflow.com/questions/17201735/best-number-as-a-seed-for-random-class) – Joe

+0

나는 의사 소통에 문제가있다. 종자는 매 사용마다 바뀝니다. 사용 후에는 랜덤 (Random)이 만들어지고 그 지점부터 시퀀스가 ​​반복되기 시작했을 때의 번호가됩니다. 시스템 시계 시퀀스를 사용하여 시드를 수동으로 한 번 설정하면 결코 반복되지 않습니다. 하지만 Random 클래스가 자체적으로 수행합니까? 링크 된 질문이 내 질문에 응답하지 않습니다. – WVrock

답변

4

원하는대로 달라집니다. "무작위"로 반복적으로 원한다면 종자를 고쳤습니다. 그렇지 않으면 종자를 수정하거나 바꿀 이유가 거의 없습니다. 시드의 좋은 이유는 다음과 같습니다.

  • 테스트. 따라서 무질서의 특정 패턴이 매번 동일하게 나타납니다.
  • 평가. 따라서 서로 다른 테스트 케이스는 동일한 값의 순서를 가지므로 공정하게 비교할 수 있습니다.

시드를 변경하거나 독립적 인 시드가있는 임의의 생성기가 여러 개인 경우 새로운 임의의 개체를 만듭니다.

+0

새 번호가 생성 될 때마다 시드가 일부 계산에 사용되며 결과 숫자가 새 시드가됩니다. 일부 사용 후에는 시드가 처음 설정되었을 때와 동일하게됩니다. 이 시점 이후에 생산 된 숫자는 생산 된 첫 번째 숫자와 동일하게됩니다. 그 시점에서 반복을 피하기 위해 씨앗을 손으로 놓을 수 있습니다.내 질문에이 작업을 수행해야합니까 또는 시드가 반복을 피하기 위해 Random 클래스에 의해 자동으로 변경됩니다. – WVrock

+1

나는 종자를 감싸기 전에 숫자를 많이 얻어야한다고 생각한다. 방금 코드를 살펴본 후 임의로이 테스트를 수행하는 것을 볼 수 없습니다. 나는 그랬다면 놀랄 것입니다. next()를 많이 호출하면 next를 호출하면 성능에 대해서도 걱정할 수 있습니다. 모든 추가 조건부가 도움이되지 않습니다. 이 문제에 대해 정말로 염려한다면 별도의 코드를 작성하고 임의의 숫자 (일부 시드 포함)를 생성하고 시퀀스가 ​​반복 될 때까지 얼마나 오래 있는지 확인하십시오. – Dan

+0

귀하의 의견은 내가 찾고있는 것입니다. – WVrock

0

는 매개 변수가없는 생성자는 이미 처리한다 코드를 연속적으로 실행합니다 (디버깅 목적으로 유용 할 수 있음).

+0

당신이 말한 바에 따르면 그것이 건설 될 때 씨앗을 설정하지만 씨앗을 날아 다니는 것에 대해서는 아무 것도 말하지 않습니다. 일부 사용 후에 동일한 순서를 반복하도록 바인딩 된 시드를 변경하지 않습니다. – WVrock

+0

@WVrock 기존 Random 인스턴스의 시드를 설정하는 것은 seed를 인수로 받아들이는 생성자를 사용하여 새로운 Random 인스턴스를 생성하는 것과 같은 효과를냅니다. – Eran

1

Random 개체를 생성 한 후에 시드 개체를 계속 업데이트 할 필요없이 "임의"로 유지하십시오.

관련 문제