another question에서 나는 중국 우체부 문제에 대한 특정 세트를 생성하는 것을 포함하여 훌륭한 답을 제공 받았다.재귀 파이썬 메소드를 자바로 변환하는 가장 좋은 방법은 무엇입니까?
대답은 제공을했다 :
def get_pairs(s):
if not s: yield []
else:
i = min(s)
for j in s - set([i]):
for r in get_pairs(s - set([i, j])):
yield [(i, j)] + r
for x in get_pairs(set([1,2,3,4,5,6])):
print x
이 의지 출력의 욕망 결과 :이 거의 정확하게 내가 의사 쓰기 얼마나 때문에
[(1, 2), (3, 4), (5, 6)]
[(1, 2), (3, 5), (4, 6)]
[(1, 2), (3, 6), (4, 5)]
[(1, 3), (2, 4), (5, 6)]
[(1, 3), (2, 5), (4, 6)]
[(1, 3), (2, 6), (4, 5)]
[(1, 4), (2, 3), (5, 6)]
[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 6), (3, 5)]
[(1, 5), (2, 3), (4, 6)]
[(1, 5), (2, 4), (3, 6)]
[(1, 5), (2, 6), (3, 4)]
[(1, 6), (2, 3), (4, 5)]
[(1, 6), (2, 4), (3, 5)]
[(1, 6), (2, 5), (3, 4)]
이 정말 파이썬의 표현력을 보여줍니다 알고리즘에 대한 코드. 나는 특히 수확량의 사용법과 세트가 일류 시민으로 취급되는 방식을 좋아합니다.
그러나 거기에 내 문제가 있습니다.
1.Duplicate 자바로 구성 수율 반환의 기능 :
은 무엇에 가장 좋은 방법이 될 것입니다? 대신 목록을 유지하고이 목록에 부분 결과를 추가하는 것이 가장 좋을까요? yield 키워드를 어떻게 처리할까요?
2. 세트 취급에 대한 책임은 있습니까? 나는 아마도 Set 인터페이스를 구현 한 Java 콜렉션 중 하나를 사용할 수 있으며 removeAll()과 같은 것을 사용하여 설정의 차이를 줄 수 있다는 것을 알고있다. 이 경우에 당신이 무엇을 할 것입니까?
궁극적으로이 방법을 가능한 한 간결하고 직관적 인 방법으로 축소하려고합니다. 이 메서드의 java 버전의 반환 형식이 int 배열 또는 이와 유사한 목록을 반환 할 가능성이 있다고 생각합니다.
이 방법을 Java로 변환 할 때 위의 상황을 어떻게 처리합니까?
불행히도 Java는 'yield'와 닮은 것이 없습니다. 스레드 및 메시지 전달을 사용하여 근사치를 계산할 수 있지만 그 결과는 매우 복잡하고 매우 비효율적이며 아마도 현재 수행중인 작업의 정신이 아닐 수도 있습니다. –
@Marcelo : 스레드와 전혀 무슨 상관이 있습니까? – doublep
실? 어떻게 이것을 재현하기 위해 스레드를 사용합니까? – Beothorn