数组
由于要做一个关于文本分类的project,可能要用到TensorFlow,自学一下。 参考书籍《Tensorflow+实战Google深度学习框架》 TensorFlow是一个通过计算图的形式来表述计算的编程系统。 张量是TensorFlow管理数据的形式,可以被简单理解为多维数组,在张量中并没有真正保存数字,而是保存如何得到这些数字的计算过程,一个张量中主要保存了三个属性:名字,维度和类型
三路快速排序是双路快速排序的进一步改进版本,三路排序算法把排序的数据分为三部分,分别为小于 v,等于 v,大于 v,v 为标定值,这样三部分的数据中,等于 v 的数据在下次递归中不再需要排序,小于 v 和大于 v 的数据也不会出现某一个特别多的情况),通过此方式三路快速排序算法的性能更优。 三路快速排序算法是使用三路划分策略对数组进行划分,对处理大量重复元素的数组非常有效提高快速排序的过程。它添加处理等于划分元素值的逻辑,将所有等于划分元素的值集中在一起
描述:二 分查找针对有序的数据集合,每次与区间中间元素对比,将待查找区间缩为一半,直到找到或区间被缩小为 0。 依赖顺序表结构,因为需要下标随机访问。 需要有序数据
此外$0变量是指整条记录。$1表示当前行的第一个域$2表示当前行的第二个域……以此类推。 print和printf awk中同时提供了print和printf两种打印输出的函数
快速排序和前面的冒泡排序一样,也是交换排序的一种,但是他是基于分治的算法思想,元素进行位置交换时可以跨度很大,而冒泡中只能进行相邻元素的交换,这样可以减少很多交换次数 它的基本思想是:通过一趟排序讲要排序的序列分成两个子部分,其中一部分的所有数据要比另一部分的所有数据小,然后再按照这个方法对两个子部分也分别进行快速排序,这个过程可以递归进行。 1.一开始选定数组的最后一个元素5作为基准值,也就是最终排序结果应该是以5为界限划分为左右两边。 2.从左边开始,寻找比5大的值,然后与5进行调换(因为如果比5小的值本来就应该排在5前面,比5大的值调换之后就去到了5的后面),一路过来找到了7,将7与5调换,结束此次遍历
本书采用大量图片,通过详细的分步讲解,以直观、易懂的方式展现了7个数据结构和26个基础算法的基本原理。第1章介绍了链表、数组、栈等7个数据结构;从第2章到第7章,分别介绍了和排序、查找、图论、安全、聚类等相关的26个基础算法,内容涉及冒泡排序、二分查找、广度优先搜索、哈希函数、迪菲 - 赫尔曼密钥交换、k-means 算法等。 本书没有枯燥的理论和复杂的公式,而是通过大量的步骤图帮助读者加深对数据结构原理和算法执行过程的理解,便于学习和记忆
n 张多米诺骨牌排成一行 将每张多米诺骨牌垂直竖立. 在开始时 同时把一些多米诺骨牌向左或向右推. 每过一秒 倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌. 同样地 倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌. 如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时 由于受力平衡 该骨牌仍然保持不变. 就这个问题而言 我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力. 给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态 其中: 解释: 第一张多米诺骨牌没有给第二张施加额外的力. 当时间为 $0$ 时 部分骨牌会受到一个初始的向左或向右的力而翻倒. 过了 $1$ 秒后 这些翻倒的骨牌会对其周围的骨牌施加一个力. 具体表现为: 向左翻倒的骨牌 如果它有直立的左边紧邻的骨牌 则会对该直立的骨牌施加一个向左的力. 向右翻倒的骨牌 如果它有直立的右边紧邻的骨牌 则会对该直立的骨牌施加一个向右的力. 接下去需要分析这些 $1$ 秒时受力的骨牌的状态. 如果仅受到单侧的力 它们会倒向单侧; 如果受到两个力 则会保持平衡. 再过 $1$ 秒后 这些新翻倒的骨牌又会对其他直立的骨牌施加力 而不会对正在翻倒或已经翻倒的骨牌施加力. 这样的思路类似于广度优先搜索. 我们用一个队列 $q$ 模拟搜索的顺序; 数组 $\textit{time}$ 记录骨牌翻倒或者确定不翻倒的时间 翻倒的骨牌不会对正在翻倒或者已经翻倒的骨牌施加力; 数组 $\textit{force}$ 记录骨牌受到的力 骨牌仅在受到单侧的力时会翻倒. 我们可以枚举所有连续的没有被推动的骨牌,根据这段骨牌的两边骨牌(如果有的话)的推倒方向决定这段骨牌的最终状态: 如果两边的骨牌同向,那么这段连续的竖立骨牌会倒向同一方向。 如果两边的骨牌相对,那么这段骨牌会向中间倒。 如果两边的骨牌相反,那么这段骨牌会保持竖立
Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口
轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。 其它特性: 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象; 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持; 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等
虽然上述数据结构配合常见的排序、二分搜索可以快速的处理大部分判断元素是否存在,但是当集合里面的元素足够大时,如果有500万条甚至一亿条记录时,消耗的内存将会很高,这个时候,布隆过滤器(Bloom Filter)就应运而生。 布隆过滤器的核心实现就是一个超大的位数组和几个哈希函数,假设位数组的长度为m,哈希函数的个数为k。 具体的操作流程:假设集合里面有3个元素{x y z},哈希函数的个数为3