2008-11-04 1 views
2

Я только что потерял 50% своего ответа на тест, потому что я написал код вместо алгоритма на моем среднесрочном периоде, наталкивая меня от A к C. Является ли код написания еще считающимся алгоритмическим представлением?Является ли написание кода еще считающимся алгоритмическим представлением?

Wikipedia: Algorithm Representation (поскольку стиль программирования в значительной степени на основе консенсуса)

EDIT: Хорошо, так что позвольте мне сделать несколько замечаний ясно:

  1. Испытание просили псевдо-код, который мы никогда не «определен» в классе; мы просто написали английский для наших алгоритмов.

  2. Это класс Java и выписал все решение в Java-методе вместе с комментариями. Все это было написано вручную, и потребовалось больше времени для записи, чем псевдокод. Я подумал, что будет более ясно.

  3. Как правило, я не стану говорить о таких вещах, но это разница между A и C, и у меня есть стипендия, едущая на экзаменах.

  4. Наконец, я делаю этот пост по двум причинам:

    4,1 Я хочу показать, что современное программирование сообщество думает о псевдокоде и алгоритмического представления.

    4.2 Я хочу знать, что приемлемо в «реальном мире»; Я программировал какое-то время, но я хочу в ближайшее время внести свой вклад в проекты с открытым исходным кодом, и я не хочу наступать на чьи-то пальцы. (Хотя я уверен, что эта тема имеет мало шансов подняться в реальном мире).

Снова, спасибо за любую помощь/совет.

ответ

5

Возможно, вы захотите привести пример. Если ваш код слишком сильно фокусируется на языковых особенностях, которые не являются частью алгоритма, то, вполне понятно, можно сказать, что у вас был неалгоритм, смешанный с вашим алгоритмом, что привело к некорректному результату.

I Почувствуйте рассуждение, цель обучения - показать, что вы поняли концепцию, а не наклоняться и галочкой все правильные поля.

Компьютер можно научить проходить университет, но компьютер не может научиться фактически думать о себе и применять знания.

Ешьте и изрыгайте менталитет, поэтому я никогда не окончил.


Что касается вашего последнего комментария, его важное значение для реализации псевдокода не определено.Там, как правило, повторно термины в нем, но не строгий язык больше, чем английский язык (в противном случае было бы быть язык программирования, который может быть обработан и выполнен дословно)

значение псевдокода является мясо из логики части системы и не должен беспокоиться чрезмерно о синтаксисе за «имеет смысл»

Часто это может сделать псевдокод и более лаконичныи более понятным.

Pseudocode также не полагается на то, что читатель имеет понимание «волшебного синтаксиса» на языке для его обработки, все, что им нужно понять, это используемые термины.

Если вы хотите дать среднему человеку алгоритм в perl, например, большинство людей просто умрет от ужаса, потому что они не видят сквозь стяжки линейного шума.

В то время как:

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

может сделать некоторые когерентное Sence кому-то разбирающийся в 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 

Внезапно оно становится менее двусмысленным, и больший процент людей может его понять.

Возможно, половина упражнений с написанием алгоритма - это упражнение «Не только вы должны доказать, что вы это понимаете, но также должны доказать, что вы можете объяснить свои рассуждения другим, которые ничего не знают об этой проблеме», который является жизненно важной способностью, в которой вы нуждаетесь. Если вы не можете сообщить, что вы сделали, никто не сможет его использовать.

есть и эта малоприятная проблема с кодом, который не существует в алгоритме, и что код может выглядеть права, но не может делать то, что вы думаете он делает, и если он Безразлично Не делайте это правильно, и вы не понимаете, люди, читающие код обратной инженерии, будут его загрязнять и скопировать сломанный алгоритм. нехорошо. алгоритм в человеческой форме лучше переводит «это то, что я хочу, чтобы он делал»

+0

> Компьютер можно научить проходить университет, но компьютер не может быть> еще научен, чтобы на самом деле думать для себя и применять знания. > Ешьте и изрыгайте менталитет, поэтому я никогда не окончил. Компьютер нельзя научить проходить достойный университет. – 2008-11-05 02:29:57

0

Все, что я знаю, это то, что вы не должны писать код до тех пор, пока у вас нет алгоритма.

+0

для чего-то простого, как пузырь-сортировка, вам нужно полное представление псевдокода? – Octaflop 2008-11-04 23:19:11

+0

Конечно, если вы впервые изучаете концепцию. Особенно во вводном курсе программирования, где не все слишком хорошо знакомы с синтаксисом. – AndyG 2008-11-04 23:27:57

+0

Хорошо сказано, SauceMaster. Octaflop, синтаксис является вторичным по отношению к более первичной проблеме того, как вы собираетесь решать определенную проблему. Если сортировка пузырьков будет выполнена, то реализация на любом языке должна быть тортами. – 2008-11-04 23:48:09

3

В этом случае вам нужно отнестись к профессору.

0

Проблема с использованием кода вместо псевдокода заключается в том, что теоретически можно предположить, что это был код, а не псевдокод. В любом случае, учитель оценивает вас за ваш ответ, а не за ваши знания - вам лучше отвечать на то, о чем вас просили, в том смысле, который нравится учителю. Да, мы все знаем, вы знаете лучше. Знаете, это никогда не плохое упражнение, чтобы попытаться рассуждать о чужом человеке. И, по крайней мере, в моей стране учитель имеет право свободно оценивать вас, поэтому ... ладите с ним!

2

Вам необходимо предоставить дополнительную информацию. Вас попросили использовать алгоритм, но предоставили код. Вы прокомментировали код? Сколько? (Я хотел бы видеть вопрос и ваш ответ, но, возможно, это требует слишком многого).

Так что я отвечу на основании собственного опыта.Если я прошу алгоритм, то я хочу что-то, что объясняет, на приличном английском языке, как решить проблему и/или удовлетворить требованиям вопроса. Диаграммы также хороши (иногда лучше). Абзац, точечная форма, что угодно - она ​​должна быть четкой, лаконичной и правильной.

Если вы предоставили мне код, который делает выше, то полные отметки. Однако, если вы поставляете код, который является чистым «языком» и довольно загадочным, тогда метки будут потеряны - более или менее в зависимости от того, насколько критический код на самом деле. Даже с кодом я бы хотел увидеть диаграмму, просто чтобы показать полное понимание понятий.

Одна из самых сложных вещей, с которыми мне приходится сталкиваться при обучении программированию, заключается в том, чтобы ученики могли писать БОЛЬШЕ, не меньше. Иногда мне приходилось напоминать им, что задание (или экзамен) не является записью в «самом запутанном конкурсе кода». ;-)

Cheers,

-R

0

Просто поговорить с профессором и спросить его, почему вы получили вопрос неправильно. Спросите его, каков будет правильный ответ, и какова принципиальная разница между ними.

Может быть, алгоритм, который вы написали, был неправильным?

0

Код - это алгоритм, написанный так, что машина может его выполнить. В этом определении нет ничего, что говорит о том, что он не предназначен для понимания человеком. Написала ли в Java затенение вашего алгоритма? Это определит, согласен ли я с вашим учителем.

2

Как грейдер для продвинутого курса алгоритмов, я бы всегда снимать баллы, если есть просто закодированное решение.

Некоторые вещи просто не могут быть выражены красноречиво в коде, как они могут на английском языке. Псевдокод - попытка выйти из строя синтаксиса компилятора и позволить некоторую выразительность. Это шаг в правильном направлении понимания, но не всегда достаточно.

Специально в классе алгоритмов всегда важно обеспечить доказательство правильности (будь то индукция, противоречие и т. Д.), А также обозначение большого О для пространственно-временной сложности вашего алгоритм.

Смежные вопросы