• 按先序遍历序列建立两个二叉树的二叉链表 A 和链表 B ，设计算法判断 A 、 B 二叉树是否相似。...A与B相似↵ #include <iostream> #include <list> #include <string> usi...
按先序遍历序列建立两个二叉树的二叉链表 A 和链表 B ，设计算法判断 A 、 B 二叉树是否相似。
注：其中“#”表示的是空格，空格字符代表空树。 测试用例1
ab#c##d##↵
xc#v##b##↵

期待输出1
A与B相似↵

#include <iostream>
#include <list>
#include <string>

using namespace std;

string treeA;
string treeB;
int lenA;
int lenB;
int curIndex = 0;
int layer;

struct tree
{
public:
char data;
tree *left;
tree *right;
};

void CreateTreeA(int curLayer, tree *node);
void CreateTreeB(int curLayer, tree *node);
bool Equal(tree* nodeA, tree* nodeB);

int main()
{
cin >> treeA;
cin >> treeB;

lenA = treeA.size();
lenB = treeB.size();

int power = 0;
while (((2 << power) - 1) < lenA)
{
power++;
}
layer = power + 1;
tree *TreeA = new tree;
CreateTreeA(1, TreeA);

power = 0;
while (((2 << power) - 1) < lenB)
{
power++;
}
layer = power + 1;
curIndex = 0;
tree *TreeB = new tree;
CreateTreeB(1, TreeB);

if (Equal(TreeA, TreeB))
{
cout << "A与B相似" << endl;
}
else
{
cout << "A与B不相似" << endl;
}
return 0;
}

void CreateTreeA(int curLayer, tree *node)
{
if (treeA[curIndex] != '#')
{
node->data = treeA[curIndex++];
}
else
{
curIndex++;
}

if (node->left == NULL && curIndex < lenA && curLayer + 1 <= layer)
{
tree *tmp = new tree;
node->left = tmp;
tmp->data = ' ';
tmp->left = NULL;
tmp->right = NULL;
CreateTreeA(curLayer + 1, node->left);
}
if (node->right == NULL && curIndex < lenA && curLayer + 1 <= layer)
{
tree *tmp = new tree;
node->right = tmp;
tmp->data = ' ';
tmp->left = NULL;
tmp->right = NULL;
CreateTreeA(curLayer + 1, node->right);
}
}

void CreateTreeB(int curLayer, tree *node)
{
if (treeB[curIndex] != '#')
{
node->data = treeB[curIndex++];
}
else
{
curIndex++;
}

if (node->left == NULL && curIndex < lenB && curLayer + 1 <= layer)
{
tree *tmp = new tree;
node->left = tmp;
tmp->data = ' ';
tmp->left = NULL;
tmp->right = NULL;
CreateTreeB(curLayer + 1, node->left);
}
if (node->right == NULL && curIndex < lenB && curLayer + 1 <= layer)
{
tree *tmp = new tree;
node->right = tmp;
tmp->data = ' ';
tmp->left = NULL;
tmp->right = NULL;
CreateTreeB(curLayer + 1, node->right);
}
}

bool Equal(tree* nodeA, tree* nodeB)
{
if (nodeA == NULL && nodeB == NULL)
{
return true;
}
if ((nodeA == NULL && nodeB != NULL) || (nodeA != NULL && nodeB == NULL))
{
return false;
}
if ((nodeA->data == ' '&&nodeB->data == ' ') || nodeA->data != ' '&&nodeB->data != ' ')
{
return Equal(nodeA->left, nodeB->left) && Equal(nodeA->right, nodeB->right);
}
else
{
return false;
}
}

展开全文
• AB都是n阶矩阵，如存在矩阵P使P^(-1)AP=B，就称矩阵A相似与矩阵B，记成A~B几何的相似不同，矩阵相似是比等价还要强的条件。 相似的性质（必要条件）： 1.特征值相等。这个结论是由特征多项式相等推出来的。...


这里写自定义目录标题

定义： 设A，B都是n阶矩阵，如存在矩阵P使P^(-1)AP=B，就称矩阵A相似与矩阵B，记成A~B。
与几何的相似不同，矩阵相似是比等价还要强的条件。
相似的性质（必要条件）： 1.特征值相等。这个结论是由特征多项式相等推出来的。 2.A和B的秩相等。 3.A和B的行列式相等。 4.A和B的迹相等。迹就是n阶矩阵主对角线上的元素之和。
这是大部分老师会让我们记住的4条矩阵相似的必要条件，但是在判断矩阵相似时，题目往往上面4个条件都是相等的，所以我们就不能用上面4个必要条件去否定了，然后我们也不知道矩阵相似的充分条件是什么，题目就不好做。下面给出相似的必要条件5，并把第一个必要条件做一些加强，这样就可以解决大部分考研题目了。
1.特征值相等，且每个特征值对应的特征向量个数相等。 5.A-kE和B-kE也是相似的。
1的证明： 若A~B，对于某个特征值λ，若B有一个线性无关的特征向量α，则Bα=λα成立，于是 (P^-1)APα=λα，即APα=λPα也成立。所以说人话就是B有一个特征向量阿尔法，则A对于同样的特征值，也有一个线性无关的向量Pα。虽然我们不知道P，但是我们可以断定A和B的每个特征值的特征向量个数是相同的。
2的证明： 若A~B，则B-kE = (P^-1)AP - k(P^-1)P = (P^-1)/(A-kE)P。即A-kE~B-kE。
下面来做几道题。
例题：和矩阵 [公式] 相似的矩阵（）

我们可以看到，选项的行列式，秩，迹都是相同的，这就是考研难度的题目。 我们可以用强化后的必要条件2，但是更好的是我们不去求矩阵的特征值。让我们用性质5来做这道题。
我们把这5个矩阵都减去2E，然后发现题干的矩阵秩是1，而选项里只要C-2E的秩是1，其他的都是2。 所以得出这题选C。
展开全文
• 按先序遍历序列建立两个二叉树的二叉...A与B相似↵ 测试输入 ab#c##d##↵ gv##d##↵ 期待的输出 A与B不相似↵ #include<iostream> #include<string> #include<cstdio> using namespace std;
按先序遍历序列建立两个二叉树的二叉链表 A 和链表 B ，设计算法判断 A 、 B 二叉树是否相似。
注：其中“#”表示的是空格，空格字符代表空树。
测试输入
ab#c##d##↵
xc#v##b##↵
期待的输出
A与B相似↵

测试输入
ab#c##d##↵
gv##d##↵
期待的输出
A与B不相似↵

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

class binarytreenode {
public:
char data;
binarytreenode * Lchild, * Rchild;

binarytreenode() { Lchild = NULL; Rchild = NULL; }

};
class binarytree {
public:
binarytreenode * root;
binarytree() { root =NULL; }

void createtree( binarytreenode * &p)
{
char ch;
cin >> ch;
if (ch == '\n')
return;

if (ch == '#')
p = NULL;
else
{
p = new binarytreenode();
if (!p)
exit(-1);
p->data = ch;

createtree(p->Lchild);

createtree(p->Rchild);
return;
}
}

};
bool similar(binarytreenode *t1, binarytreenode *t2)
{
bool leftS = false, rightS = false;
if (t1 == NULL && t2 == NULL) // 两树皆空
return true;
else if (t1 == NULL || t2 == NULL) // 只有一个树为空
return false;
else // 递归地进行判断
{
leftS = similar(t1->Lchild, t2->Lchild);
rightS = similar(t1->Rchild, t2->Rchild);
return leftS && rightS;
}
}

int main()
{
binarytree x, t;

x.createtree(x.root);

t.createtree(t.root);

bool flag;
flag=similar(x.root, t.root);
if (flag)
cout << "A与B相似\n";
else
cout << "A与B不相似\n";

return 0;

}


展开全文
• 2、再设计判断相似算法Like（BiTreeNode *A, BiTreeNode *B），该算法功能是：若A与B相似，则函数返回1，否则返回0，具体如下： （1）若ABNULL，则A与B相似，即Like(A,B)=1; （2）若A与B有一个为NULL，另一个不为...
25.二叉树的应用实例 算法设计：判断两棵二叉树A与B是否相似，即要么它们都为空或都只有一个根结点，要么它们的左右子树均相似。 算法思路： 1、保留之前所写二叉树头文件内容。 2、再设计判断相似算法Like（BiTreeNode *A, BiTreeNode *B），该算法功能是：若A与B相似，则函数返回1，否则返回0，具体如下： （1）若A== B==NULL，则A与B相似，即Like(A,B)=1; （2）若A与B有一个为NULL，另一个不为NULL，则A与B不相似，即Like(A,B)=0; （3）采用递归方法，进一步判断A的左子树和B的左子树、A的右子树和B的右子树是否相似。 3、在主函数中实现，验证两棵树是否相似。（需要先建立两棵树，然后再判定）
头文件1：BiTree.h
#include<stdio.h>
#include<stdlib.h>

typedef char DataType;

typedef struct Node
{
DataType data;
struct Node* leftChild;
struct Node* rightChild;
}BiTreeNode;

void Initiate(BiTreeNode** root)
{
*root = (BiTreeNode*)malloc(sizeof(BiTreeNode));
(*root)->leftChild = NULL;
(*root)->rightChild = NULL;
}

BiTreeNode* InsertLeftNode(BiTreeNode* curr, DataType x)
{
BiTreeNode* s, * t;
if (curr == NULL)
return NULL;
t = curr->leftChild;
s = (BiTreeNode*)malloc(sizeof(BiTreeNode));
s->data = x;
s->leftChild = t;
s->rightChild = NULL;
curr->leftChild = s;
return curr->leftChild;
}

BiTreeNode* InsertRightNode(BiTreeNode* curr, DataType x)
{
BiTreeNode* s, * t;
if (curr == NULL)
return NULL;
t = curr->rightChild;
s = (BiTreeNode*)malloc(sizeof(BiTreeNode));
s->data = x;
s->rightChild = t;
s->leftChild = NULL;
curr->rightChild = s;
return curr->rightChild;
}

void Destroy(BiTreeNode** root)
{
if ((*root) != NULL && (*root)->leftChild != NULL)
Destroy(&(*root)->leftChild);
if ((*root) != NULL && (*root)->rightChild != NULL)
Destroy(&(*root)->rightChild);
free(*root);
}

头文件2：BiTreeTraverse.h
#include"BiTree.h"

void Visit(DataType item)
{
printf("%c ", item);
}

void PrintBiTree(BiTreeNode* root, int n)
{
int i;
if (root == NULL)
return;
PrintBiTree(root->rightChild, n + 1);
for (i = 0; i < n - 1; i++)
printf("   ");
if (n > 0)
{
printf("---");
printf("%c\n", root->data);
}
PrintBiTree(root->leftChild, n + 1);
}

BiTreeNode* Search(BiTreeNode* root, DataType x)
{
BiTreeNode* find = NULL;
if (root != NULL)
{
if (root->data == x)
find = root;
else
{
find = Search(root->leftChild, x);
if (find == NULL)
find = Search(root->rightChild, x);
}
}
return find;
}

void PreOrder(BiTreeNode* t, void Visit(DataType item))
{
if (t != NULL)
{
Visit(t->data);
PreOrder(t->leftChild, Visit);
PreOrder(t->rightChild, Visit);
}
}

void InOrder(BiTreeNode* t, void Visit(DataType item))
{
if (t != NULL)
{
InOrder(t->leftChild, Visit);
Visit(t->data);
InOrder(t->rightChild, Visit);
}
}

void PostOrder(BiTreeNode* t, void Visit(DataType item))
{
if (t != NULL)
{
PostOrder(t->leftChild, Visit);
PostOrder(t->rightChild, Visit);
Visit(t->data);
}
}

源文件：main.c
#include"BiTreeTraverse.h"

int Like(BiTreeNode* a, BiTreeNode* b)
{
if ((a == NULL && b != NULL) || (a != NULL && b == NULL))
return 0;
if (a == NULL && b == NULL)
return 1;
return Like(a->leftChild, b->leftChild) && Like(a->rightChild, b->rightChild);
}

int main()
{
BiTreeNode* root1, * root2, * p, * pp;
Initiate(&root1);
Initiate(&root2);

p = InsertLeftNode(root1, '2');
p = InsertLeftNode(p, '6');
p = InsertRightNode(root1->leftChild, '4');
pp = p;
p = InsertLeftNode(p, '5');
p = InsertLeftNode(p, '3');
InsertRightNode(pp, '1');

p = InsertLeftNode(root2, '1');
p = InsertLeftNode(p, '2');
p = InsertRightNode(root2->leftChild, '3');
pp = p;
p = InsertLeftNode(p, '4');
p = InsertLeftNode(p, '5');
InsertRightNode(pp, '7');

PrintBiTree(root1, 0);
printf("\n");
PrintBiTree(root2, 0);

if (Like(root1, root2))
printf("两棵树相似!\n");
else
printf("两棵树不相似!\n");

Destroy(&root1);
Destroy(&root2);

return 0;
}

展开全文
• //判断两棵二叉树是否相似 #include "btree.cpp" bool Like(BTNode *b1,BTNode *b2) //b1和b2两棵二叉树相似时返回true，否则返回false { bool like1,like2; if (b1==NULL &amp;&amp; b2==NULL)...
• 如何在js中判断两个字符串ab相同 a=b？？  Javascript编程语言 专业回答 编程编织出世界 团队 heartdust 2015-09-24 00:23 在javascript判断两个变量值是否相等，可以使用 ==（等同）操作...
• 给出两个三角形的三条边，判断是否相似。 Input 多组数据，给出6正个整数，a1,b1,c1,a2,b2,c2，分别代表两个三角形。(边长小于100且无序） Output 如果相似输出YES，如果不相似输出NO，如果三边组不成三角形也...
• 用matlab自带的函数corr2（A,B）  求矩阵的相关系数           r在[0,1]内，越接近1越相关。   不可用情况：当AB 内部所有元素全部一样时就gg了，分母为0，结果为NAN。 而且我试过有的时候算...
• 可直接使用difflib.SequenceMatcher def ratio(self): """Return a measure of the sequences' similarity (float in [0,1]). Where T is the total number of elements in both sequences, and ...
• 传送门：HDU2826题意很清楚了，就是问多边形是否相似相似判断的充要条件是对应边成比例，N&lt;=300,暴力枚举两个多边形的对应边，然后比较判断是否对应边比例都相等。注意一个坑点：求两点距离公式 不要用加号...
• ## 判断相似三角形

千次阅读 2017-07-18 09:22:11
相似三角形 Time Limit: 1000MS Memory Limit: 65536KB ...给出两个三角形的三条边，判断是否相似。 Input 多组数据，给出6正个整数，a1,b1,c1,a2,b2,c2，分别代表两个三角形。(边长小于100且无序） Outp
• 相似文档检测 Mission data.csv中包含了一个新闻标题列表，试通过近似检测方法，通过Jaccard相似度，检测相似文章，将结果保存到csv文件中，不同文章间用空行隔开。 Work 思路： 两个词作为一段来计算，末尾不够截掉...
• 解读知识点1两个图形相似其中一个图形可以看做由另一个图形放大或缩小得到 2全等形可以看成是一种特殊的相似即不仅形状相同大小也相同 3判断两个图形是否相似就是看这两个图形是不是形状相同其他因素无关 ...
• ## 序列的相似性

千次阅读 2019-05-04 08:02:20
序列的相似性可以是定量的数值，也可以是定性的描述。相似度是一个数值，反映两条序列的相似程度。关于两条序列之间的关系，有许多名词，如相同、相似、同源、同功、直向同源、共生同源等。在进行序列比较时经常使用...
• 1. 矩阵相似的定义性质 2. 分块矩阵的相似判定示例 3. 相似矩阵有相同的特征值 4. 矩阵对角阵相似，则该矩阵的特征值即为对角阵的对角元 ...
• 转自... 相似三角形 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 给出两个三角形的三条边，判断是否相似。 Input 多组数据，给出6正个整数，a1,b1,c1,a2,b2,c2，分别代表两...
• 引理1：如果有n×n数字矩阵使则A与B相似。 证明：因它又相等，进行比较后应有因此而故A与B相似。 引理2：对于任何不为零的n×n数字矩阵A和λ-矩阵一定存在λ-矩阵以及数字矩阵和使 定理7 设A,B使数域P上两...
• ## 相似矩阵、矩阵的相似对角化

万次阅读 多人点赞 2016-10-19 19:12:47
相似矩阵的定义A,B都是n阶矩阵。若存在可逆矩阵P，使得P−1AP=BP^{-1}AP=B,则称A相似B，记作A∼BA \sim B。 特殊的，如果A∼Λ,Λ是对角矩阵A \sim \Lambda, \Lambda 是对角矩阵, 则称A可以相似对角化。Λ\Lambda...
• x=10，y=10，z=10 答案：A Pytho能支持序列解包赋值，但是变量的个数必须序列的元素个数一致，否则会报错 B：赋值对象是xyz C：序列解包赋值，变量的个数必须序列的元素个数一致，否则会报错 D：分号;...
• 本博文源于山东大学《线性代数》，学到了相似对角形这一章，其实也会发现对前面的知识需求还是蛮大的。
• TF-IDF结合余弦相似判断文章相似
• numpy.allclose可以用来判断两个矩阵是否近似地相等（约等），例子如下： >>> np.allclose([1e10,1e-7], [1.00001e10,1e-8]) False >>> np.allclose([1e10,1e-8], [1.00001e10,1e-9]) True >&...
• 问题描述 ...建立C++语言关键字的哈希表，统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2，通过计算向量X1和X2的相对距离来判断两个源程序的相似性。 例如:   关键字 Void Int ...
• 使用方法：若现在有一个二叉树，根节点是A，左孩子B,无右孩子，则在程序中按先序遍历挨个输入AB$,其中，$代表空节点。
• 什么是特征值/特征向量？ 方阵的一个属性，描述方阵的“特征” Au⃗=λu⃗A\vec{u} = \lambda\vec{u}Au=λu 不改变方向，只伸缩 λ\lambdaλ 称为矩阵A的特征值...(A−λI)u⃗=0(A - \lambda I)\vec{u} =
• 题目给出两个N边形的逆时针的N个顶点，求问两个N边形是否相似。 用这个定理就ok啦-> #include #include #include #include #include using namespace std; const double eps = 1e-8; int dcmp(double x) { if( ...
• 很多原创内容在网上被抄来抄去，改来改去，技术上有什么样的方法能够判断抄袭洗稿，判断文章相似性，收集证据呢？希望本文能给大家一些思路。   两篇文章，如何判断一模一样？ 答 ：很容易想到的， 一个字节一个...
• 随着流量红利的逐渐消失，越来越多的公司开始重视数据驱动、试验驱动的精细化运营思想，并积极进行实践。有些公司在考虑采购第三方...在这次活动中，将会用最简单易懂的语言说清楚，关于 A/B 测试 “ 从入门到放弃 ...
• 相似图片检测：感知哈希算法之aHash,dHash,pHash的Python实现  原文：http://blog.sina.com.cn/s/blog_56fd58ab0102xpqf.html 感知哈希算法是一类算法的总称，包括aHash、pHash、dHash。顾名思义，感知哈希不是...
• 由于时间序列的长度很大，并且不确定时间序列在每个采样...b）基于趋势的相似性度量方法在多项式时间内可有效完成时间序列的相似性匹配；c）基于趋势的聚类方法将序列的相似性度量和聚类过程集中在一起，聚类效果显著。

...