精华内容
下载资源
问答
  • 网页设计格局之半包围式格局

    千次阅读 2013-11-15 14:48:48
     半包围格局来自韩国,它的优势在于页面可以十分精美,并表现出企业的气势。左部位置的内容相对固定,通常放置形象代言人或主题广告等识别性很强的信息。  —个信息区的网页格局  信息量很少,格局多变,...
    多数网站比较精美,信息量中等,擅长利用左部区域。

      半包围格局来自韩国,它的优势在于页面可以十分精美,并表现出企业的气势。左部位置的内容相对固定,通常放置形象代言人或主题广告等识别性很强的信息。

      —个信息区的网页格局

      信息量很少,格局多变,网站风格亦多变。

      一个信息展示区是信息量少的网站的特征,常见于个人主页中,但也有不少别有新意的企业网站需要使用这样的创作方式。信息量少的网站最为多变,页面需要丰富的插图作为补充,需要设计师利用各种平面设计技巧为插图设计服务。

      “国”字型格局

      全闭合格局,切忌不要使用在信息量大的网站类型中。

      国字型格局是用于处理信息量少的网站的格局之一,有一定的普遍性和实用性。上图就是一个非常典型的“国”字型结构的网站。所谓“国”字型,主要是指格局边线不是浏览器边框。信息内容被包围在一个框子里,框子里如何划分并不重要,框子外没有任何信息,所以也可称为全包围式网站结构。

      这种格局属于闭合式结构,与开放式结构相对立,有种出不去的感觉,主要视觉心理为不开阔、精巧、小气等。

      有人说,让留白的面积小一些,尽量让边框贴近浏览器,这样不就好了吗?这样并不能改变根本的问题,它还是属于闭合模式。这种格局不适合体现高效性、时效性信息的网站类型。但对一些专、精类信息网站非常合适。

    展开全文
  • 阿里妹导读:非结构化数据的内容占据了当前数据海洋的80%。换句话来说,就是我们都被“非结构化数据”包围了。由于非结构化数据的信息量和信息的重要程度很难被界定,因此对非结构...
        

    640?wx_fmt=jpeg

    阿里妹导读:非结构化数据的内容占据了当前数据海洋的80%。换句话来说,就是我们都被“非结构化数据”包围了。由于非结构化数据的信息量和信息的重要程度很难被界定,因此对非结构化数据的使用成为了难点。如果说结构化数据用详实的方式记录了企业的生产交易活动,那么非结构化数据则是掌握企业命脉的关键内容,所反映的信息蕴含着诸多企业效益提高的机会。而对大部分组织而言,掌握先进的非结构化数据分析能力仍是从“大数据”中获得价值的重大挑战。


    当前,数据技术及产品部对结构化数据处理和应用已经具备了成熟的技术以及产品方案。为了应对日益增长的非结构化数据诉求,非结构化数据体系通过覆盖非结构化数据规范、数据设计、算法能力、服务能力等来解决这一问题,该体系是对OneData体系的非结构化数据的补充和完善。已经赋能了集团内很多业务取得了非常好的效果,而这只是刚刚开始。

    非结构化数据概述

    “非结构化数据”是什么?相较于记录了生产、业务、交易和客户信息等的结构化数据,非结构化的信息涵盖了更为广泛的内容。非结构化数据指的是:数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML、 HTML、各类报表、图像和音频/视频信息等。

    相对于结构化数据,非结构化数据具有以下特点数据存储占比高、数据格式多样、结构不标准且复杂、信息量丰富、处理门槛高。

    当前行业公认:非结构化数据占数据总量的80%以上。结构化数据仅占到全部数据量的20%,其余80%都是以文件形式存在的非结构化和半结构化数据,非结构化数据包含各种办公文档、图片、视频、音频、设计文档、日志文件、机器数据等。
                               

    640?wx_fmt=png

    图:非结构化数据的占比图 图片来源:《大数据分析行业网》

    非结构化数据没有预定义的数据模型,不方便用数据库二维逻辑表来表现。
     
    下面对比一下结构化数据和非结构化数据的区别:

    结构化数据,是指由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。

    结构化数据格式形式如图下:

    640?wx_fmt=png

    图:结构化数据

    非结构化数据,是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、HTML、各类报表、图像和音频/视频信息等等。

    非结构化数据-图片格式如下图所示:

    640?wx_fmt=png

    图:非结构化数据  图片来源:《数字时代》

     非结构化数据包含的信息量丰富。非结构化数据与结构化数据最大的区别在于蕴含信息量非常丰富,同样以图片为例,请看下图:

    640?wx_fmt=png

    图:图片蕴含的信息  图片来源:淘宝

    你看到了多少信息?不妨我们一起看一看:

    1. 人物:女人,短发,佩戴项链,做了美甲,......

    2. 衣服:女装,黑色T恤,长袖,低领,白色裤子,薄款,紧身

    3. 文字:秋定制,流金诗意,2折包邮,custom


    这是一些显性信息,可以看出一张图片里面的显性信息就已经很多了,当然还有很多隐形信息。比如:

    1.衣服材质:纯棉
    2.特点:时尚的版型,贴身,显身材
    ......

    由此可以看出非结构化数据隐含的信息量非常丰富。
     
    非结构化数据一般不能直接使用,需要通过算法等手段进行处理。但因非结构化数据本身的特点,处理难度大。比如:对评论文本信息的情感分析。为了实现情感分析,需要使用算法进行复杂的处理,通过大量的数据训练才能完成。以商品评论数据来看,对于结构化的评论如下表:
     

    640?wx_fmt=png

     结构化评论数据


    可以直观看出用户感情是负向的。

    同一个买家的非结构化评论:我在这家买了,缺少螺丝,商品还有划痕直接不管。

    根据以上的评论内容,如果要确定买家的情感,就没那么简单了。需要使用NLP算法,并经过算法效果评估等一系列过程。

    因此,当前非结构化数据的处理门槛还是很高,处理难度还比较大。
     
    非结构化数据的价值及应用

    非结构化数据因其包含丰富的内容、多样化的形态以及广阔的想象空间,必将引爆将来的市场,无论是娱乐、教育、医疗、生活等,都将产生更丰富的非结构化数据场景、使用更智能的数据处理方式。接下来,我们就针对当前的一些场景简单了解一下非结构化数据的价值。

    ImageNet:改变AI和世界的图片[1]

     2006 年,李飞飞开始反复思考一个问题。

    当时的李飞飞才刚刚在伊利诺伊大学香槟分校(UIUC)任教,她看到整个学界和工业界普遍流行一种想法,都在致力于打造更好的算法,认为更好的算法将带来更好的决策,不论数据如何。

    但李飞飞意识到了这样做的局限——即使是最好的算法,如果没有好的、能够反映真实世界的训练数据,也没办法用。

    李飞飞的解决方案是:构建一个更好的数据集。

    “我们要详细描绘出整个世界的物体。”李飞飞说。由此生成的数据集名叫 ImageNet。

    相关论文发表于 2009 年,最初作为一篇研究海报在迈阿密海滩会议中心的角落展示出来。但没过多久,这个数据集就迅速发展成为一项年度竞赛,衡量哪些算法可以以最低的错误率识别数据集图像中的物体。许多人都认为 ImageNet 竞赛是如今席卷全球 AI 浪潮的催化剂。

    尽管经历了很多艰辛,但是最终 ImageNet改变了人们认识数据和算法的方式。“ImageNet 思维所带来的范式转变是,尽管很多人都在注意模型,但我们要关心数据,”李飞飞说:“数据将重新定义我们对模型的看法。”

    自 2010 年以来,谷歌、微软和 CIFAR 推出了其他一些数据集,因为事实表明深度学习需要像ImageNet 这样的大数据。

    “图片,很多很多的图片”,作为非结构化数据的一种,ImageNet向我们展示了图片的巨大威力,而我们相信,这只是刚刚开始。

    640?wx_fmt=png

    图: ImageNet  图片来源:《数据科学浅谈》


    店小蜜:智能客服的养成之道[2]

    2016年3月,一个名叫“我的小蜜”的人工智能客服就出现在了手机淘宝和手机天猫的APP中,它可以说是店小蜜的前身,当时,它的主要工作是担当平台客服,为用户解决催发货、退货退款、投诉和售后保障等问题。“我们开发‘我的小蜜’,是为了让用户能以最快的方式找到解决问题的途径。” 小蜜的产品经理南山回忆起团队初创时的往事,这样说道。

    整个淘宝天猫电商平台的用户有好几亿,如果让每个用户都能用快速客服通道来联系客服,显然会对淘宝客服团队造成巨大压力。怎么办呢?人力不能解决的问题,就靠技术来解决。客服人员忙不过来,就请智能客服来帮忙。阿里每天大量的真实交易互动,让用户的问题都以数据的形式沉淀下来。通过这些数据,开发团队可以得知哪些问题最高频。而这些数据也让小蜜不断地进行强化学习,变得越来越“聪明”,应答准确度越来越高。

    客服系统产生的文本、语音成了丰富的宝藏,通过对这些文本、语音的智能化处理,店小蜜逐渐成为了“最懂电商的客服机器人”。

    “知识,各行各业的知识”,店小蜜的成功从一个角度证明了对文本、语音的运用,可以释放出来的巨大能力。我们相信,这只是刚刚开始。

    640?wx_fmt=png

    图:客服机器人  图片来源:浙江在线-钱江晚报

    智能安保:智能化办案[3]

    2018年11月5日到10日,首届中国国际进口博览会在上海成功举办。本次进博会有一个大的亮点:智能安保。

    在本次安保活动中,上海公安局“智慧公安”产品“智能警务中台”成功亮相,通过对辖区1.5万摄像头的全量接入,实时解析,实现民警的智能化办案。基于全网全视频数据结构化的提取,实现人、车多维特征布控,触网自动告警,融合视频结构化信息、MAC、IMEI、RFID等进行多维研判,对目标嫌疑人进行行为轨迹跟踪。

    640?wx_fmt=png

    图:首届中国国际进口博览会  图片来源:环球网

    “视频,流动的视频”,首届中国国际进口博览会上智能安保的成功应用,使我们相信了对视频监控智能化处理的巨大。我们仍然相信,这只是刚刚开始。

    狂奔的应用:被“惯坏”的应用

    随着网络的加速和人工智能的兴起,仿佛一夜之间信息流、短视频、网红直播这些新的娱乐方式涌现在人们面前,躁动的人们搅动着躁动的市场,躁动的市场搅动着躁动的应用。头条、抖音、斗鱼、小红书、淘宝直播等等新的娱乐或电商模式喷薄而出,网红经济、内容电商、信息流等新兴的词汇也如雨后春笋般涌现出来。正如苹果广告Think different里面描述的那样:“你可以赞美他們,引用他們,反对他们,质疑他們,颂扬或是诋毁他们,但唯独不能漠视他们。”也许你跟我一样,对某些产品不以为然甚至嗤之以鼻,但是新的娱乐形态毕竟挡无可挡,每个人都不能置身事外。

    仔细分析,其实不难发现,当我们经历了互联网时代的洗礼,对信息的渴望被极大的唤起,常规的结构化数据交互已经不能满足人们的欲望,而伴随着技术成熟而来的非结构化数据:图片、视频、语音,正式登上舞台,催生着一个接一个的应用一路狂奔。

    640?wx_fmt=png

    图:狂奔的应用  图片来源:百度百科

    非结构化数据的问题和挑战

    非结构化数据虽然具有很大的价值,但是当前对非结构化数据的处理和管理却存在很多问题和挑战,下面结合我们的理解对这些问题和挑战进行一个初步整理。

    实体和关系分离

    非结构化数据因为其自身不具有规整的形式,因此不能像结构化数据一样按照二维表的形式存储。因此其实体和关系是分离的。

    举个简单例子:对于淘宝商品的图片,其商品的信息是通过二维表的形式存储的,但是主图的图片却存在在OSS中,需要通过cdn映射才能访问图片内容。

    这种情况出现在大部分的非结构化数据的身上,实体和关系的分离,造成了场景分析的困难。如果我们单独看一张图片(可参考图:图片蕴含的信息),其蕴含的丰富的信息如果全部靠算法去处理,不仅耗费巨大的资源,而且无法追溯其来源、曝光、使用场景等,会造成大量精准信息的缺失。如果我们从结构化数据去看,却无法直接使用图片本身所包含的信息(图片的特点、图片包含的文字、图片包含的促销信息)等。
    实体和关系的分离,造成了非结构化数据使用的困难,降低了数据的完整性。

    数据分散,未形成合力

    无论是从ImageNet的例子还是从集团数据的角度去看,当前非结构化数据普遍存在数据分散的现象。而实际的生活中,数据不应该是分散的,而应该形成联动,更充分的发挥价值,便利我们的生活。

    处理复杂,开发门槛高

    现在对于非结构化数据的处理,离不开算法,依托于集团人工智能实验室、各个部门的算法团队,集团内智能化场景遍地开花,欣欣向荣。

    但是,这并没有解决非结构化数据处理复杂,开发门槛高的问题。算法的高门槛和业务的高要求,制约了非结构化数据能力的释放。

    随着5G时代的到来,各种新的应用产生的巨量非结构化数据,仅仅依托人工的合作形态,恐怕不足以很好的实现非结构化数据的使用。工具化、平台化、规模化将会成为将来的重点。

    非结构化数据的思考

    经过前文的描述和分析,我们对非结构化数据进行了深入的思考。

    构建完整的非结构化数据资产意义重大

    “单丝不成线,孤木不成林”,构建非结构化数据资产意义重大。当我们将分散的非结构化数据汇集在一起,会形成完整的用户、商品、内容、品牌等的数据集,会形成完整的资产视图和商业视图。数据汇集后,各个BU看数据的视角不再是孤立的,不再是受限的。从广度上来讲,能够从整个集团甚至整个市场的层面去查看业务的全貌;从深度上来讲,能够深入行业,形成行业专业化的知识,将业务深耕进去。

    集成通用及专用的算法能力至关重要

    当非结构化数据遇到MIT、PAI等集团强大算法平台或工具后,将会充分降低算法的使用门槛,充分发挥数据的价值。届时,80%的非结构化数据不再是放在仓库中积灰的矿石,而是可以被加工成闪闪发光的金子;算法不再是针对具体业务去赋能的途径,而是可以被规模化使用的利器。

    提供标准化、快速的非结构化数据服务前景可观

    当前无论是AWS、Azure还是阿里云,对于非结构化处理主要提供工具、算法,并没有针对数据本身提供解决方案,不同的行业数据应该如何组织、如何训练、如何形成行业知识库。所谓,提供了“器”,却没有提供“术”。而市场上很多数据公司,则专注于某个领域的数据,如公安、电商、咨询等行业,提供行业性的解决方案,并且取得了可观的成果。如果我们能够与业务深度结合,提供标准化、快速的非结构化服务,前景将会非常可观,小到BU,大到集团乃至外部市场,具备极大的想象空间。

    非结构化数据的价值还远未充分挖掘,未来:广阔天地,大有可为。

    非结构化数据作为一种数据量大、类型丰富、与人工智能可以深度结合的数据类型,将会发挥越来越大的价值。然而如何管理、使用、快速价值化非结构化数据,当前并没有很好的解决方案,我们团队在综合分析市场上的产品和深度思考后结合DT强大的数据能力,提出了“非结构化数据体系”的设想和解决方案。

    参考资料:

    [1]ImageNet:改变AI和世界的图片https://www.sohu.com/a/160316515_680198

    [2]店小蜜:智能客服的养成之道http://www.sohu.com/a/131845725_635114[3]智能安保:智能化办案https://baijiahao.baidu.com/s?id=1616255897334017138&wfr=spider&for=pc

    640?wx_fmt=gif
    阿里云MVP(最有价值专家)第10期招募进行中

    你,热爱技术分享吗?

    你,期盼结识大咖,讨论交流吗?

    你,希望打造自己的技术影响力吗?

    你,愿意传递技术力量,传承布道精神吗

    你敢说愿意,我们就敢一起前行,点击文末阅读原文,速来报名!

    640?wx_fmt=gif

    你可能还喜欢

    点击下方图片即可阅读

    640?wx_fmt=jpeg

    阿里研究员:测试稳定性三板斧,我怎么用?

    640?wx_fmt=jpeg

    《长安十二时辰背后的技术秘籍》正式公开

    640?wx_fmt=jpeg

    结构化数据存储,如何设计才能满足需求?

    640?wx_fmt=jpeg

    关注「阿里技术」

    把握前沿技术脉搏

    展开全文
  • 有界的空间层次结构 边界体积层次结构(BVH)是一种流行的空间数据结构。 它是一棵卷树,其每个节点完全包围其子节点的卷。 如果您想知道BVH中的哪些对象可能与某个感兴趣的体积相交,则可以针对BVH节点进行相交...
  • 但是昨天熬夜整理完以后发现,自己还是个弟弟,实在忍不住了,打算把 算法学习路线 发出来,我把整个算法学习的阶段总结成了五个步骤,分别为: 基础语法学习(重要)、语法配套练习、数据结构、算法入门、算法进阶...
    🙉饭不食,水不饮,题必须刷🙉

    还不会C语言,和我一起打卡!
    🌞《光天化日学C语言》🌞

    LeetCode 太难?上简单题!
    🧡《C语言入门100例》🧡

    LeetCode 太简单?大神盘他!
    🌌《夜深人静写算法》🌌

    前言

      所谓活到老,学到老,虽然我感觉自己已经学了很多算法了,但是昨天熬夜整理完以后发现,自己还是个弟弟,实在忍不住了,打算把 算法学习路线 发出来,我把整个算法学习的阶段总结成了五个步骤,分别为: 基础语法学习(重要)、语法配套练习、数据结构、算法入门、算法进阶。本文梳理了这五个大项的思维导图,在下文会有详细介绍。
      希望各位能够找到自己的定位,通过自己的努力在算法这条路上越走越远。
      刚开始切勿心浮气躁,千万不要给自己立 flag,说一定要把这么多东西都学会。就算你的精力旺盛,日夜操劳,时间也是有限的。所以,首先是明确我们要做什么,然后制定好一个合理的 目标 ,再一点一点将要学习的内容逐步付诸实践才是最重要的。
      每日一篇C语言打卡,目前更新到:光天化日学C语言(20)- 赋值运算符与赋值表达式 | 让代码变得更加简介(建议收藏)


    图片较大,文章中有拆解,需要原图可以留言找我要哈

    1、基础语法学习

    • 算法是以编程语言为基础的,所以选择一门编程语言来学习是必须的。
    • 因为作者本身是C/C++技术栈的,所以就拿C语言来举例子吧。如果是 Java、Python 技术栈,可以跳过 C语言相关的内容。这一小节,先给出学习路线图,然后我再来讲,每部分应该如何去学。

    1)HelloWorld

    • 无论是 Java、Python、C/C++,想要上手一门语言,第一步一定是 HelloWorld,先不要急着去配环境。如果环境配了几个小时,可能一开始的雄心壮志就被配环境的过程消磨殆尽,更加不要谈日后的丰功伟业了。

    2)让自己产生兴趣

    • 所以,我们需要让这件事情从一开始就变得 有趣,这样才能坚持下去。比如找一个相对较为有趣的教程,这里我会推荐这个:《光天化日学C语言》。听名字就比较搞笑,可能作者本身也不是什么正经人,哈哈哈!虽然不能作为一个严谨的教程去学,起码可以对搞笑的内容先产生兴趣。从而对于语言本身有学习下去的动力。
    • 刚才提到的这个系列,可以先收藏起来。回头再去看,它讲述的是 对白式C语言教学,从最简单的输出 HelloWorld 这个字符串开始讲起,逐渐让读者产生对C语言的兴趣。这个系列的作者是前 WorldFinal 退役选手,一直致力于 将困难的问题讲明白 。我看了他的大部分教程,基本都能一遍看懂。算了,不装了,摊牌了,因为我就是这个作者。

    3)目录是精髓

    • 然后,我们大致看下你选择的教程的前几个章节,那些标题是否有你认知以外的名词出现,比如以这个思维导图为例,前几个章节为:

    1、第一个C语言程序
    2、搭建本地环境
    3、变量
    4、标准输出
    5、标准输入
    6、进制转换入门
    7、ASCII字符
    8、常量

    • 如果你觉得这些名词中有 3 / 4 以上是没有什么概念的。那么,可能需要补齐一些数学、计算机方面的基础知识。反之,我们就可以继续下一步了。

    4)习惯思考并爱上它

    • 只要对一件事情养成习惯以后,你就会发现,再难的事情,都只是一点一点积累的过程。重要的是,每天学习的过程一定要吃透,养成主动思考的好习惯。因为,越到后面肯定是越难的,如果前期不养成习惯,后面很可能心有余而力不足。
    • 就像刷题,一旦不会做就去找解题报告,最后就养成了看解题报告才会做题的习惯。当然这也是一种习惯,只不过不是一种好习惯罢了。

    5)实践是检验真理的唯一标准

    • 光看教程肯定是不行的,写代码肯定还是要动手的,因为有些语法你看一遍,必定忘记。但是写了几遍,永世难忘。这或许就是写代码的魅力所在吧。
    • 所以,记得多写代码实践哟 (^U^)ノ~YO

    6)坚持其实并没有那么难

    • 每天把教程上的内容,自己在键盘上敲一遍,坚持一天,两天,三天。你会发现,第四天就变成了习惯。所以坚持就是今天做了这件事情,明天继续做。

    7)适当给予正反馈

    • 然而,就算再有趣的教程,看多了都会乏味,这是人性决定的,你我都逃不了。能够让你坚持下去的只有你自己,这时候,适当给予自己一些正反馈就显得尤为重要。比如,可以用一张表格将自己的学习计划记录下来,然后每天都去分析一下自己的数据。
    • 当然,你也可以和我一样,创建一个博客,然后每天更新博文,就算没有内容,也坚持日更,久而久之,你会发现,下笔如有神,键盘任我行!更新的内容,可以是自己的学习笔记,心路历程 等等。
    • 看着每天的粉丝量呈指数级增长,这是全网对你的认可,应该没有什么会是比这个更好的正反馈了。

    8)学习需要有仪式感

    • 那么,至此,不知道屏幕前的你感想如何,反正正在打字的我已经激情澎湃了。已经全然忘记这一章是要讲C语言基础的了!
    • 介于篇幅,我会把C语言基础的内容,放在这个专栏 《光天化日学C语言》 里面去讲,一天更新一篇,对啊,既然说了要坚持,要养成习惯,我当然也要做到啦~如果你学到了哪一章,可以在评论区评论 “打卡” ,也算是一种全网见证嘛!
    • 我也很希望大家的学习速度能够超越我的更新速度。

    2、语法配套练习

    • 学习的过程中,做题当然也是免不了的,还是应征那句话:实践是检验真理的唯一标准。
    • 而这里的题库,是我花了大量时间,搜罗了网上各大C语言教程里的例题,总结出来的思维导图,可以先大致看一眼:

    • 从数学基础、输入输出、数据类型、循环、数组、指针、函数、位运算、结构体、排序 等几个方面,总结出的具有概括性的例题 100 道 《C语言入门100例》,目前还在更新中。
    • 这里可以列举几个例子:

    1、例题1:交换变量的值

    一、题目描述

      循环输入,每输入两个数 aabb,交换两者的值后输出 aabb。当没有任何输入时,结束程序。

    二、解题思路

    难度:🔴⚪⚪⚪⚪

    • 这个题的核心是考察如何交换两个变量的值,不像 python,我们可以直接写出下面这样的代码就实现了变量的交换。
    a, b = b, a
    
    • 在C语言里,这个语法是错误的。
    • 我们可以这么理解,你有两个杯子 aabb,两个杯子里都盛满了水,现在想把两个杯子里的水交换一下,那么第一个想到的方法是什么?

    当然是再找来一个临时杯子:
      1)先把 aa 杯子的水倒进这个临时的杯子里;
      2)再把 bb 杯子的水倒进 aa 杯子里;
      3)最后把临时杯子里的水倒进 bb 杯子;

    • 这种就是临时变量法,那么当然,还有很多很多的方法,接下来就让我们来见识一下吧。

    三、代码详解

    1、正确解法1:引入临时变量

    #include <stdio.h>
    int main() {
        int a, b, tmp;
    	while (scanf("%d %d", &a, &b) != EOF) {
    	    tmp = a;   // (1)
    	    a = b;     // (2)
    	    b = tmp;   // (3)
    	    printf("%d %d\n", a, b);
    	}
    	return 0;
    }
    
    • (1)(1) tmp = a;表示把 aa 杯子的水倒进这个临时的杯子里;
    • (2)(2) a = b;表示把 bb 杯子的水倒进 aa 杯子里;
    • (3)(3) b = tmp;表示把临时杯子里的水倒进 bb 杯子里;
    • 这三步,就实现了变量 aabb 的交换。

    2、正确解法2:引入算术运算

    #include <stdio.h>
    int main() {
        int a, b;
    	while (scanf("%d %d", &a, &b) != EOF) {
    	    a = a + b;   // (1)
    	    b = a - b;   // (2)
    	    a = a - b;   // (3)
    	    printf("%d %d\n", a, b);
    	}
    	return 0;
    }
    
    • (1)(1) a = a + b;执行完毕后,现在最新的a的值变成原先的a + b的值;
    • (2)(2) b = a - b;执行完毕后,相当于b的值变成了a + b - b,即原先a的值;
    • (3)(3) a = a - b;执行完毕后,相当于a的值变成了a + b - a,即原先b的值;
    • 从而实现了变量ab的交换。

    3、正确解法3:引入异或运算

    • 首先,介绍一下C语言中的^符号,代表的是异或。
    • 二进制的异或,就是两个数转换成二进制表示后,按照位进行以下运算:
    左操作数 右操作数 异或结果
    0 0 0
    1 1 0
    0 1 1
    1 0 1
    • 也就是对于 0 和 1,相同的数异或为 0,不同的数异或为 1。
    • 这样就有了三个比较清晰的性质:
    • 1)两个相同的十进制数异或的结果一定位零。
    • 2)任何一个数和 0 的异或结果一定是它本身。
    • 3)异或运算满足结合律和交换律。
    #include <stdio.h>
    int main() {
        int a, b;
    	while (scanf("%d %d", &a, &b) != EOF) {
    	    a = a ^ b;   // (1)
    	    b = a ^ b;   // (2)
    	    a = a ^ b;   // (3)
    	    printf("%d %d\n", a, b);
    	}
    	return 0;
    }
    
    • 我们直接来看 (1)(1)(2)(2) 这两句话,相当于b等于a ^ b ^ b,根据异或的几个性质,我们知道,这时候的b的值已经变成原先a的值了。
    • 而再来看最后一句话,相当于a等于a ^ b ^ a,还是根据异或的几个性质,这时候,a的值已经变成了原先b的值。
    • 从而实现了变量ab的交换。

    4、正确解法4:奇淫技巧

    • 当然,由于这个题目问的是交换变量后的输出,所以它是没办法知道我程序中是否真的进行了交换,所以可以干一些神奇的事情。比如这么写:
    #include <stdio.h>
    int main() {
        int a, b;
    	while (scanf("%d %d", &a, &b) != EOF) {
    	    printf("%d %d\n", b, a);
    	}
    	return 0;
    }
    
    • 你学废了吗 🤣?

    2、例题2:整数溢出

    一、题目描述

      先输入一个 t(t100)t (t \le 100),然后输入 tt 组数据。每组输入为 4 个正整数 a,b,c,d(0a,b,c,d262)a,b,c,d(0 \le a,b,c,d \le 2^{62}),输出 a+b+c+da+b+c+d 的值。

    二、解题思路

    难度:🔴🔴⚪⚪⚪

    • 这个问题考察的是对补码的理解。
    • 仔细观察题目给出的四个数的范围:[0,262][0, 2^{62}],这四个数加起来的和最大值为 2642^{64}。而C语言中,long long的最大值为:26312^{63}-1,就算是unsigned long long,最大值也只有26412^{64}-1
    • 但是我们发现,只有当四个数都取得最大值 2622^{62} 时,结果才为 2642^{64},所以可以对这一种情况进行特殊判断,具体参考代码详解。

    三、代码详解

    #include <stdio.h>
    typedef unsigned long long ull;                           // (1)
    const ull MAX = (((ull)1)<<62);                           // (2)
    
    int main() {
    	int t;
    	ull a, b, c, d;
    	scanf("%d", &t);
    	while (t--) {
    		scanf("%llu %llu %llu %llu", &a, &b, &c, &d);     // (3)
    		if (a == MAX && b == MAX && c == MAX && d == MAX) // (4)
    			printf("18446744073709551616\n");             // (5)
    		else
    			printf("%llu\n", a + b + c + d);              // (6)
    	}
    	return 0;
    }
    
    • (1)(1) 由于这题数据量较大,所有数据都需要用64位无符号整型。ull作为unsigned long long的别名;
    • (2)(2) 用常量MAX表示 2622^{62},这里采用左移运算符直接实现 22 是幂运算;
    数学 C语言
    2n2^n 1<<n
    • 需要注意的是,由于 1 是int类型,所以需要对 1 进行强制转换。(ull)1等价于(unsigned long long)1
    • (3)(3) %llu是无符号64位整型的输入方式;
    • (4)(4) 这里是对所有数都等于最大值的特殊判断,&&运算符的优先级低于==,所以这里不加括号也没事;
    • (5)(5) 由于 2642^{64} 是无法用数字的形式输出的,所以我们提前计算机算好以后,用字符串的形式进行输出;
    • (6)(6) 其它情况都在 [0,2641][0, 2^{64}-1] 范围内,直接相加输出即可。

    • 由于这个专栏是付费专栏,可能对学生党不是很友好,所以作者经过再三思考,打算放出 300 张 一折优惠券, 先到先得。只要拿这个图片来找作者即可享受,仅限前 300 名。
    • 为了适当提高一定门槛,你至少需要学会如何下载图片或者截图并且发送到微信里 🤣。

    3、数据结构

    • 《C语言入门100例》上的例题,如果能理解前面 25 道,那基本C语言的学习就可以告一段落了,接下来就要开始我们的数据结构的学习了。

    1、什么是数据结构

    • 你可能听说过 数组、链表、队列、栈、堆、二叉树、图,没错,这些都是数据结构,但是你要问我什么是数据结构,我突然就一脸懵逼了。
    • 如果一定要给出一个官方的解释,那么它就是:

    计算机存储、组织数据的方式。相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。往往同高效的检索算法和索引技术有关。

    • 是不是还不如说它是堆,是栈,是队列呢?
    • 是这样的,我们学习的过程中,跳过一些不必要的概念,能够节省我们更多的时间,从而达到更好的效果,当你还在理解数据结构是什么的时候,可能人家已经知道了栈有哪些操作了。

    2、数据结构和算法的关系

    • 很多同学搞不明白,数据结构与算法有哪些千丝万缕的关系?甚至有些同学以为算法里本身就包含了数据结构。
    • 数据结构主要讲解数据的组织形式,比如链表,堆,栈,队列。
    • 而算法,则注重的是思想,比如链表的元素怎么插入、删除、查找?堆的元素怎么弹出来的?栈为什么是先进后出?队列又为什么是先进先出?
    • 讲得直白一点,数据结构是有实体的,算法是虚拟的;数据结构是物质上的,算法是精神上的。当然,物质和精神 缺一不可。

    3、数据结构概览

    • 周末花了一个下午整理的思维导图,数据结构:
    • 数据结构相关入门可以参考以下文章:数据结构入门

    4、算法入门

    • 算法入门,其实就是要开始我们的刷题之旅了。先给出思维导图,然后一一介绍入门十大算法。
    • 十个最基础的算法可以参考以下文章:算法入门精选

    5、算法进阶

    • 算法进阶这块是我打算规划自己未来十年去完成的一个项目,囊括了 大学生ACM程序设计竞赛、高中生的OI竞赛、LeetCode 职场面试算法 的算法全集,也就是之前网络上比较有名的 《夜深人静写算法》 系列,这可以说是我自己对自己的一个要求和目标吧。
    • 如果只是想进大厂,那么 算法入门 已经足够了,不需要再来看算法进阶了,当然如果对算法有浓厚兴趣,也欢迎和我一起打卡。由于内容较难,工作也比较忙,所以学的也比较慢,一周基本也只能更新一篇。

    这个系列主要分为以下几个大块内容:
      1)图论
      2)动态规划
      3)计算几何
      4)数论
      5)字符串匹配
      6)高级数据结构(课本上学不到的)
      7)杂项算法

    • 先来看下思维导图,然后我大致讲一下每一类算法各自的特点,以及学习方式:

    在这里插入图片描述

    1)图论

    1、搜索概览

    • 图论主要围绕搜索算法进行展开。搜索算法的原理就是枚举。利用计算机的高性能,给出人类制定好的规则,枚举出所有可行的情况,找到可行解或者最优解。
    • 比较常见的搜索算法是 深度优先搜索(又叫深度优先遍历) 和 广度优先搜索(又叫广度优先遍历 或者 宽度优先遍历)。各种图论的算法基本都是依靠这两者进行展开的。

    2、深度优先搜索

    • 深度优先搜索一般用来求可行解,利用剪枝进行优化,在树形结构的图上用处较多;而广度优先搜索一般用来求最优解,配合哈希表进行状态空间的标记,从而避免重复状态的计算;
    • 原则上,天下万物皆可搜,只是时间已惘然。搜索会有大量的重复状态出现,这里的状态和动态规划的状态是同一个概念,所以有时候很难分清到底是用搜索还是动态规划。
    • 但是,大体上还是有迹可循的,如果这个状态不能映射到数组被缓存下来,那么大概率就是需要用搜索来求解的。
    • 如图所示,代表的是一个深度优先搜索的例子,红色实箭头表示搜索路径,蓝色虚箭头表示回溯路径。
    • 红色块表示往下搜索,蓝色块表示往上回溯,遍历序列为:
    	0 -> 1 -> 3 -> 4 -> 5 -> 2 -> 6
    
    • 同样,搜索的例子还有:
    • 计算的是利用递归实现的 nn 的阶乘。

    3、记忆化搜索

    • 对于斐波那契函数的求解,如下所示:
    • f(n)={1(n=0)1(n=1)f(n1)+f(n2)(n>2)f(n) = \begin{cases}1 & (n = 0) \\1 & (n = 1) \\f(n-1) + f(n-2) & (n > 2) \end{cases}
    • 对于 f(5)f(5) 的求解,程序调用如下:
      在这里插入图片描述
    • 这个过程用到了很多重复状态的搜索,我们需要将它优化,一般将一些状态缓存起来。
    • 我们通过一个动图来感受一下:
      在这里插入图片描述
    • 当第二次需要计算 f(2)f(2)f(3)f(3) 时,由于结果已经计算出来并且存储在 h[2]h[2]h[3]h[3] 中,所以上面这段代码的fib != inf表达式为真,直接返回,不再需要往下递归计算,这样就把原本的 “递归二叉树” 转换成了 “递归链”, 从而将原本指数级的算法变成了多项式级别。
    • 这就是记忆化搜索,像这种把状态缓存起来的方法,就是动态规划的思想了。

    4、广度优先搜索

    • 单向广搜就是最简化情况下的广度优先搜索(Breadth First Search),以下简称为广搜。游戏开发过程中用到的比较广泛的 A* 寻路,就是广搜的加强版。
    • 我们通过一个动图来对广搜有一个初步的印象。

    • 从图中可以看出,广搜的本质还是暴力枚举。即对于每个当前位置,枚举四个相邻可以行走的方向进行不断尝试,直到找到目的地。有点像洪水爆发,从一个源头开始逐渐蔓延开来,直到所有可达的区域都被洪水灌溉,所以我们也把这种算法称为 FloodFill。
    • 那么,如何把它描述成程序的语言呢?这里需要用到一种数据结构 —— 队列。
    • 这时候,算法和数据结构就完美结合了。

    2)动态规划

    动态规划算法三要素:
      ①所有不同的子问题组成的表;
      ②解决问题的依赖关系可以看成是一个图;
      ③填充子问题的顺序(即对②的图进行拓扑排序,填充的过程称为状态转移);

    • 如果子问题的数目为 O(nt)O(n^t),每个子问题需要用到 O(ne)O(n^e) 个子问题的结果,那么我们称它为 tD/eD 的问题,于是可以总结出四类常用的动态规划方程:(下面会把opt作为取最优值的函数(一般取 minminmaxmax ), w(j,i)w(j, i)为一个实函数,其它变量都可以在常数时间计算出来)。

    1、1D/1D

    • d[i]=opt(d[j]+w(j,i)0<=i<j)d[i] = opt( d[j] + w(j, i) | 0 <= i < j )
    • 状态转移如图四所示(黄色块代表d[i]d[i],绿色块代表d[j]d[j]):
    • 这类状态转移方程一般出现在线性模型中。

    2、2D/0D

    3、2D/1D

    • d[i][j]=w(i,j)+opt(d[i][k1]+d[k][j])d[i][j] = w(i, j) + opt( d[i][k-1] + d[k][j] )
    • 区间模型常用方程,如图所示:
      在这里插入图片描述
    • 另外一种常用的 2D/1D 的方程为:
    • d[i][j]=opt(d[i1][k]+w(i,j,k)k<j)d[i][j] = opt( d[i-1][k] + w(i, j, k) | k < j )

    4、2D/2D

    • d[i][j]=opt(d[i][j]+w(i,j,i,j)0<=i<i,0<=j<j)d[i][j] = opt( d[i'][j'] + w(i', j', i, j) | 0 <= i' < i, 0 <= j' < j)
    • 如图所示:
      在这里插入图片描述
    • 常见于二维的迷宫问题,由于复杂度比较大,所以一般配合数据结构优化,如线段树、树状数组等。
    • 对于一个tD/eD 的动态规划问题,在不经过任何优化的情况下,可以粗略得到一个时间复杂度是O(nt+e)O(n^ {t+e}),空间复杂度是O(nt)O(n^t) 的算法,大多数情况下空间复杂度是很容易优化的,难点在于时间复杂度,后续章节将详细讲解各种情况下的动态规划优化算法。

    3)计算几何

    • 计算几何的问题是代码量最大的。它是计算机科学的一个分支,以往的解析几何,是用代数的方法,建立坐标系去解决问题,但是很多时候需要付出一些代价,比如精度误差,而计算几何更多的是从几何角度,用向量的方法来尽量减少精度误差,例如:将除法转化为乘法、避免三角函数等近似运算 等等。
    • 如果一个比赛中,有一道计算几何的题,那么至少,它不会是一道水题。

    1、double 代替 float

    • c++ 中 double 的精度高于 float,对精度要求较高的问题,务必采用 double;

    2、浮点数判定

    • 由于浮点数(小数)中是有无理数的,即无限不循环小数,也就是小数点后的位数是无限的,在计算机存储的时候不可能全部存下来,一定是近似的存储的,所以浮点数一定是存在精度误差的(实际上,就算是有理数,也是存在误差的,这和计算机存储机制有关,这里不再展开,有兴趣可以参见我博客的文章:C++ 浮点数精度判定);
    • 两个浮点数是否相等,可以采用两数相减的绝对值小于某个精度来实现:
    const double eps = 1e-8;
    bool EQ(double a, double b) {
        return fabs(a - b) < eps;
    }
    
    • 并且可以用一个三值函数来确定某个数是零、大于零还是小于零:
    int threeValue(double d) {
        if (fabs(d) < eps)
            return 0;
        return d > 0 ? 1 : -1;
    }
    

    3、负零判定

    • 因为精度误差的存在,所以在输出的时候一定要注意,避免输出 -0.00:
        double v = -0.0000000001;
        printf("%.2lf\n", v);
    
    • 避免方法是先通过三值函数确定实际值是否为0,如果是0,则需要取完绝对值后再输出:
        double v = -0.0000000001;
        if(threeValue(v) == 0) {
            v = fabs(v);
        }
        printf("%.2lf\n", v);
    

    4、避免三角函数、对数、开方、除法等

    • c++ 三角函数运算方法采用的是 CORDIC算法,一种利用迭代的方式进行求解的算法,其中还用到了开方运算,所以实际的算力消耗还是很大的,在实际求解问题的过程中,能够避免不用就尽量不用。
    • 除法运算会带来精度误差,所以能够转换成乘法的也尽量转换为乘法运算。

    5、系统性的学习

    基础知识:点、向量、叉乘、点乘、旋转、线段、线段判交、三角形面积;
    进阶知识:多边形面积、凸多边形判定、点在多边形内判定;
    相关算法:二维凸包、三维凸包、旋转卡壳、多边形面积交、多边形面积并、多边形面积异或、多边形和圆的面积交、半平面交、最小覆盖圆、最小包围球、模拟退火。

    • 学习计算几何,最好是系统性的,刷题的过程中不断提炼出自己的模板。

    4)数论

    • 刷题的时候遇到不会的数论题,真的是很揪心,从头学起吧,内容实在是太多了,每个知识点都要证明吃透,不然下次遇到还是不会;不学吧,又不甘心,就是单纯的想把这个题过了,真是进退两难!
    • 数论对一个人的数学思维要求较高,但是一般也是一些固定的模式,所以把模板整理出来很重要。
    • 当然,数论也有简单问题,一般先做一些入门题提升信心。

    1、数论入门

    • 主要是一些基本概念,诸如:
    • 整除性、素数与合数、素数判定、素数筛选法、因数分解、算术基本定理、因子个数、因子和、最大公约数 (GCD) 和 最小公倍数 (LCM)、辗转相除、同余、模运算、快速幂取模、循环节;

    2、数论四大定理

    • 这四个定理学完,可以KO很多题:
    • 欧拉定理、中国剩余定理、费马小定理、威尔逊定理

    3、数论进阶

    • 系统性的学习,基本也就这些内容了:
    • 扩展欧几里得、逆元、欧拉函数、同余方程组、扩展欧拉定理、RSA、卢卡斯定理、整数分块、狄利克雷卷积、莫比乌斯反演、大数判素、大数因子分解、大步小步离散对数等等。

    5)字符串匹配

    • 字符串匹配学习路线比较明确。
    • 先学习前缀匹配:字典树。
    • 然后可以简单看一下回文串判定算法:Manacher。
    • 以及经典的单字符串匹配算法:KMP。
    • 实际上平时最常用的还是 BM 算法,而ACM中基本不考察。
    • 然后就是较为高阶的 前缀自动机、后缀数组、后缀树、后缀自动机了。

    • 关于 算法学习路线 的内容到这里就结束了。
    • 如果还有不懂的问题,可以 想方设法 找到作者的微信进行在线咨询。

    参考资料

    展开全文
  • 将 item 的外边界定义为矩形,所有绘制必须限制在此区域,QGraphicsView 使用它来确定 item 是否需要重绘。 虽然 item 的形状可以是任意的(例如:直线、椭圆、矩形 ),但是 bounding rect 总是矩形,并且不受 ...

    Bounding Rect 和 Shape 的联系与区别

    Bounding Rect

    将 item 的外边界定义为矩形,所有绘制必须限制在此区域内,QGraphicsView 使用它来确定 item 是否需要重绘。
    虽然 item 的形状可以是任意的(例如:直线、椭圆、矩形 ),但是 bounding rect 总是矩形,并且不受 item 变换的影响。

    shape

    以本地坐标中的 QPainterPath 形式返回 item 的形状。形状可用于许多事情,包括:碰撞检测,命中测试以及 QGraphicsScene::items() 函数。
    shape() 默认实现调用 boundingRect() 返回一个简单的矩形形状,但子类可以重新实现该函数,以返回非矩形 item 更准确的形状。例如,一个圆形 item 可以选择返回椭圆形状,以便更好地进行碰撞检测。
    shape() 由 contains() 和 collidesWithPath() 的默认实现调用。

    三角形绘图定义

    其中mBoundingRect为三角形的包围盒

    	QRectF rect = mBoundingRect;
    	QPointF triangle[3]={QPointF(rect.topLeft().x(),rect.topLeft().y()),QPointF(rect.bottomLeft().x(),rect.bottomLeft().y()),QPointF(rect.bottomRight().x(),rect.bottomRight().y())};
    	painter->drawPolygon(triangle,3);	
    

    三角形的显示如下:其中右上半部分虽然看不见,但是进行碰撞检测时候却是利用整个矩形,而不是显示的三角形,而且当我们点击右上角空白部分时候,也会选中整个蓝色三角形。如何改变这种情况? 可以通过定义shape来实现。
    在这里插入图片描述

    三角形边界定义

    QPainterPath TriangleItem::shape() const
    {
    	QPainterPath path;
    	QRectF rect = mBoundingRect;
    	QPolygonF rect_triangle;
    	rect_triangle << QPointF(rect.topLeft().x(),rect.topLeft().y()) << QPointF(rect.bottomLeft().x(),rect.bottomLeft().y()) << QPointF(rect.bottomRight().x(),rect.bottomRight().y()) << QPointF(rect.center().x(), rect.center().y());
    	path.addPolygon(rect_triangle);
    	return path;
    }
    

    通过如上定义,我们相当于将三角形斜边上的中点作为第四个顶点,如下图所示。通过这样的定义便可以实现三角形自定义的边界(包围盒)。
    在这里插入图片描述

    展开全文
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达文章导读 本文介绍点云聚类后的点集包围框拟合方法,分别对不同形式的包围框分析其构建方法、拟合特性,通过实际测试中遇到的问题,对比优缺点...
  • 其中的“方方正正”简单明了地概括了汉字的结构特点,实际上,汉字的结构“方方正正”只是整体上的感觉,只是界定在一个正方形的约略空间之,这种界定,无疑极大丰富了汉字字形结构的无限变化的可能性...
  • 数据结构

    千次阅读 2009-07-16 12:18:00
     2 数据结构(ZT)   【程序2】  # include   # define SIDE_N 3  # define LENGTH 3  # define VARIABLES 6  int A,B,C,D,E,F;  int *pt[]={&A,&B,&C,&D,&E,&F};  int *side[SIDE_N]...
  • 数据结构与算法题目及C++解答

    千次阅读 多人点赞 2019-06-03 00:47:45
    推荐书籍《数据结构与算法分析--C++语言描述》第四版。 本文中所有源代码及博客中其他文章的VS源代码均在github:https://github.com/AnkangH,根据名称检索即可。 1.排序算法 SortAlgorithm 排序算法的源码见...
  • 普里姆(Prim)算法:首先任选图中的一点作为顶点,然后在该顶点的所有度中选择权值最小的度,将权值最小的度所连接的顶点纳入“包围圈”,然后从“包围圈”中的所有顶点的度中选择权值最小的度,将该度连接的顶点...
  • 海金沙(Lygodium japonicum)精子发生过程中多层结构由生毛...成熟精子成3周螺旋,核位于后部2周而片层及所连大线粒体位于头部l周螺旋,微管带是唯一贯穿整个细胞的结构。精子成熟后片层明显分为3层。精子头部尚
  • Html结构解析

    2019-07-10 15:32:00
    一、html文档树状图结构  1)html树状图 2)html代码解释树形图 <!DOCTYPE html> <!--声明--> <html lang="en"> <!--html开始--> <head> <!--头部开始--&...
  • 线材处理,包括内部模块互连线(暴露在屏蔽壳之外)及外部接口线,是否已经在母板、连接板或输出板等位置预留滤波措施。 3.EMC结构设计之屏蔽 1. 什么是屏蔽: 屏蔽是解决电磁兼容问题的重要手段之一。屏蔽...
  • 本文主要讲解一款 svg 编辑器的DOM结构,该如何分层以及这样分层的原因。DOM 结构主要参考了一款名为 svgedit的开源 svg 编辑器。 代码实现 代码用到了 svgjs 库。不过应该还是挺好懂的。 演示链接:f-star.github....
  • Ubuntu系统目录结构

    2017-03-24 13:18:49
    Ubuntu系统目录结构  ==================  以下为Ubuntu目录的主要目录结构,您稍微了解它们都包含了哪些文件就可以了,不需要记忆。  / 根目录  │  ├boot/ 启动文件。所有与系统启动有关的文件都保存在...
  • python数据结构和算法1 参考 本文github 计算机科学是解决问题的研究。 计算机科学使用抽象作为表示过程和数据的工具。 抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性。 Python是一...
  • 上一节课中,使用了AABB包围盒的方式来判断物体,然后判断光线是否包围盒相交,如果和包围盒相交,再判断是否和内部的物体相交。均匀空间划分就是直接使用了这个思想。 比如有下面这个场景: 先找到整个场景的...
  • 一般来说程序的结构包含以下3种。 ⑴ 顺序结构。 ⑵ 选择结构。 ⑶ 循环结构。 这3种不同的结构有一个共同点,就是它们都只有一个入口,也只有一个运行出口。程序中使用了上面这些结构到底有什么好处呢?这些单一的...
  • 返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。   properties 取值: - 'basic',则属性: 'Area', 'Centroid', 和 'BoundingBox' 将被计算。 ...
  • 楷书结构是将笔画按照汉字书写的笔顺规则、组合规则等进行艺术构思和处理,搭配、组合成体式美观、端庄的汉字。书法的结构具有较强的规律性和规定性。初学者必须在创作、练习过程中严格遵循这些原则和规律。(一)楷书...
  • 结构化程序设计(Structured programming)是一种经典的编程模式,在1960年开始发展,其思想最早是由荷兰著名计算机科学家 E.W. Dijkstra 提出的,他设计了一套规则,使程序设计具有合理的结构,用以保证程序的正确...
  • 数据结构常见题目

    万次阅读 多人点赞 2017-09-13 08:36:57
    )判断单链表是否形成环形结构   思路: 一个指针一次一步,另一个指针一次 两步 ,快指针追上慢指针,就是环形,若快指针到达末尾都没有追上,就不是环形。 (4) 找到环的入口点? 答: 假设 slow,...
  • 第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找...前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找...
  • PCB层叠结构与阻抗计算

    千次阅读 2020-02-27 21:50:48
    PCB两个重要组成部分:Core 和 Prepreg(固态片,简称PP)。 如下图所示, Core 的两个表面都铺有铜箔,可作为信号层、电源层、地层等导电层,Core的上下表面之间填充的是固态材料; PP的表面不铺铜,在PCB中起填充...
  • 文章目录题目一:哈希表相关基础知识题目二:设计RandomPool结构题目 及其要求算法实现代码实现题目三:认识布隆过滤器布隆过滤器用来做什么布隆过滤器是怎么实现和使用的为什么布隆过滤器效率比较高时间复杂度空间...
  • 汉字结构模式的分歧及其界分原则

    千次阅读 2006-03-22 18:38:00
    汉字的结构模式,是指汉字结构成分平面组合的方式。研究现代汉字的结构模式,可以全面地了解汉字结构成分内部关系的类型,对于辨析字形,正确书写汉字,方便识字教学以及汉字信息化处理,都是必不可少的。 一、 ...
  •  函数PointPolygonTest 决定测试点是否在轮廓,轮廓外,还是轮廓的边上(或者共边的交点上),当measure_dist为false时,返回值对应是1, -1,0;当 measure_dist为true ,它返回一个从点到最近的边的带符号距离。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,487
精华内容 2,194
关键字:

内是不是半包围结构