标签 algorithms 下的文章

关于聚类

聚类算法是这样的一种算法:给定样本数据Sample,要求将样本Sample中相似的数据聚到一类。有了这个认识之后,就应该了解了聚类算法要干什么了吧。说白了,就是归类。 
首先,我们需要考虑的是,如何衡量数据之间的相似程度?比如说,有一群说不同语言的人,我们一般是根据他们的方言来聚类的(当然,你也可以指定以身高来聚类)。这里,语言的相似性(或者身高)就成了我们衡量相似的量度了。在考虑存在海量数据,如微博上各种用户的关系网,如何根据用户的关注和被关注来聚类,给用户推荐他们感兴趣的用户?这就是聚类算法研究的内容之一了。 

Read more...


题目描述 Description

有N个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱子上无盘子),但绝不允许发生柱子上出现大盘子在上,小盘子在下的情况,现要求设计将A柱子上N个盘子搬移到C柱去的方法。

Read more...


题目

一幢 200 层的大楼,给你两个鸡蛋,如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从第 n-1 层扔鸡蛋,都不碎。这两只鸡蛋一模一样,不碎的话可以扔无数次,且鸡蛋在0层不会碎。设计一种策略能保证可以测出鸡蛋恰好会碎的楼层,且如果该策略是最坏的情况所扔次数最少。

Read more...


密码学,一种凯撒密码,也称为凯撒密码,移位密码,凯撒代码或凯撒变换,是最简单和最广为人知的加密技术之一。
它是一种替换密码,其中明文中的每个字母都被字母表中的一些固定数量的位置的字母替换。例如,左移3,D将被A替换,E将变为B,依此类推。
该方法以Julius Caesar的名字命名,他在私人通信中使用了它。
由Caesar密码执行的加密步骤通常作为更复杂的方案的一部分,例如Vigenère密码,并且仍然在ROT13系统中具有现代应用。与所有单字母替换密码一样,Caesar密码很容易破解,在现代实践中基本上没有通信安全性。
rust_ciphers.svg

Read more...


#include<iostream>
#include<string>
using namespace std;
 


<!--more-->


int map[100][100] = { 0 };
struct node {
    int x, y;
    int step = -1;
    string find;
};
node p;
node beginw;
node lastw;
void tomap(bool goo, char fx = 'rtn') {//goo = 1 前进  0 后退  fx为方向(后退可不写)
    if (goo == 1) {//前进
        if (fx == 'L') {
            p.y -= 1;
            CoordinateMov(0);
        }
        else if (fx == 'R') {
            p.y += 1;
            CoordinateMov(1);
        }
        else if (fx == 'U') {
            p.x -= 1;
            CoordinateMov(2);
        }
        else if (fx == 'D') {
            p.x += 1;
            CoordinateMov(3);
        }
        p.find += fx;
        Sleep(2000);
    }
    if (goo == 0) {//后退
        if (p.find[p.step] == 'R' && map[p.x][p.y - 1] != -1) {
            horn(55, L"等待左退测试");
            Sleep(2000);
            tomap(1, 'L');
        }
        else if (p.find[p.step] == 'L'  && map[p.x][p.y - 1] != -1) {
            horn(55, L"等待右退测试");
            Sleep(2000);
            tomap(1, 'R');
        }
        else if (p.find[p.step] == 'D'  && map[p.x][p.y - 1] != -1) {
            horn(55, L"等待上退测试");
            Sleep(2000);
            tomap(1, 'U');
        }
        else if (p.find[p.step] == 'U'  && map[p.x][p.y - 1] != -1) {
            horn(55, L"等待下退测试");
            Sleep(2000);
            tomap(1, 'D');
        }
    }
    p.step++;
    return;
}
int find() {
    if (p.x == lastw.x&&p.y == lastw.y) {
        fill(*map, *map + 100, 0);
        return p.step + 1;
    }
    while (!OpenDoor()) {
        Sleep(1500);
    }
    int n = 0;
    char A = 0;
    int l, r, u, d;
    l = RetnDirection().left;
    r = RetnDirection().right;
    u = RetnDirection().up;
    d = RetnDirection().down;
    horn(55, L"开启新一轮搜索");
    if (l == 1 && map[p.x][p.y - 1] == 0) {
        if (p.x == lastw.x&&p.y - 1 == lastw.y) A = 'L';
        map[p.x][p.y - 1] = 1;
        n++;
        horn(55, L"左侧标1");
    }
    if (r == 1 && map[p.x][p.y + 1] == 0) {
        if (p.x == lastw.x&&p.y + 1 == lastw.y) A = 'R';
        map[p.x][p.y + 1] = 1;
        n++;
        horn(55, L"右侧标1");
    }
    if (u == 1 && map[p.x - 1][p.y] == 0) {
        if (p.x - 1 == lastw.x&&p.y == lastw.y) A = 'U';
        map[p.x - 1][p.y] = 1;
        n++;
        horn(55, L"上侧标1");
    }
    if (d == 1 && map[p.x + 1][p.y] == 0) {
        if (p.x + 1 == lastw.x&&p.y == lastw.y) A = 'D';
        map[p.x + 1][p.y] = 1;
        n++;
        horn(55, L"下侧标1");
    }
    if (A != 0) {
        tomap(1, A);
        fill(*map, *map + 100, 0);
        return p.step + 1;
    }
    char cmp;
    if (p.find[p.step] == 'L') cmp = 'R';
    else if (p.find[p.step] == 'R') cmp = 'L';
    else if (p.find[p.step] == 'U') cmp = 'D';
    else if (p.find[p.step] == 'D') cmp = 'U';
    if (l == 1 && map[p.x][p.y - 1] == 1 && cmp != 'L') {
        horn(55, L"尝试左拐");
        if (n <= 1) map[p.x][p.y] = -1;
        tomap(1, 'L');
        return find();
    }
    else if (r == 1 && map[p.x][p.y + 1] == 1 && cmp != 'R') {
        horn(55, L"尝试右拐");
        if (n <= 1) map[p.x][p.y] = -1;
        tomap(1, 'R');
        return find();
    }
    else if (u == 1 && map[p.x - 1][p.y] == 1 && cmp != 'U') {
        horn(55, L"尝试上拐");
        if (n <= 1) map[p.x][p.y] = -1;
        tomap(1, 'U');
        return find();
    }
    else if (d == 1 && map[p.x + 1][p.y] == 1 && cmp != 'D') {
        horn(55, L"尝试下拐");
        if (n <= 1) map[p.x][p.y] = -1;
        tomap(1, 'D');
        return find();
    }
    else {
        map[p.x][p.y] = -1;
        horn(55, L"倒退ing继续搜索");
        tomap(0);
    }
}
int AutoMov() {//horn(55, L"temp");
               /*cin >> beginw.x >> beginw.y
               >> lastw.x >> lastw.y;*/
    beginw.x = CurrentRoom().x;
    beginw.y = CurrentRoom().y;
    lastw.x = BossRoom().x;
    lastw.y = BossRoom().y;
 
    p.x = beginw.x;
    p.y = beginw.y;
    map[beginw.x][beginw.y] = 1;
    find();//返回步数/结束寻路
    return 0;
}

Read more...