문제

중간고사 때 알고리즘 대신 코드를 작성해서 A에서 C로 떨어졌기 때문에 시험에서 정답의 50%를 잃었습니다.코드 작성이 여전히 알고리즘 표현으로 간주됩니까?

위키피디아:알고리즘 표현 (프로그래밍 스타일은 거의 합의 기반이므로)

편집하다:좋습니다. 몇 가지 사항을 명확히 하겠습니다.

  1. 테스트는 우리가 클래스에서 실제로 "정의"한 적이 없는 의사 코드를 요구했습니다.우리는 알고리즘에 영어를 썼습니다.

  2. 이는 Java 클래스이며 주석과 함께 Java 메소드로 전체 솔루션을 작성했습니다.이 모든 것은 손으로 작성되었으며 의사 코드보다 작성하는 데 시간이 더 오래 걸렸습니다.더 명확해질 거라고 생각했어요.

  3. 평소라면 그런 문제에 대해 문제 삼지 않겠지만, 그건 A와 C의 차이이고, 시험에 장학금도 타고 있어요.

  4. 마지막으로 제가 이 포스팅을 하게 된 이유는 두 가지입니다.

    4.1 나는 현대 프로그래밍 커뮤니티가 의사 코드와 알고리즘 표현에 대해 어떻게 생각하는지 보여주고 싶습니다.

    4.2 "현실 세계"에서 무엇이 허용되는지 알고 싶습니다.한동안 프로그래밍을 해왔지만 곧 오픈 소스 프로젝트에 기여할 수 있고 싶고 누구의 발가락도 밟고 싶지 않습니다.(비록 이 주제가 현실 세계에 나올 가능성은 거의 없다고 확신하지만).

다시 한 번 도움/조언을 보내주셔서 감사합니다.

도움이 되었습니까?

해결책

당신은 예를 들고 싶을 수도 있습니다. 코드가 알고리즘의 일부가 아닌 언어 특성에 너무 많이 초점을 맞추면 이해할 수 없을 정도로 알고리즘과 혼합되지 않았으므로 결과가 잘못되었다고 말할 수 있습니다.

나는 추론에 대해 느낀다. 학습의 요점은 당신이 개념을 이해하고 모든 올바른 상자를 구부리고 진드기를하지 않는다는 것을 보여주는 것입니다.

컴퓨터는 대학을 통과하도록 가르 칠 수 있지만 컴퓨터는 아직 스스로 생각하고 지식을 적용하도록 가르 칠 수 없습니다.

먹고 사고를 되 찾는 것은 내가 결코 졸업하지 않은 이유입니다.


최근 의견과 관련하여, 의사 코드를 실현하는 것이 중요하지 않습니다. 일반적으로 재사용 용어가 있지만 영어보다 엄격한 언어는 아닙니다 (그렇지 않으면 ~이다 구두로 구문 분석하고 실행할 수있는 프로그래밍 언어)

그만큼 중요성 의사 코드는 다음과 같습니다 논리 시스템의 일부이며 '말이된다'를 넘어 구문에 대해 지나치게 걱정할 필요가 없습니다.

종종 이것은 의사 코드를 더 많이 만들 수 있습니다 간결한 그리고 더 이해할 수 있습니다.

의사 코드는 또한 언어에서 '마법 구문'을 이해하는 것을 이해하는 독자에게 의존하지 않으며, 처리하기 위해 이해해야 할 모든 용어만으로도 이해해야합니다.

예를 들어 평범한 사람에게 Perl의 알고리즘을 제공한다면, 대부분의 사람들은 선 노이즈의 스크 리드를 지나치지 않기 때문에 공포로 죽을 것입니다.

하는 동안:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= $_ ; 
       s/id//g; 
   }
   return [$b,$a];
}

Perl에 정통한 누군가에게 일관된 일관성을 만들 수 있습니다. 평균 코드 리더에게 그들이 얻는 모든 것은 "당신이 방금 말 했습니까?"응답입니다. 문서화하는 것은 많은 도움이되지 않습니다.

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

갑자기 덜 모호하게되고 더 많은 사람들이 그것을 이해할 수 있습니다.

따라서 알고리즘을 작성하는 운동의 절반은 "당신이 그것을 이해해야 할뿐만 아니라 문제에 대해 전혀 모르는 다른 사람들에게 당신의 추론을 설명 할 수 있다는 것을 증명해야한다"는 운동입니다. 필요한 능력. 당신이 한 일을 전달할 수 없다면 아무도 그것을 사용할 수 없습니다.

코드에는이 불쾌한 작은 문제가 있습니다. 알고리즘에는 존재하지 않습니다. 바라보다 맞지만, 당신을하지 않을 수도 있습니다 생각한다 그것은 그것이 제대로하지 않고, 당신이 깨닫지 못하면, 코드 리버스 엔지니어링을 읽는 사람들은 그것을 파울하고 복사합니다. 고장난 연산. 안좋다. 인간 형태의 알고리즘은 '이것은 내가 원하는 것입니다'

다른 팁

이 경우 교수를 연기해야합니다.

더 많은 정보를 제공해야 합니다.알고리즘을 요청받았지만 코드가 제공되었습니다.코드에 주석을 달았나요?얼마나 많이?(질문과 답변을 보고 싶지만 너무 많은 것을 요구하는 것일 수도 있습니다.)

그럼 제 경험을 바탕으로 답변해드리겠습니다.알고리즘을 요청한다면 문제를 해결하는 방법 및/또는 질문의 요구 사항을 충족하는 방법을 괜찮은 영어로 설명하는 것을 원합니다.다이어그램도 좋습니다(때로는 더 좋음).단락, 요점 형식 등 무엇이든 명확하고 간결하며 정확해야 합니다.

위의 작업을 수행하는 코드를 제공하면 만점입니다.그러나 순수한 "언어"이고 다소 암호적인 코드를 제공하면 코드가 실제로 얼마나 암호적인지에 따라 표시가 손실됩니다.코드를 사용하더라도 개념에 대한 완전한 이해를 보여주기 위해 다이어그램도 보고 싶습니다.

프로그래밍을 가르칠 때 제가 직면하는 가장 어려운 일 중 하나는 학생들이 더 많이 작성하도록 하는 것입니다.때때로 나는 과제(또는 시험)가 "가장 난독화된 코드 경연대회"의 출품작이 아니라는 점을 그들에게 상기시켜야 했습니다.;-)

건배,

-아르 자형

고급 알고리즘 코스의 그레이더로서 언제나 단순히 코딩 된 솔루션이있는 경우 포인트를 제거하십시오.

어떤 것들은 단순히 영어로 가능한 것처럼 코드로 웅변 적으로 표현할 수 없습니다. 의사 코드는 엄격한 컴파일러 구문이 없어지고 표현력을 허용하려는 시도입니다. 이해력의 올바른 방향으로 나아가는 단계이지만 항상 충분하지는 않습니다.

특히 알고리즘 클래스에서는 항상 정확성 증명 (유도, 모순 등)과 알고리즘의 공간 및 시간 복잡성에 대한 BIG-O 표기법을 제공하는 것이 중요합니다.

내가 아는 것은 알고리즘이있을 때까지 코드를 작성해서는 안된다는 것입니다.

의사 코드 대신 코드를 사용하는 데있어 문제는 이론적으로 말해서 의사 코드가 아닌 코드라고 가정 할 수 있다는 것입니다. 어쨌든, 교사는 당신의 지식이 아니라 당신의 응답에 대해 당신의 반응을 얻습니다. 당신은 당신이 요구 한 것을 좋아하는 것에 대답하는 것이 더 나을 것입니다. 예, 우리 모두는 알고 있습니다. 그러나 다른 사람의 길을 추론하려고 시도하는 것은 결코 나쁜 운동이 아닙니다. 그리고 적어도 우리나라에서 선생님은 당신을 자유롭게 평가할 권리가 있습니다.

교수와 이야기하고 왜 질문이 잘못되었는지 물어보십시오. 그에게 정답이 무엇인지, 그리고 둘 사이의 근본적인 차이가 무엇인지 물어보십시오.

당신이 쓴 알고리즘이 정확하지 않았을 수 있습니까?

코드는 기계가 실행할 수 있도록 작성된 알고리즘입니다. 그 정의에는 인간이 이해할 수 없다고 말하는 것이 없습니다. Java로 작성된 글쓰기가 알고리즘을 가렸습니까? 그것은 내가 당신의 선생님과 동의했는지 여부를 결정할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top