Проблема с зобристским хешированием [дубликат]

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

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

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

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

2
задан PanJanek 4 May 2015 в 16:17
поделиться

3 ответа

Как я сказал , TT-записи поиска покоя будут редко использоваться. Из-за дорогого доступа к основной памяти его быстрее не пытаться атаковать TT и вычислять позицию. Если вы реализуете хеш-таблицу без списков переполнения и перезаписываете записи хэша, вы определенно перезаписываете только существующие записи, когда новая запись была найдена в «лучшей» глубине. Поэтому, когда вы начинаете заполнять хеш-таблицу, быстро нет возможности хранить запись TT, потому что есть лучшие записи, у которых нет «больше», чем максимальная глубина, такая как записи о покорении.

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

1
ответ дан Community 25 August 2018 в 11:16
поделиться

он должен быть отмечен флагом, возвращенным из quiescence search

. Я так не думаю. Как или когда вы будете использовать этот флаг?

Значение - это просто самое известное значение на этой глубине, итеративное углубление заменит его, когда это необходимо.

0
ответ дан Henk Holterman 25 August 2018 в 11:16
поделиться

Существует некоторая защита от неправильного использования значения TT ​​покоя. Запись TT сохраняет глубину, в которой было обнаружено значение, и поэтому оно будет использоваться только тогда, когда поиск будет в той же или более глубокой глубине поиска. Как вы сказали, TT не будет использоваться в узлах отпуска, поэтому это не наносит вреда, если значение получено из поиска quiecence или нет.

0
ответ дан TheSlater 25 August 2018 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: