
double res = exp((1/n) * log(x));
Блог о математике, программировании, алгоритмах. И немного о работе операционной системы Linux.

double res = exp((1/n) * log(x));
— мощность поддерева, с корнем в j-той вершине данного дерева. Нумерация здесь соответсвует обходу в ширину, а корень дерева имеет нулевой индекс. То есть, мы берем все ребра исходящие из корня дерева и делим это множество на два. Ссуммируем мощность подмножеств, которые начинаются с вершин, в которые входят эти ребра, и делим одну сумму на другую.
void
getPartition(unsigned n, unsigned m)
{
if (n < m) {
throw out_of_range("N must be greater then M");
}
unsigned sum = 0;
vector< unsigned > partition;
partition.resize(m);
// заполнение массива случайными значениями
for (unsigned i = 0; i < m; i++) {
partition[i] = rand() % n;
}
partition[partition.size() - 1] = n;
// сортировка
sort(partition.begin(), partition.end());
// вычитаение
for (unsigned i = m - 1; i > 0; i--) {
partition[i] = partition[i] - partition[i - 1];
}
int diff = 0;
// балансировка
do {
for (unsigned i = 0; i < m; i++) {
if (partition[i] < 1) {
partition[i]++;
diff--;
}
if (diff < 0) {
if (partition[i] > 1) {
partition[i]--;
diff++;
}
}
}
} while (diff != 0);
// вывод на экран вместе с суммой всех элементов для проверки
for (unsigned i = m - 1; i > 0; i--) {
cout << partition[i] << " ";
sum += partition[i];
}
sum += partition[0];
cout << partition[0] << " " << sum;
cout << endl;
}
sudo apt-get install xrdpПосле этого, мы уже можем подключаться к нашему серверу, но по-умолчанию используется протокол VNC. С этим видом подключения у меня возникли проблемы переключения раскладок клавиатуры (по умолчанию удаленная сессия видела только одну раскладку en_US). Настроить переключение удалось только с бубном и через IBus, а не через xkb. К тому же подключение более чем 5 машин вешало сеть. Я решил по-пробовать rdp.
svn://server1.xrdp.org/srv/svn/repos/main/x11rdp_xorg71Итак, качаем исходник куда-нибудь, а потом собираем.
cd ~/ mkdir temp cd temp svn co svn://server1.xrdp.org/srv/svn/repos/main/x11rdp_xorg71 cd x11rdp_xorg71 sudo mkdir /opt/x11 sudo ./buildx.sh /opt/x11В последней строчке мы сказали собирающему скрипту, чтобы он положил все собранное в каталог /opt/x11. У меня во время сборки скрипт вывалился с ошибкой и пожаловался, что нет библиотеки zlib. Ставим:
sudo apt-get install zlib1g-devи запускаем скрипт заново. Он не будет повторять ту работу, что уже сделал.
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
int
main(int argc, char** argv)
{
using namespace std;
srand(time(NULL));
vector<vector<int> > matrix;
#define size 1000
matrix.resize(size);
for (int i = 0; i < size; i++) {
matrix[i].resize(size);
for (int j = 0; j < size; j++) {
matrix[i][j] = 0;
}
}
for (int i = size - 1; i > 0; i--) {
/**
* (rand() % i) - случайное число в множестве [0, i)
* i-тый столбец
*/
matrix[rand() % i][i] = 1;
}
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (matrix[i][j] == 1) {
cout << i << " -> " << j << ";" << endl;
}
}
}
}
И на закуску небольшой пример:0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0Дерево, представленное этой матрицей будет выглядеть так:
flex — генератор лексических анализаторов, bison — синтаксических. Оба эти пакета действуют по одной и той же схеме: они берут описание грамматики (для flex этот файл содержит описание лексем с помощью регулярных выражений, для bison — описание грамматики в формате близком к BNF) и выдают файлы, содержащие C-программу, которая занимается разбором входного текста. Исторически сложилось так, что работают они в связке, а мануалы для них отдельные. Схема синтаксического разбора входного текста выглядит так:
java -jar antlrworks-1.3.1.jar
При установке некоторых пакетов в Ubuntu (8.04) начала возникать ошибка:
install-info: No dir file specified; try --help for more information. dpkg: не удалось обработать параметр <название пакета> (--configure): подпроцесс post-installation script возвратил код ошибки 1 При обработке следующих пакетов произошли ошибки: <название пакета>
Осмотр пре- и постинсталляционных скриптов пакетов, при установке которых возникали ошибки (кэш пакетов находится в папке /var/cache/apt/archives), показал, что ошибка возникает именно на команде install-info.
Некоторые google-мучения подсказали, что нужно проверить версии установленных приложений.
numlock@oligocheta:~$ whereis install-info install-info: /usr/sbin/install-info /usr/local/bin/install-info /usr/share/man/man8/install-info.8.gz numlock@oligocheta:~$ /usr/sbin/install-info --version Debian install-info version 1.14.25. ... numlock@oligocheta:~$ /usr/local/bin/install-info --version install-info (GNU texinfo) 4.13 ...
Я попытался поменять местами значения переменной PATH '/usr/sbin:' и '/usr/local/bin:'. но это не привело к должному эффекту. Поэтому я просто переименовал символическую ссылку install-info в install-info-gnu (в папке /usr/local/bin), чтобы dpkg находил не его, а версию для Debian.
numlock@oligocheta:~$ sudo mv /usr/local/bin/install-info /usr/local/bin/install-info-gnu
Все заработало.
Рецепт взят из Naveen Kumar Molleti's Tech Blog