精华内容
下载资源
问答
  • 一个算法的写作思路
    热门讨论
    2015-10-14 22:47:45

            算法的写就,与小学的解应用题很像。应用题会给出已知条件,问题,让你分析已知条件,利用公式或者定理来解决问题,解除答案。函数的写法是如此相似。

            看看函数的结构体:返回值类型 函数名(参数列表){函数体}

            返回值类型是最终答案的数据类型,函数名代表解决的什么问题,参数列表表示已知条件,函数体就是需要我们编写的解题步骤。

            拿线性表的定位运算LocateSeqlist(SeqList L,DataType x)来分析。定位运算的功能是查找出线性表L中值等于x的结点序号的最小值,当找不到值为x的结点时,返回结果0.

            从功能描述就已知条件:线性表L和x的值已知。线性表L已知就是说线性表相应的属性,比如长度,表中各个结点的值,都是已知的。

            求解结果是:某结点序号。

            已知分析:

            1、我们知道线性表是存储在数组中的,因此下标i与长度L.length的关系为:min(i)=L.length-1.

            2、根据下标,我们就可以知道对应的结点值。

            3、要找与x值相等的结点的序号,就要比较值的大小。要找与x值相等的结点的序号的最小值,而不是任意一个相等的值的序号,就要从序号最小的位置的值开始比较,以此向后比较,找到第一个相等的值,取出下标(序号)。返回就得到了结果。

            4、从开头到依次比较,就用到了循环。

            5、如果循环结束了,还没有找到相等的值,就返回0。“如果”出现了,一定是用到了分支判断语句。if或者switch,根据情况决定。

     

    int LocateSeqlist(SeqList L,DataType x)
    {
        int i=0;
        while((i<L.length)&&(L.data[i]!=x)) //在顺序表中查找值为x的结点
                i++;
        if(i<L.length) return i+1; //若找到值为x的元素,返回元素的序号
        else return 0;    //未查找到值为x的元素,返回0
    }


            鄙人拙见,还请斧正。

     

     

     

     

    更多相关内容
  • 不仅仅是一个人在战斗, 更是一群爱算法的CSer在共同写作! 不仅仅是一个人的原创, 更注重一整套算法笔记的完成性和共享! 说明 如果你是: 喜欢刷算法的并且喜欢写原创心得笔记的同学 喜欢整理收集算法文章的同学 喜欢...
  • 群智能算法改进思路

    千次阅读 多人点赞 2020-10-08 22:13:08
    群智能算法改进思路 ...在X′(t)X'(t)X′(t)的选择上,可选方案有最优解、当前个体、均值位置、随机选出来的一个个体、甚至可以是父本和母本交叉的解。而在加号的另一边,可选方案就更多了,如DE的两个个体的差分向量

    群智能算法改进思路

    本文仅从方法论的角度来进行探讨,不涉及具体的改进方法。
    

    1.先看单个更新公式

    我们常见的群智能算法其核心无非是位置更新公式,大多更新方式都可以写作下面的公式:
    X ( t + 1 ) = X ′ ( t ) + Δ X X(t+1) =X'(t)+ΔX X(t+1)=X(t)+ΔX
    所以,在这条更新公式上就大有文章可做。在 X ′ ( t ) X'(t) X(t)的选择上,可选方案有最优解、当前个体、均值位置、随机选出来的一个个体、甚至可以是父本和母本交叉的解。而在加号的另一边,可选方案就更多了,如DE的两个个体的差分向量作为增量;或者是以某个步长来确定大小方向;也可以像遗传算法一样,以变异的方式来产生增量。只要这个 Δ X ΔX ΔX是合理的,只要它能够在全局和局部范围内有效搜索,保证最终是收敛的,都可以用,无非是收敛的好坏而已。


    2.多种更新公式结合

    虽然有效设计的单个更新公式往往能够自成体系,但是也难免会有其失效的地方。再者,设计一条合理的更新公式也并不是一个简单的事情,有些更新公式表面看起来没什么问题,也可以有效收敛,但是碰到复杂问题时,因为其公式内在问题,并不能进行有效搜索。所以多种更新公式相结合是一个很自然的思路。

    光一条更新公式就有很多种实现方案了,当多种公式结合的时候,其方案数量又会几何式增加。再者,相结合的策略也是一个可研究的地方。是部分个体这种公式,另一部分个体另一种公式的形式?还是这一阶段这种公式,另一阶段另一种公式呢?抑或是类似超启发式一样根据选择来确定更新公式?当然也可以根据搜索情况动态确定更新公式。第一种是典型的多种群改进方式,在空间上划分更新方式;第二种则是在时间上划分更新方式,很多包含多条更新公式的元启发式大都采用这种策略;第三种则可以通过学习来确定在一个阶段选择一种更新方式的概率;第四种就涉及到搜索过程之中的信息利用了,将静态确定的更新方式换做动态确定,使之适用于更多问题。而对于第一种多种群改进思路又有诸多可研究之处,两部分个体以怎样的方式发挥联动作用呢?这又是一个可探索的点。


    3.对群智能算法本身缺陷进行改进

    其实到2如果改的好的话,已经能在大多数问题上表现很好了,如果更进一步算法能根据问题的不同动态做出调整的话,已经是极好的了。到此已经不是普通改进就能够解决问题了,就必须要治本了。要解决群智能算法本身的缺陷——无法确保找到的解一定是全局最优解。

    在这里插入图片描述
    这个问题解决不了,只能一定程度上缓和。要几种手段相结合,首先是能够在全局范围内进行均匀的探索,每个区域都能探索到;其次是尽可能对探索的区域进行适当的开发(邻域从小到大或从大到小均匀变化),以使尽可能准确判断出哪个区域是全局最优区域;再者要有效探索和开发,尽量不去探索重复区域,避开之前找到的极值区域,对未知区域进行探索和开发。这就涉及到空间划分、归档、禁忌、拥挤控制、分布估计等策略。


    4.群智能算法应用

    一个是优化领域,应该是应用最广泛的;也可以给个体赋予规则,然后研究多智能体的博弈;当然也可以结合生物现象研究智能系统。认知有限,只能想到这些了。


    挖坑

    后续可以把多种群改进思路做个总结。

    展开全文
  • 论文写作——算法部分写作心得

    千次阅读 2021-09-12 19:34:22
    首先,算法部分的写作风格与之前的abstract(摘要),introduction(引入)和related work(相关工作)都不太相同。摘要需要的是简洁清楚,并总领全文;引入需要将本论文的想法思路,以及所解决的问题叙述完整,需要...

    1. 总述

    首先,算法部分的写作风格与之前的abstract(摘要),introduction(引入)和related work(相关工作)都不太相同。摘要需要的是简洁清楚,并总领全文;引入需要将本论文的想法思路,以及所解决的问题叙述完整,需要体现故事性;相关工作仅需讲清楚与本文算法类似或者处于相同思路下的已有论文即可。但算法部分的内容需要细致且符合逻辑,要求用尽量简洁的语言将算法的各个部分讲清楚,同时还要很高的科学性。为了提出以下几点建议:
    1)算法部分尽量不要按照写代码的思路来叙述。
    2)长句子尽量改短或者分为两句,因为算法部分已经是在叙述一个新提出的算法了,如果句子还很长很绕的话,容易让看论文的人产生疲惫心理。
    3)第一遍先写出完整的一个算法部分,再按照文章整体逻辑进行修改,以免在结构不固定的时候浪费时间去字斟句酌。

    2. 举例说明

    2.1 attention部分

    attention部分

    图1 原文对算法中attention部分的说明

    上图1 叙述了本文算法中对attention(注意力机制)的应用过程。整体流程是先说明公式和和用到的一些参数,再将这个部分的示意图展示出来。
    这种方式会导致两个问题:
    1)阅读者在看到这个示意图之前,只能借助文字描述和公式对本部分进行理解,容易造成混淆。
    2)图中所设计的参数 P ( ⋅ ) P(\cdot) P() Q ( ⋅ ) Q(\cdot) Q()在一开始就提到且应用在公式中,但是没有形象的说明。
    所以后来将这个部分改成了以下形式。
    在这里插入图片描述
    具体改动如下:
    1)将示意图移到了所有公式和参数的说明之前,先给阅读者一个整体的印象。
    2)将示意图中参数 P ( ⋅ ) P(\cdot) P() Q ( ⋅ ) Q(\cdot) Q()的说明移到图注中,让阅读者在看完示意图之后就能对整体的流程有个初步的认识。

    2.2 Self-attention部分

    在这里插入图片描述

    图 2 自注意力部分第一段

    这里需要注意,在注意力部分结束之后,因为另起了一个小节,所以我将公式5的结果重新叙述了一遍。但是这里本身不需要这样,强行多叙述一遍反而为显得繁琐。所以在修改时直接将公式5下标黄的那句话删除了。
    为此我总结了以下两点:
    1)当另起一节时,如果需要借用上一节的结论,并且与上次提到此结论的地方相隔较远,可以重新简要叙述一遍。例如图2中最下方标黄语句,此时我是借用了introduction中的结论,但是相隔较远,就简要复述了一遍。
    2)当相隔较近时,则不需要重新叙述,不然会显得繁琐。

    2.3 分析

    在这里插入图片描述

    图 3 分析

    这段文字主要想体现的是自注意力与注意力的区别,先叙述了它们不同的权重计算方式,再单独叙述这两种方式带来的效果。但是这种方式较难直观的将效果和其对应的注意力对应起来,于是改为了以下统一叙述的方式:
    在这里插入图片描述

    3. 结语

    对于算法部分,我们的叙述方式要循序渐进,即先给出总体印象,再介绍局部细节。图片、公式的出现顺序,参数的说明时机都要把握好。
    尽量避免出现长句子,如果一句话实在要包含很多的信息,建议拆分为几句来写。

    展开全文
  • 迭代算法:一个二叉树相等==根结点相同+ 左子树相同+右子树相同 2:算法 #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define ERROR 0 #define BOOL int typedef int TElemType...

    1: 思路

    迭代算法:一个二叉树相等==根结点相同+ 左子树相同+右子树相同

    1.1
    获取结构体成员
    通过结构体指针可以获取结构体成员,一般形式为:
    (pointer).memberName
    或者:
    pointer->memberName
    第一种写法中,.的优先级高于
    ,(pointer)两边的括号不能少。如果去掉括号写作pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

    第二种写法中,**->**是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途

    2:算法

    #include<stdio.h>
    #include<stdlib.h>
    #define TRUE 1
    #define FALSE 0
    #define ERROR 0
    #define BOOL int
    typedef int TElemType;
    typedef struct BiTNode {
     TElemType data;
     struct BiTNode *lchild, *rchild;
    }BiTNode, *BiTree;
    BOOL SimilarTree(BiTree T1,BiTree T2) 
    {
    	if(T1==NULL&&T2==NULL) return TRUE;   // 如果两个均为空树,退出迭代,相等 
    	if(T1==NULL||T2==NULL) return FALSE;  //如果两个只有一个为空树,则不相等 
    	if(T1->data!=T2->data) return FALSE;  //如果此结点数据不相等则,退出迭代 
    	return SimilarTree(T1->lchild,T2->lchild)&&	SimilarTree(T1->rchild,T2->rchild);	   
    }
    void CreateBiTree(BiTree *T){
        *T=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->data=1;
        (*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
      
        (*T)->lchild->data=2;
        (*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->lchild->rchild->data=5;
        (*T)->lchild->rchild->lchild=NULL;
        (*T)->lchild->rchild->rchild=NULL;
        (*T)->rchild->data=3;
        (*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->rchild->lchild->data=6;
        (*T)->rchild->lchild->lchild=NULL;
        (*T)->rchild->lchild->rchild=NULL;
        (*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->rchild->rchild->data=7;
        (*T)->rchild->rchild->lchild=NULL;
        (*T)->rchild->rchild->rchild=NULL;
        (*T)->lchild->lchild->data=4;
        (*T)->lchild->lchild->lchild=NULL;
        (*T)->lchild->lchild->rchild=NULL;
    }
    int main()
    {
    	BiTree  T1, T2;
    	CreateBiTree(&T1);
    	CreateBiTree(&T2);
    	printf("%d",SimilarTree(T1,T2));
    }
    

    3:运行结果:

    请添加图片描述

    展开全文
  • 给你一个算法应该怎么写程序(数学建模 matlab)

    万次阅读 多人点赞 2017-08-27 13:29:52
    本文写作初衷:有个可爱的学妹问我在看到一个算法编程时的步骤是什么,然而作为伪大神的我,感觉并不知道怎么回答,感觉我编程就俩字死磕,错了咋办?再来一遍!不行咋办?换个写法试试!还不行?百度!不过既然人家...
  • 考题都会从题目知识考点、多种思路分析到手写代码整个过程进行详细解析 目录 基础知识 1. 数据结构是什么? 储备知识:数据的定义 定义 具体类型 核心内容 1.1 储备知识:数据是什么 1.2 .
  • 视觉传感器:3D感知算法

    千次阅读 2022-01-31 00:39:34
    作者丨巫婆塔里的工程师@知乎来源丨https://zhuanlan.zhihu.com/p/426569335编辑丨一点人工一点智能1 前言 之前的篇文章介绍了基于视觉传感器的...
  • 点击上方“3D视觉工坊”,选择“星标”干货第时间送达今天要介绍的文章是“Back to the Feature: Learning Robust Camera Localization ...
  • 简单的说这是博主的第二篇关于Python数据结构的博客,所以文章中可能有些地方思路不是很清晰,希望大家发现并指出,近期博主也在一直努力吃透Python算法精髓,奈何背道而驰,现在仍然让算法困扰不前,写这篇博客是...
  • 作者丨中投靓仔@知乎来源丨https://zhuanlan.zhihu.com/p/534553717编辑丨3D视觉工坊AVM(Around View Monitor),中文:全景环视...AVM已经是种较为成熟的技术,中高端车型均有部署,但详细讲述AVM系统算法的技...
  • 这学期我们开设了算法设计与分析这堂课,出于对这位大佬博导的喜爱和对算法的兴趣,我打算写一系列的博文来记录我的一个学习过程,博主在重要的部分录了音,将十分详细地还原授课内容,力求将大佬的思想和方法讲透彻...
  • 浅谈单图像三维重建算法

    千次阅读 2022-03-22 00:30:06
    点击上方“3D视觉工坊”,选择“星标”干货第时间送达作者丨lcl来源丨我爱计算机视觉本文简单带大家看一下单图像三维重建相关的论文。写这篇文章算是对之前的一点总结。因为之前没有做过三维视...
  • 3D结构光摄像头深度算法介绍

    千次阅读 2021-08-12 00:48:35
    来源丨计算机视觉SLAM光学和算法是3D结构光的核心能力,性能优越的3D结构光摄像头必须是光学系统和深度算法的完美融合,两者高度耦合且技术上不可分割。本篇文章分为两章节:第章前言回顾3...
  • 用于回顾数据结构与算法时刷题的一些经验记录 (提出对应的贪心算法时最好自己举例子试试能否可行) 文章目录[455. 分发饼干](https://leetcode-cn.com/problems/assign-cookies/)[376. 摆动序列]...
  • 1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法)2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到...
  • FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法,他与Apriori算法一样也是用来挖掘频繁项集的,不过不同的是,FP-Tree...常见的挖掘频繁项集算法有两类,类是Apriori算法,另类是FP-growth。...
  • 第6-5课:五子棋游戏的相关算法

    千次阅读 2020-09-22 12:17:07
    五子棋的复杂程度要超过之前...这课我们将介绍一些五子棋游戏的算法,当然,也包括棋盘的数据模型设计。 棋盘模型 五子棋(Five In a Row,FIR)流行非常广泛,在不同的国家有不同的名称,标准的五子棋棋盘是 ...
  • 研究图像特征检测已经有段时间了,图像特征检测的方法很多,又加上各种算法的变形,所以难以在短时间内全面的了解,只是对主流的特征检测算法的原理进行了学习。总体来说,图像特征可以包括颜色特征、...
  • 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。解题思路
  • 贪心算法:最小生成树Prim算法

    千次阅读 多人点赞 2022-05-31 00:01:55
    这是大一暑假的c笔记,再次写prim算法笔记又有点点进步最小生成树(Prim普利姆算法和Kruskal算法
  • 本文档可以对你书写开题报告和任务书以及论文,需求分析,写作思路等有一定帮助,写文档不要纠结于是什么语言的 本文档资料适用于java php ssm springboot Vue python nodejs 微信小程序 Android app等,非常适合大专,...
  • 激光雷达:点云语义分割算法

    千次阅读 2021-10-16 00:43:10
    聚类算法假设同一个实例上的点具有较大的相似度,因此如何学习更具有区分能力的点特征,以及如何将点组合成物体是这类方法研究中的重点。 SGPN[12]是这个方向早期的一个典型工作。它首先通过PointNet++来学习点的...
  • 本文档可以对你书写开题报告和任务书以及论文,需求分析,写作思路等有一定帮助,写文档不要纠结于是什么语言的 本文档资料适用于java php ssm springboot Vue python nodejs 微信小程序 Android app等,非常适合大专,...
  • 这诚然是一个伟大的科技进步,但却也是一个发人深思的商业现象。本书中,作者扎拉奇与斯图克将引领我们对由应用程序支持的互联网商务做出更深入的检视。虽然从表面上看来,消费者确是互联网商务兴盛繁荣过程中的获益...
  • 文章目录III.水平集算法的主要迭代公式IIIIII.水平集函数初始化IIIIIIIII.零水平集的计算-窄带构建...在这之前,对于各位朋友的论文写作算法学习,不建议收藏或学习。 3)实际上在这篇Markdown文章发布之前,已经对
  • 算法思路: ⚫ 建立两工作指针p和q,p从左向右扫描L,q从右向左扫描L,两者同时扫描⚫ 进入while循环判断,若p与q不相等且p的后继不等于q ⚫ 若对应数据结点的data域相等,则继续循环,否则退出循环⚫ 判断最后次...
  • 算法系列之递归算法5简单实例

    千次阅读 2019-01-08 10:32:29
    只想默默地说句,这个算法是真的难~ 已经不想吐槽它折磨我的这20天了~ 每当看到自己用很冗长的代码完成题目,大佬们简单的几行代码轻松解决,小编的心啊,拔凉拔凉的~生无可恋~~~ 大神请绕道,我不想再看到你们...
  • 广度优先搜索算法

    万次阅读 多人点赞 2019-04-25 13:26:58
    广度优先搜索算法(Breadth-First Search,BFS)是种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验...
  • 用筛法。我们仅考虑分解奇数。(原因?)现在我们可以假设n=pq,pq必可写作(x+y)(x-y)也即我们...对于每这样的完全平方数都逐个分解是很慢的,这时候我们就可以使用筛法。在找到了足够多 x² mod n 的因数分解后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,458
精华内容 5,783
热门标签
关键字:

一个算法的写作思路