精华内容
下载资源
问答
  • 链表如果相交则个链表的形态应该是Y或者是V型,所以判断个链表是否相交有方式:一、比较个链表的尾部是否相同,如果相同则个链表相交,交叉点可以通过个链表的长度差进行计算,因为交点后面的长度是...

    链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式:

    一、比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定两个指针,长的链表先遍历到差值的位置,短的链表指向头部,分别遍历直到相等就是交点的所在。

    int IsCross(ListNode *p, ListNode *q){

    if(p == NULL || q == NULL){

    return 0;

    }

    ListNode *node1 = NULL;

    ListNode *node2 = NULL;

    while(p != NULL){

    node1 = p;

    p = p->next;

    }

    while(q != NULL){

    node2 = q;

    q = q->next;

    }

    if(node1 == node2){

    return 1;

    }else{

    return 0;

    }

    }

    寻找交点:

    ListNode *FindNode(ListNode *p, ListNode *q){

    if(p == NULL || q == NULL){

    return NULL;

    }

    ListNode *node1 = p;

    ListNode *node2 = q;

    int len1 = 0, len2 = 0;

    while(node1 != NULL){

    node1 = node->next;

    len1++;

    }

    while(node2 != NULL){

    node2 = node2->next;

    len2++;

    }

    int len = len1 > len2 ? len1 - len2 : len2 -len1;

    ListNode *lenNode = len1 > len2 ? p : q;

    ListNode *shortNode = len1 < len2 ? p : q;

    for(int i = 0; i < len + 1;i++){

    lenNode = lenNode->next;

    }

    while(shortNode != NULL && lenNode != NULL && shortNode != lenNode){

    shortNode = shortNode->next;

    lenNode = lenNode->next;

    }

    return shortNode;

    }

    二、如果两个链表相交,那么如果将一个链表的首尾相连,那么两个链表和在一起就会形成一个有环的链表,问题就归结到单链表是否有环的问题:

    int IsCross(ListNode *p, ListNode *q){

    if(p == NULL || q == NULL){

    return 0;

    }

    ListNode *t = p;

    while(t->next != NULL){

    t = t->next;

    }

    t->next = p;

    ListNode *fast = q;

    ListNode *slow = q;

    while(fast != NULL && fast->next != NULL){

    fast = fast->next->next;

    slow = slow->next;

    if(fast == slow){

    break;

    }

    }

    if(fast != NULL && fast->next != NULL){

    return 1;

    }else{

    return 0;

    }

    }

    展开全文
  • 一、比较个链表的尾部是否相同,如果相同则个链表相交,交叉点可以通过个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定个指针,长的链表先遍历到差值的位置,短的...

    链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式:

    一、比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定两个指针,长的链表先遍历到差值的位置,短的链表指向头部,分别遍历直到相等就是交点的所在。

    int IsCross(ListNode *p, ListNode *q){
            if(p == NULL || q == NULL){
                    return 0;
            }
            ListNode *node1 = NULL;
            ListNode *node2 = NULL;
            while(p != NULL){
                    node1 = p;
                    p = p->next;
            }
            while(q != NULL){
                    node2 = q;
                    q = q->next;
            }
            if(node1 == node2){
                    return 1;
            }else{
                    return 0;
            }
    }

    寻找交点:

    ListNode *FindNode(ListNode *p, ListNode *q){
            if(p == NULL || q == NULL){
                    return NULL;
            }
            ListNode *node1 = p;
            ListNode *node2 = q;
            int len1 =  0, len2 = 0;
            while(node1 != NULL){
                    node1 = node->next;
                    len1++;
            }
            while(node2 != NULL){
                    node2 = node2->next;
                    len2++;
            }
            int len = len1 > len2 ? len1 - len2 : len2 -len1;
            ListNode *lenNode = len1 > len2 ? p : q;
            ListNode *shortNode = len1 < len2 ? p : q;
            for(int i = 0; i < len + 1;i++){
                    lenNode = lenNode->next;
            }
            while(shortNode != NULL && lenNode != NULL && shortNode != lenNode){
                    shortNode = shortNode->next;
                    lenNode = lenNode->next;
            }
            return shortNode;
    }

    二、如果两个链表相交,那么如果将一个链表的首尾相连,那么两个链表和在一起就会形成一个有环的链表,问题就归结到单链表是否有环的问题:

    int IsCross(ListNode *p, ListNode *q){
            if(p == NULL || q == NULL){
                    return 0;
            }
            ListNode *t = p;
            while(t->next != NULL){
                    t = t->next;
            }
            t->next = p;
            ListNode *fast = q;
            ListNode *slow = q;
            while(fast != NULL && fast->next != NULL){
                    fast = fast->next->next;
                    slow = slow->next;
                    if(fast == slow){
                            break;
                    }
            }
            if(fast != NULL && fast->next != NULL){
                    return 1;
            }else{
                    return 0;
            }
    }



    展开全文
  • 以城市道路多个单信号控制交叉口组成的绿波...设计了PSO算法的编码方式,分别采用PSO算法、灾变PSO算法和二阶振荡PSO算法对多交叉口交通信号配时进行优化计算。仿真实验表明,二阶振荡PSO算法在该实例中表现最优。
  • 以城市道路多个单信号控制交又口组成的绿波系统...设计了PSO算法的编码方式,分别采用PSO算法、灾变PSO算法和二阶振荡PSO算法对多交又口交通信号配时进行优化计算。仿真实验表明,二阶振荡PSO算法在该实例中表现最优。
  • 软件工程知识

    2012-12-02 21:34:25
    客户机/服务器结构依靠网络将计算任务分布到许多台不同的计算机上,但通过其中的服务器计算机提供集中式服务。其优越性是结构灵活、便于系统逐步扩充。 (3)多层客户机/服务器结构 •层结构:将信息表示与应用...
  • Morton Code

    2017-11-13 15:01:00
    实现了一维与二维(或多维)的转换。它通过交叉存储个数的位产生一个数,即莫顿码。 可以应用于为一个整数对产生...有方式,一交叉分离计算,二查询对应的莫顿表计算。例如,计算两个unsigned short的莫顿码 ...

    实现了一维与二维(或多维)的转换。它通过交叉存储两个数的位产生一个数,即莫顿码。

    可以应用于为一个整数对产生一个唯一索引。

     

    例如,对于坐标系中的坐标点使用莫顿编码生成的莫顿码,可以唯一索引对应的点。这些索引为“Z”形排序 。

     

    计算莫顿码:

     

    有两种方式,一交叉分离计算,二查询对应的莫顿表计算。例如,计算两个unsigned short的莫顿码

     

    1 交叉分离

     

    1. // Encode x and y, as yxyxyx.  
    2. unsigned short x;   // Interleave bits of x and y, so that all of the  
    3. unsigned short y;   // bits of x are in the even positions and y in the odd;  
    4. unsigned int z = 0; // z gets the resulting Morton Number.  
    5. for (int i = 0; i < sizeof(x) * CHAR_BIT; i++) // unroll for more speed...  
    6. {  
    7.   z |= (x & 1U << i) << i | (y & 1U << i) << (i + 1);  
    8. }  

     

    2 查询莫顿表

     

    1. static const unsigned short MortonTable256[256] =   
    2. {  
    3.   0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015,   
    4.   0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055,   
    5.   0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115,   
    6.   0x0140, 0x0141, 0x0144, 0x0145, 0x0150, 0x0151, 0x0154, 0x0155,   
    7.   0x0400, 0x0401, 0x0404, 0x0405, 0x0410, 0x0411, 0x0414, 0x0415,   
    8.   0x0440, 0x0441, 0x0444, 0x0445, 0x0450, 0x0451, 0x0454, 0x0455,   
    9.   0x0500, 0x0501, 0x0504, 0x0505, 0x0510, 0x0511, 0x0514, 0x0515,   
    10.   0x0540, 0x0541, 0x0544, 0x0545, 0x0550, 0x0551, 0x0554, 0x0555,   
    11.   0x1000, 0x1001, 0x1004, 0x1005, 0x1010, 0x1011, 0x1014, 0x1015,   
    12.   0x1040, 0x1041, 0x1044, 0x1045, 0x1050, 0x1051, 0x1054, 0x1055,   
    13.   0x1100, 0x1101, 0x1104, 0x1105, 0x1110, 0x1111, 0x1114, 0x1115,   
    14.   0x1140, 0x1141, 0x1144, 0x1145, 0x1150, 0x1151, 0x1154, 0x1155,   
    15.   0x1400, 0x1401, 0x1404, 0x1405, 0x1410, 0x1411, 0x1414, 0x1415,   
    16.   0x1440, 0x1441, 0x1444, 0x1445, 0x1450, 0x1451, 0x1454, 0x1455,   
    17.   0x1500, 0x1501, 0x1504, 0x1505, 0x1510, 0x1511, 0x1514, 0x1515,   
    18.   0x1540, 0x1541, 0x1544, 0x1545, 0x1550, 0x1551, 0x1554, 0x1555,   
    19.   0x4000, 0x4001, 0x4004, 0x4005, 0x4010, 0x4011, 0x4014, 0x4015,   
    20.   0x4040, 0x4041, 0x4044, 0x4045, 0x4050, 0x4051, 0x4054, 0x4055,   
    21.   0x4100, 0x4101, 0x4104, 0x4105, 0x4110, 0x4111, 0x4114, 0x4115,   
    22.   0x4140, 0x4141, 0x4144, 0x4145, 0x4150, 0x4151, 0x4154, 0x4155,   
    23.   0x4400, 0x4401, 0x4404, 0x4405, 0x4410, 0x4411, 0x4414, 0x4415,   
    24.   0x4440, 0x4441, 0x4444, 0x4445, 0x4450, 0x4451, 0x4454, 0x4455,   
    25.   0x4500, 0x4501, 0x4504, 0x4505, 0x4510, 0x4511, 0x4514, 0x4515,   
    26.   0x4540, 0x4541, 0x4544, 0x4545, 0x4550, 0x4551, 0x4554, 0x4555,   
    27.   0x5000, 0x5001, 0x5004, 0x5005, 0x5010, 0x5011, 0x5014, 0x5015,   
    28.   0x5040, 0x5041, 0x5044, 0x5045, 0x5050, 0x5051, 0x5054, 0x5055,   
    29.   0x5100, 0x5101, 0x5104, 0x5105, 0x5110, 0x5111, 0x5114, 0x5115,   
    30.   0x5140, 0x5141, 0x5144, 0x5145, 0x5150, 0x5151, 0x5154, 0x5155,   
    31.   0x5400, 0x5401, 0x5404, 0x5405, 0x5410, 0x5411, 0x5414, 0x5415,   
    32.   0x5440, 0x5441, 0x5444, 0x5445, 0x5450, 0x5451, 0x5454, 0x5455,   
    33.   0x5500, 0x5501, 0x5504, 0x5505, 0x5510, 0x5511, 0x5514, 0x5515,   
    34.   0x5540, 0x5541, 0x5544, 0x5545, 0x5550, 0x5551, 0x5554, 0x5555  
    35. };  
    36. unsigned short x; // Interleave bits of x and y, so that all of the  
    37. unsigned short y; // bits of x are in the even positions and y in the odd;  
    38. unsigned int z;   // z gets the resulting 32-bit Morton Number.  
    39. z = MortonTable256[y >> 8]   << 17 |   
    40.     MortonTable256[x >> 8]   << 16 |  
    41.     MortonTable256[y & 0xFF] <<  1 |   
    42.     MortonTable256[x & 0xFF];  

     


    本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/3324216.html,如需转载请自行联系原作者

    展开全文
  • 新算法采用了多父本多点交叉方式,同时将均匀设计的思想用于算法的交叉操作;新算法还对拥挤距离的计算过程和算法的终止条件进行了改进。通过个多目标优化测试函数的仿真计算对比,显示NSUGA算法在求解精度、计算...
  • KNN

    2019-05-16 15:06:08
    KNN KNN工作原理: 计算待分类物体与其他物体之间的距离; 统计距离最近的K个邻居; 对于K个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。 K值的选择: ...距离的计算方式: 欧氏...

    KNN

    KNN工作原理:
    1. 计算待分类物体与其他物体之间的距离;
    2. 统计距离最近的K个邻居;
    3. 对于K个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。
    K值的选择:
    • K值较小时,容易过拟合
    • K值较大时,容易欠拟合
    • 一般采用交叉验证的方式选取 K 值
    距离的计算:

    两个样本点之间的距离代表了这两个样本之间的相似度。距离越大,差异性越大;距离越小,相似度越大。

    距离的计算方式:

    1. 欧氏距离;
      d=i=1N(x1ix2i)2 d=\sqrt{\sum_{i=1}^{N}\left(x_{1 i}-x_{2 i}\right)^{2}}

    2. 曼哈顿距离;
      d=x1x2+y1y2 d=\left|x_{1}-x_{2}\right|+\left|y_{1}-y_{2}\right|

    3. 闵可夫斯基距离;
      d=i=1nxiyipp d=\sqrt[p]{\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|^{p}}
      其中p代表空间的维数,当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p→∞时,就是切比雪夫距离。

    4. 切比雪夫距离;
      max(x1x2,y1y2) \max (|x 1-x 2|,|y 1-y 2|)

    5. 余弦距离

      计算的是两个向量的夹角,在方向上计算两者之间的差异,对绝对数字不敏感。余弦距离通常用来衡量用户对内容兴趣的区分度。

    KD树可用来减少计算距离的次数
    KNN做回归:找出新点的K个最近样本,将这些样本的属性平均值赋给该点,得出该点的属性。
    KNN算法在sklearn中的使用:

    分类:

    from sklearn.neighbors import KNeighborsClassifier
    

    回归:

    from sklearn.neighbors import KNeighborsRegressor
    
    KNN的创建:
    KNeighborsClassifier(n_neighbors=5, weights=‘uniform’, algorithm=‘auto’, leaf_size=30)
    
    1. n_neighbors:即KNN中的K值,默认值为5
    2. weights:确定邻近样本的权重
      • weights=uniform,所有样本权重相同
      • weights=distance,权重与距离成反比
      • 可自定义函数
    3. algorithm:规定计算邻近样本的方法
      • algorithm=auto,根据数据的情况自动选择合适的算法,为默认项
      • algorithm=kd_tree,使用KD树,适用于维度少的情况,一般维数不超过20
      • algorithm=ball_tree,适用于维度大的情况
      • algorithm=brute,暴力搜索
    4. leaf_size:代表构造KD树或球树时的叶子树,默认30
    例KNN对手写数字的识别:

    1.加载和查看数据

    from sklearn.model_selection import train_test_split
    from sklearn import preprocessing
    from sklearn.metrics import accuracy_score
    from sklearn.datasets import load_digits
    from sklearn.neighbors import KNeighborsClassifier
    import matplotlib.pyplot as plt
    
    # 加载数据
    digits = load_digits()
    data = digits.data
    # 数据探索
    print(data.shape)
    # 查看第一幅图像
    print(digits.images[0])
    # 第一幅图像代表的数字含义
    print(digits.target[0])
    # 将第一幅图像显示出来
    plt.gray()
    plt.imshow(digits.images[0])
    plt.show()
    

    2.分割数据集和规范化

    # 分割数据,将25%的数据作为测试集,其余作为训练集(你也可以指定其他比例的数据作为训练集)
    train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33)
    # 采用Z-Score规范化
    ss = preprocessing.StandardScaler()
    train_ss_x = ss.fit_transform(train_x)
    test_ss_x = ss.transform(test_x)
    

    3.分类预测

    # 创建KNN分类器
    knn = KNeighborsClassifier() 
    knn.fit(train_ss_x, train_y) 
    predict_y = knn.predict(test_ss_x) 
    print("KNN准确率: %.4lf" % accuracy_score(predict_y, test_y))
    

    在这里插入图片描述

    展开全文
  • 我们以种独立的方式重新审视此问题以及CFT的双重1 / N扩展。 第一个是显示在给定前导阶解的情况下,如何将交叉方程式明确地求解为第一个/ N 2中的第一个子导阶。 这是系统地将自旋的反幂扩展到所有阶次。 可以...
  • 1. 异常检测介绍 总体来讲,异常检测问题可以概括为类:一是对结构化数据的异常检测,二是对非结构化数据...二是维数灾难及交叉指标计算之间的高频计算性能瓶颈。 主要使用以下五种方式解决: 图形位置分布 ...
  • 文章目录图的分类图的表示方式1. 邻接矩阵2. 邻接表图遍历:广度优先和深度优先 ...将节点之前的关系通过矩阵的方式来描述,个节点有联系,则矩阵中的交叉点置为1,没有联系则为0. 缺点: 非常浪费计算机内存(...
  • OpenCV图像锐化(梯度算子Sobel)

    千次阅读 2019-02-21 17:22:01
    梯度算子 • 梯度通过一个二维列向量来定义 • 向量的模值 实践中通常称为梯度图像。...• 考虑一个3x3的图像区域,z代表 灰度级,上式在z5的f值可用 数字方式近似。...✓梯度计算个模板组成,第...
  • (一)KNN算法 “近朱者赤,近墨者黑”可以说是 KNN 的工作原理。整个计算过程分为三步: 1、计算待分类物体与其他物体之间的距离; 2、统计距离最近的 K 个邻居; 3、对于 K 个最近的邻居...个样本之间的距离代表
  • 以可插车间隙理论和概率论知识为基础,对提前右转种组织方式下右转机动车的理论通行能力进行了对比研究,建立了设置交织区所能增加右转机动车通行能力的计算模型,并且以平均延误为指标对比分析了种组织方式的...
  • 基于浏览器的流程定制工具 1>mvc + 命令模式 2>支持任意折线的变迁 3>拖动折时由虚线预先显示...变迁与节点的接触点计算方式改为折与节点中心组成的直线段与节点的交叉点 2>目前为个别控件为v...
  • 停损指标是在结合了时间和价格因素后,利用抛物线运动的方式随时调整停损的位置来观察和给出买卖的一种技术分析工具。由于停损(又称转向...研判讯号主要是条线的交叉:当金价线向下跌破SAR线时,是卖出信线...
  • 我们使用此网格模拟像素矩阵(),格子交叉点是像素中心。  3.输入直线段,可使用以下种方法之一:  a)对话框输入  b)鼠标在网格内以鼠标左键按下-拖动-抬起方式输入。注意:直线段要自动取整到...
  • neo4j与spark 的结合

    2020-03-07 20:24:38
    spark 是用来 做 图计算的,Graphx,其实 spark 和Neo4j 有交叉点,在图论算法上都可以用上 使用 neo4j 和 spark 结合 1.首先 如果你的neo4j 是需要账号密码登录的话,你就应该 在项目中配置一下,三种方式 import ...
  • 为了利用双目单视面的原理, 采用个光轴交叉放置的相机来拍摄物体。对所得的两幅图片进行坐标转换, 将图像坐标转换为角度坐标, 然后在球坐标域进行特征匹配, 对得到的匹配进行曲线拟合, 将拟合得到的转换到空间...
  • 2、交叉合成方式——Impact与Body的随机组合 导入的音频采样经过分析后拆分成个分层 Impact:撞击起始的瞬态/脉冲声 Body:撞击时发声物体的共振声 3、物理化设置——将DSP算法转化成直观的
  • 缩放的时候每一个比例在数据里取方式都不一样。目前在ARM上运行在缩放和回滚显示记录时有卡顿现象,请问我如何优化处理才能流畅实现。 目前曲线是在试图场景(graphics)上画前景跟背景,没有用到item之类的...
  • RS232串口通信详解

    千次阅读 2020-07-06 22:28:57
    个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。 常见的串口 RS-232接口:通常适合于数据传输频率在0~20000bps范围的通信。是的通信方式,在PC机上通常都是COM串口。 不足:...
  • 2D多边形碰撞检测介绍这是一篇论证如何...基于sprite的检测执行的是检测sprites的像素的交叉,以这种方式来检测碰撞。多边形是使用向量数学来精确的计算点,时间和碰撞的方向。当多边形只是一种近似sprite自身的时候...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 177
精华内容 70
关键字:

两点交叉计算方式