Как стать автором
Обновить
35
0
Лиференко Даниил @Frommi

Пользователь

Отправить сообщение
Не 0, а None, так как это скорее отсутствие присутствия, чем присутствие отсутствия.
Думаю важным дополнением к статье ещё было бы что-нибудь про игры-головоломки, развивающие логику. Самый известный пример, наверно, Portal.
Я хочу отметить, что по-моему изворачиваться и отписываться в учёбе не есть плохо, только если понимать то, что и как нужно сделать, но чего делать не хочется и не имеет особого смысла. Точнее не изворачиваться, а просто не делать, потому что это пустая трата времени и сил. А вот если ребёнок даже и не пытается понять, а старается просто «заработать оценки» списывая, скрывая оценки от родителей, зубря вместо понимания и т. д., то это уже плохо. А таких детей, к сожалению, в моей прошлой школе было подавляющее большинство.

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

Тут почти в тему будет цитата Жореса Алфёрова (цитата не точная, пишу по памяти с 1-го сентября): «Мне любой младший научный сотрудник, сделавший какое-нибудь, даже маленькое открытие, а они всегда находятся, кажется важнее любого политика или президента любой страны».
Возможно я ошибаюсь, но мне кажется, что особой разницы между «XP» и деньгами для ученика начальной школы нет. Обычно дети в таком возрасте ещё мало самостоятельно оперировали с деньгами.

И вообще, я имел в виду, что базироваться на оценках, как на главном результате учебной деятельности ребёнка, не стоит. По мне так лучше найти хобби, развивающие мозг (ну, или спорт), что кажется ребенку «крутым» (математика, оригами, музыка, прога, живопись, и т. д.), а не играть в «дворфа 4 уровня», полезнее будет.

P. S. Математика и прога, наверно, скорее уже к средней школе относится. Туда ещё можно что-нибудь вроде радиоконструкторов отнести.
Мне всегда идея давать деньги за учёбу казалось ужасной. Во-первых, потому что если школьник не хочет учится, но введена такая система, то он не будет получать удовольствия от учёбы и будет стараться изворачиваться и отписываться, а не учится. Ну и во-вторых, потому что оценки, в действительности, не самое главное в учёбе, по-моему важнее найти что-нибудь «своё», вот как я, например, олимпиадное программирование.
Не путайте условие и состояние динамики. Состояние не обязательно должно быть прямо ответом на задачу — в моем состоянии это сообщения ровно за j нажатий, так что ответ будет суммой всех состояний. Если бы состояние было такое, как Вы описали — «не больше j нажатий», то такой (как в статье) пересчёт бы не работал, ведь тогда бы мы посчитали некоторые сообщения несколько раз.
Как написали ниже, я решил задачу не оптимально, можно и одномерно решить.
Да, но ответ на задачу теперь получается так:

public static int getAns() {
    int result = 0;
    for (int i = 0; i < k + 1; i++) {
        result += smsNaive(i);
    }
    return result;
}
Да, действительно, что-то я жутко ступил. Мне показалось, что тогда некоторые сообщения будут посчитаны несколько раз…
В принципе да, хотя слово «фрактал», на мой взгляд, тут не самое уместное. А ещё бывают всякие интересные случаи, например, когда одна задача решается с помощью значений состояний другой задачи, которая в свою очередь, основывается на значениях первой — такая запутанная динамика. Сейчас уже пример не вспомню, но такое действительно иногда встречается.
Любая динамика определяется рекурсивно — без этого нельзя свести задачу к меньшим подзадачам. Если Вы имели в виду это, то да, но реализация рекурсивной функцией обязательна только если порядок обхода был ленивым.
Да, это самый универсальный способ, но есть пара тонкостей. Во-первых, она практически всегда требует больше памяти и времени на вызов рекурсивной функции. Во-вторых, не получится оптимизировать память, забывая про предыдущие «слои» состояний. Про это написано в «Небольшие оптимизации».
Аким Кумок скорее всего произнёс эту фразу, когда был преподавателем в Летней Компьютерной Школе. Особо много видимо про него не почитать, но я знаю, что он получил серебро на международной олимпиаде по информатике среди школьников в 2008 году.
Немного переписал это предложение, вроде стало читабельней, но всё-таки лучше такие комментарии писать в личку автора.
До Вашего комментария я ни разу не слышал про этот интересный подраздел, так что если я и напишу статью, то только когда почитаю побольше и порешаю какие-нибудь задачки на него. Вроде здесь неплохо написано, но на английском. На русском ничего нашёл, так что вероятность того, что я напишу что-нибудь есть.
Как активный участник всевозможных кружков, школ, лагерей и олимпиад по спортивному программированию скажу, что если Вы хорошо разбираетесь в алгоритмах и можете их внятно рассказывать, то легко можно попасть, например, в Летнею Компьютерную Школу.

На счёт быть учителем в школе могу сказать, что тех, кто хочет учиться в обычных школах мало. Если Вы живёте в большом городе, то лучше попробовать попасть в физ.-мат. школу, там концентрация тянущихся к знаниям гораздо больше.
Судя по названию файла «delphi_hamilton.exe» и по скриншоту это всё-таки не «сравнение разных методов поиска кратчайшего пути в графе», а сравнение разных эвристических методов поиска гамильтонового цикла, видимо кратчайшего, да ещё и, кажется, в полном графе. Из вашего описания это не вполне ясно. Хотя да, задача звучит занимательно.
Заранее извиняюсь за стиль.

Код dfs'а на Delphi
function g(v: integer): integer;
var
  i: integer;

begin
  result := 1;
  if (vis2 and (1 shl (v - 1)) = 0) then
    vis2 := vis2 + (1 shl (v - 1));

  for i := 1 to n do
    if (vis2 and (1 shl (i - 1)) = 0) and (matrix[v][i] = 1) then
      result := result + g(i);
end;

function dfs(v, deep: integer): integer;
var
  i, cnt, top: integer;

begin
  vis := vis + (1 shl (v - 1));

  result := get_ans_by_key(vis, v);
  if result <> -1 then
    exit;

  result := deep;
  global_ans := max(global_ans, result);

  for i := 1 to n do
    vis2[i] := vis[i];
  cnt := g(v);

  if deep + cnt - 1 > global_ans then begin

    top := 0;
    for i := 1 to n do
      if (matrix[v][i] = 1) and (vis and (1 shl (i - 1)) = 0) then begin
        inc(top);
        res[top] := dfs2(i);
        id[top] := i;
      end;

    if top <> 0 then begin
      qsort(1, top);

      for i := 1 to min(k, top) do
        if (matrix[v][id[i]] = 1) and (vis and (1 shl (id[i] - 1)) = 0) then
          result := max(result, dfs(id[i], deep + 1));
    end;
  end;

  put_key(vis, v, result);
  vis := vis - (1 shl (v - 1));
end;

Начнём с того, что всё что написано в статье — эвристики. Это значит, что точного доказательства, а значит и отношения оптимального времени работы dfs'а и bfs'а вам вряд ли кто-то скажет. Тем более, оно точно варьируется от задачи к задачи и от качества функции g(s).

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

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность