2014-09-30 5 views
0
Name Hair Eyes Shirt Glasses Smiling Hat 
Alice BROWN BLUE GREEN  YES YES  NO 
Bob  BROWN BROWN GREEN  YES NO  YES 
Dave BROWN BROWN GREEN  NO YES YES 
Emily BROWN HAZEL RED  YES YES YES 
Frank BROWN GREEN GREEN  YES YES  NO 
Isabelle BROWN HAZEL GREEN  YES YES  NO 
Mallie BROWN BLUE RED  YES YES  NO 
Nick BROWN BLUE RED  NO YES  NO 
Philip BROWN GREEN RED  NO YES  NO 
Quinn BROWN BROWN RED  NO YES  NO 
Robert BROWN BROWN RED  NO YES  YES 
Tucker BROWN BLUE BLUE  NO YES  NO 
Wendy BROWN BLUE RED  YES NO  NO 
Zander BROWN BROWN BLUE  NO YES NO 

를 만들기 위해 노력하고 나는 그것이 각 문자에 대해 너무 많은 시도를했다나는 이러한 문자를 가지고 의사 결정 트리를

불행하게도
if (g.hairIsColor(Color.BROWN)) 
    { 
    if(g.isWearingGlasses()) 
    { 
    if(g.shirtIsColor(Color.GREEN)) 
    { 
     k = "Bob"; 
     if(g.eyeIsColor(Color.GREEN)) 
     { 
     k = "Frank"; 
     } 
     if(g.eyeIsColor(Color.BLUE)) 
     { 
     k = "Alice"; 
     break outerloop; 
     } 
     if(g.eyeIsColor(Color.HAZEL)) 
     { 
     k = "Isabelle"; 
     } 
    } 
    if(g.eyeIsColor(Color.HAZEL)) 
    k = "Emily"; 
    if (g.isSmiling()) 
    k = "Mallie"; 
    } 
    else if(g.eyeIsColor(Color.BROWN)) 
    { 
    if (g.shirtIsColor(Color.RED)) 
    { 
     if(g.isWearingHat()) 
     k = "Robert"; 
     else 
     k = "Quinn"; 
    } 
    else if(g.shirtIsColor(Color.GREEN)) 
    k = "Dave"; 
    else 
    k = "Zander"; 
    } 
    else if(g.shirtIsColor(Color.RED)) 
    { 
    if(g.eyeIsColor(Color.BLUE)) 
    k = "Nick"; 
    if(g.eyeIsColor(Color.GREEN)) 
    k = "Philip"; 
    } 
    else if(g.eyeIsColor(Color.BLUE) && g.shirtIsColor(Color.BLUE)) 
    k = "Tucker"; 
} 

같은 의사 결정 트리를 만들려고 노력했다 누군가가 나를 도울 수 있는지 궁금 해서요 ? 나는 10 이하로 각 문자를 시도하려고하지만 if 문으로 50 %를 얻을 수 없다. 도움이 필요하십니까? 나는 이미 다른 머리 색깔을 분류했으나 갈색은 나를 괴롭혔다.

+0

누군가에게 숙제를 요청하면 사람들은 기꺼이 그것을하지 않을 것입니다. – StackFlowed

답변

0

고정 된 제 문제는 잘못된 첫 번째 결정에서 시작되어 잘못 처리 된 것입니다. 나는 눈 색깔의 다른 경우로 시작하여 거기에서 진행하고 내 문제를 해결했습니다.

1

if-then-else로하지 말라.

  1. 클래스가 유효 hashCode()equals() 방법
  2. Map<Key,String>를 작성하고 귀하의 게시물
를에있는 테이블의 내용을 초기화를 가지고 있는지 확인 속성을 보유 Key라는 새로운 클래스를 만듭니다

누군가를 찾아야 할 때 새로운 Key을 만들고 맵에서 조회 키로 사용하여 속성의 값을 설정하십시오. 조건 연산자 if 정보 0에 1 비트를 제공

Key k = new Key(name, hair, eyes, shirt, glasses, hat, smiling, ...whatever); 
String name = map.get(key); 
+0

if 진술은 프로젝트 수행 방법입니다. – Joe

+0

아야! 복잡한 결정 트리를 if-then-else 문으로 사용하는 것은 이해하고 유지하기가 어렵 기 때문에 _anti-pattern_입니다. 의사 결정 트리를 코드에 임베드하는 것보다 낫다. 이런 식으로해야하는 것이 유감입니다. 선생님이 더 나은 대안을 후속 조치 해 주시길 바랍니다. –

0

: 모발의 색은 일정하기 때문에

  • if hair color is brown은 제로 비트를 제공한다.

  • if glasses은 검색 공간을 절반으로 나누기 때문에 1 비트를 제공합니다. 전체 비트가 가능 이론에 네 개의 테스트로 각 사람을 식별 할 수 있습니다 제공하는 테스트를 사용

. 실제 데이터를 기반으로 좋은 테스트를 선택하면이 문제에 접근 할 수 있어야합니다. 그러나 각 테스트 분기마다 고유 한 논리가 필요합니다. 예를 들어, glasses = yes은 셔츠 색상에 대해 다음 테스트를 수행 할 수 있으며 glasses = no은 검색 공간의 각 분기를 절반으로 나누기 위해 모자에서 다음에 테스트 할 수 있습니다.

관련 문제