Data update
This commit is contained in:
parent
ed705008a8
commit
0df55f9f24
2196 changed files with 32999 additions and 3075 deletions
|
|
@ -0,0 +1,61 @@
|
|||
void main() {
|
||||
List<int> array = List.generate(4, (i) => i);
|
||||
HeapsAlgorithm algorithm = HeapsAlgorithm();
|
||||
algorithm.recursive(array);
|
||||
print('');
|
||||
algorithm.loop(array);
|
||||
}
|
||||
|
||||
class HeapsAlgorithm {
|
||||
void recursive(List array) {
|
||||
_recursive(array, array.length, true);
|
||||
}
|
||||
|
||||
void _recursive(List array, int n, bool plus) {
|
||||
if (n == 1) {
|
||||
_output(array, plus);
|
||||
} else {
|
||||
for (int i = 0; i < n; i++) {
|
||||
_recursive(array, n - 1, i == 0);
|
||||
_swap(array, n % 2 == 0 ? i : 0, n - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _output(List array, bool plus) {
|
||||
print(array.toString() + (plus ? ' +1' : ' -1'));
|
||||
}
|
||||
|
||||
void _swap(List array, int a, int b) {
|
||||
var temp = array[a];
|
||||
array[a] = array[b];
|
||||
array[b] = temp;
|
||||
}
|
||||
|
||||
void loop(List array) {
|
||||
_loop(array, array.length);
|
||||
}
|
||||
|
||||
void _loop(List array, int n) {
|
||||
List<int> c = List.filled(n, 0);
|
||||
_output(array, true);
|
||||
bool plus = false;
|
||||
int i = 0;
|
||||
while (i < n) {
|
||||
if (c[i] < i) {
|
||||
if (i % 2 == 0) {
|
||||
_swap(array, 0, i);
|
||||
} else {
|
||||
_swap(array, c[i], i);
|
||||
}
|
||||
_output(array, plus);
|
||||
plus = !plus;
|
||||
c[i]++;
|
||||
i = 0;
|
||||
} else {
|
||||
c[i] = 0;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Heap's Algorithm
|
||||
sig = 1
|
||||
proc generate k . ar[] .
|
||||
if k = 1
|
||||
print ar[] & " " & sig
|
||||
sig = -sig
|
||||
return
|
||||
.
|
||||
generate k - 1 ar[]
|
||||
for i to k - 1
|
||||
if k mod 2 = 0
|
||||
swap ar[i] ar[k]
|
||||
else
|
||||
swap ar[1] ar[k]
|
||||
.
|
||||
generate k - 1 ar[]
|
||||
.
|
||||
.
|
||||
ar[] = [ 1 2 3 ]
|
||||
generate len ar[] ar[]
|
||||
Loading…
Add table
Add a link
Reference in a new issue