Вычислите процент во времени выполнения

Ну, это зависит от вида структуры, но необходимо сделать структуру так, чтобы это тщательно и тихо обнаружило и обработало возможные конфликты.

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

Вам, возможно, также понадобилась бы к черепку структура так, чтобы несколько работ потоков над отдельными объектами, и затем позже синхронизировали/повторно комбинировали.

6
задан Sony 26 November 2009 в 23:40
поделиться

8 ответов

Почему бы не сделать это случайным образом. Для каждой транзакции выберите случайное число от 0 до 100. Если это число меньше вашего «процента», выполните аудит транзакции. Если число больше вашего «процента», не делайте этого. Я не знаю, удовлетворяет ли это вашим требованиям, но в течение длительного периода времени у вас будет правильный процент аудита.

Если вам нужен точный алгоритм типа «пропустить 2, проверить один, пропустить 2, проверить один» , вам, вероятно, повезет с адаптацией алгоритма рисования линий .

17
ответ дан 8 December 2019 в 04:08
поделиться
    if percent > random.randint(1,100):
        print("audit")
    else:
        print("skip")
2
ответ дан 8 December 2019 в 04:08
поделиться

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

Имейте два счетчика: целочисленный и действительный. Если усеченная часть реального счетчика = целочисленный счетчик, проверка выполняется, в противном случае - нет, как это:

Integer counter   Real counter

1                 1.333333: audit transaction
2                 2.666666: audit transaction
3                 3.999999: audit transaction
4                 truncated(5.333333) = 5 > 4 => do NOT audit transaction
5                 5.333333: audit transaction

Увеличивайте реальный счетчик только тогда, когда его усеченная версия = целочисленный счетчик. Всегда увеличивайте значение счетчика целых чисел.

В коде:

var p, pc: double;
    c: integer;
begin
  p := 100 / Percentage;
  pc := p;
  for c := 1 to NrOfTransactions do begin
    if trunc(pc) = c then begin
      pc := pc + p;
      Do audit on transaction c
    end  
  end;
end;
2
ответ дан 8 December 2019 в 04:08
поделиться

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

// setup
int transactionCount = 0;
int auditCount = 0;
double targetAuditRatio = auditPercent/100.0;

// start of processing
transactionCount++;
double actualAuditRatio = auditCount/transactionCount;

if (actualAuditRatio < targetAuditRatio) {
    auditCount++;
    // do audit
}
// do processing
1
ответ дан 8 December 2019 в 04:08
поделиться

Попробуйте следующее:

1) Сохраняйте процент аудита в десятичном формате.
2) Для каждой транзакции свяжите с ней случайное число (от 0 до 1)
3) Если случайное число меньше процента, проверьте транзакцию.

процесс аудита - если вы проверяете каждую вторую транзакцию, это позволяет ошибочным транзакциям ускользать.

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

1
ответ дан 8 December 2019 в 04:08
поделиться

Не тестировалось, но в модуле random есть функция sample . Если бы транзакции были списком транзакций, вы бы сделали что-то вроде:

import random

to_be_audited = random.sample(transactions,len(transactions*100/percentage))

Это сгенерирует список to_be_audited , который будет случайной, не дублирующейся выборкой транзакций.

См. Документацию по случайному

0
ответ дан 8 December 2019 в 04:08
поделиться

Вы можете постоянно «запрашивать» каждый аудит, используя счетчик. Например,

ctr = 0;
percent = 50
while(1) {
   ctr += percent;
   if (ctr >= 100) {
      audit;
      ctr = ctr - 100;
   } else
      skip
}

Вы можете использовать числа с плавающей запятой (однако это приведет к некоторой непредсказуемости) или умножить 100 процентов на sth, чтобы получить лучшее разрешение.

На самом деле нет необходимости использовать генератор случайных чисел.

0
ответ дан 8 December 2019 в 04:08
поделиться

Ключевое слово, которое вы ищете, это Доступность : С веб-сайта:

Первое и, возможно, самое важное правило доступности Интернета. Не все используют последнюю версию Internet Explorer, со всеми надстройками и программами, которые могут потребоваться для вашего веб-сайта. Различные технологии просмотра, каждая со своими собственными требованиями к доступности, могут включать:

  • Lynx browser - текстовый браузер без поддержки таблиц, CSS, изображений, JavaScript, 2) Для каждой транзакции свяжите с ней случайное число (от 0 до 1)
    3) Если случайное число меньше процента, проверьте транзакцию.

3
ответ дан 8 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

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