나는 여기서 일하기 위해 노력해 왔던 프로젝트와 관련하여 약간의 글을 올렸으며 계속해서 디자인 문제에 시달리고 처음부터 디자인해야합니다. 그래서 내가하려는 일을 게시 할 수 있는지, 누군가 내가 원하는 결과를 얻을 수있는 방법을 이해하도록 도와 줄 수 있는지 궁금합니다.동적 프로그래밍을 사용하는 목록의 파티션
배경 :
내가 프로그래밍에 새로운 배우려고 노력 해요. 그래서 나는 기본적으로 목록을 가져 와서 목록에서 숫자 만 사용하여 각 번호를 분해하는 프로젝트에 관심이 많았다. 나는이 일을 쉽게 무력화 할 수 있었지만 Hbase, Hadoop 및 병렬 처리법을 배우기를 원했기 때문에 다양한 기계에서 프로세스를 깨뜨릴 수있는 방식으로 작업을 원했습니다. 나는 이것을하기위한 방법이 역동적 인 프로그래밍과 재귀를 사용하여 더 세분화 될 수있는 가능성의 테이블을 만드는 것이라고 생각했다.
예 :
나는 목록을 제출하는 경우 : [1,2, 4]
를 내가 {1: [[1]], 2: [[1, 1]], 4: [[2, 2]]}
을 얻어야한다. 기본적으로 말하는 것은 2 + 2 = 4, 1 + 1 = 2 및 1 = 1..so가 4를 만드는 모든 방법을보고자한다면이 목록 (데이터베이스에 있음)을 조회 할 수 있고 2 + 2 = 4를 본 다음 2. 2. 등을 세분화합니다. 조회 작업이 있지만 문제가있는 분석이 있습니다. 무차별 대입 (brute force)을 사용하면 hadoop이나 다른 도구를 사용하여 확장 할 수있는 방식으로 많은 수 (예 : 백만 개, 목록의 수는 1,000 개)를 사용할 수 없습니다. 여기에 가능한 결과를 좀 더 예는 다음과 같습니다
[1,2, 3, 4] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]]}
[1,2, 3, 4, 6, 10] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]], 6: [[2, 4], [3, 3]], 10: [[4, 6], [2, 2, 2, 2, 2]]}
[10, 30, 50] = 50: [[10, 10, 30]], 30: [[10, 10, 10]]}
이 접근 방식의 논리는 내가 백만 숫자 목록을 보내 그래서 만약 그것이 목록에서 다음 가능한 데이터를 COMPUT 시간이 걸리지 않을 것입니다 그것은 수 그것을 빠르게하고 심지어 hadoop 클러스터로 확장 할 수 있습니다.
이 코드가 작동하도록 만든 코드는 here이지만이 문제는 디자인 문제를 해결하는 방법에 관한 것입니다. 나는 이것이 파티션 문제이고 주위를 둘러 보았고 내가하려고했던 것의 훨씬 단순한 버전을 발견했다. (정확하게는 내가 뭘하려고하는지 정확히 알지 못한다. 숫자를 분해하고 특정 것을 사용하지 않기 때문이다. 그것을하기위한 데이터 세트.
질문 :
그래서 다행스럽게도 필자는 분명 내가 뭘하려고 오전 설명했다. 동적 프로그래밍을 사용하여 파이썬에서 목록의 파티션 테이블을 작성하여 배율을 조정할 수 있도록 읽기/공부/학습해야하는 것은 무엇입니까? 그저 취미이고 시간에 민감하지는 않지만 3 달 넘게이 작업을하고 있으며 처음부터 시작해야하는 디자인 문제가 발생할 때마다 느낀다. 이 방법을 올바로 구현하려면 어떻게해야합니까? 내가 봤 거든 배낭 문제 및 파티션 문제에 대한 해결책을 찾았지만 그들은 학교 일을 더 많은 것 같아요 대규모 데이터 세트로 확장 할 수 있도록 만들어지지 않았습니다.
누군가가 내게 통찰력을 줄 수 있기를 바랍니다. 그러나 관계없이이 책을 읽어 주셔서 감사합니다.
이 질문에 답변 해 주셔서 감사합니다. 프랭크. 전 동적 인 프로그래밍이 기본적으로 사전 계산 된 테이블을 기반으로 생성하는 데 도움이 생각하지만, 나는 그것에 대해 생각하고 어쩌면 내가 전체 목록에 동적 함수를 제공 할 필요가 없다는 생각이 들었습니다. 다소 독립적입니다. 예를 들어, 4는 [2,2]로 나눌 수 있고 2는 [1,1]이 될 수 있지만, 독립형으로 보이기 때문에 동일한 CPU에서이 작업을 수행 할 필요는 없습니다. 또한 CPU 시간을 절약하기 위해 전체 목록을 계산하지 않았지만 다음 변수 만 생각했습니다. – Lostsoul
그러나 나는 당신의 솔루션을 완전히 이해하지 못합니다. 나는 다른 사람들 (DP에 대해 말할 때)이 나에게 똑같은 표를 보여줄 것을 보았지만, [1,4]는 무엇을 의미 하는가? 1은 4를 생산할 수 있습니까? 그렇다면 어떻게 [1,2,4]의 목록을 사용하여 5를 해결할 수 있을까요? 정답은 [4 + 1]이어야하지만 목록을 생성하여 그 결과를 얻는 방법을 모르겠습니다. – Lostsoul
이 접근법에서 [1,4]는 1 + 4가 5를 구성하는 것과 같이 읽히는 점에서 솔루션의 일부입니다. 첫 번째 단계에서는 다른 가능한 합계 만 생성하지만이 합계의 값은 아직 고려하지 않습니다 . – Frank