Как Вы возвращаете несколько значений и присваиваете их изменяемым переменным?

Если вы недостаточно разбираетесь в основной теории, чтобы напрямую применять анализ @ MohamedEnnahdiElIdri, почему бы просто не начать с тестирования кода?

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

public static long countwhat(int length) {
  long count = 0;
  for (int i = 0; i < length; i++) {
    for (int j = i; j < length; j++) {
      for (int k = i + 1; k <= j; k++) {
        count++;
      }
    }
  }
  return count;
}

Глядя на это, легче ли вывести гипотезу? Если нет, просто проверьте, пропорционально ли возвращаемое значение length в квадрате или length в кубе ...

public static void main(String[] args) {
  for (int l = 1; l <= 10000; l *= 2) {
    long count = countwhat(l);
    System.out.println("i=" + l + ", #iterations:" + count + 
      ", #it/n²:" + (double) count / l / l +
      ", #it/n³:" + (double) count /  l / l / l);
  }
}

... и обратите внимание, что одно значение не приближается к какой-либо константе с ростом l, а другое (не случайно, к той же самой константе, связанной с наибольшей степенью $ n $ в методологическом анализе).

11
задан svick 8 June 2012 в 10:57
поделиться

3 ответа

Вы не можете; нет синтаксиса для обновления «более одной изменяемой переменной» с помощью одного присваивания. Конечно, вы можете сделать

let newX, newY = Swap(x,y)
x <- newX
y <- newY
11
ответ дан 3 December 2019 в 07:14
поделиться

Чтобы расширить ответ Роберта:

let swap (x : int, y : int) = y, x
let mutable x = 5
let mutable y = 10
let mutable xy = x, y

xy <- swap xy

Делает как переменные, так и кортеж изменяемыми.

0
ответ дан 3 December 2019 в 07:14
поделиться

Код, который вы прокомментировали, не работает, потому что, когда вы пишете «x, y», вы создаете новый кортеж, который является неизменным значением, поэтому его нельзя обновить. Вы можете создать изменяемый кортеж, а затем перезаписать его результатом функции подкачки, если хотите:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

Я бы посоветовал изучить неизменную сторону F #, посмотрите, как вы можете использовать неизменяемые структуры для достижения того, что вы раньше можно было бы использовать изменяемые значения.

Роб

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

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