对算法的一些笔记及理解

                                   算法笔记(草一)


算法笔记一

3-to-1 split quicksort tree


第一,经验,万事万物都是一条直线,然后直线按照属性,分割出不同的名词。就像排期,排期前,排期中,排期后,周一排期,周二排期等等

第二:算法。对于算法。等差和等比都是O(n^2),这是由于等差等比公式来的。对于nlg(N)是由于主理论来的。

当一个数组序列,不用跟所有的数进行比较时候,就是lg(n),当需要和几个比较的时候那个就是线性的。有nlg(n)。

对于比较算法。最快的也就是nlg(n)。

第三:计数排序,是O(N+K)。但现实意义不大。

第四:经验:任务事物,任何物体。都对公理有适用性,即大众定理适用于他,但是同是他属于某个小集合,小群体。他又有自己的定理(基准),来约束他。 

所以规律:公理+定理+原则。

比如:我。公理:人,有手有脚。

                定理:男的,有陕西人或者理科男的定理。

                原则:自身。比如学习快,记忆好。不抽烟不喝酒的原则。

第四:数学中拥有高概率:

那么就需要动态的数据结构。

从正态分布来说,要控制输入。

或者是控制正态分布的图形变化,从哪个输入访问,都获取到同样的值。


第五,事物。事物与外界的关键形式有两种。一是主动,二是被动。思想的出发点就这两个。

事物要快。被动方式,

顺应他人快的选择,被动,快,kafka的磁盘顺序读写。

减少传输距离,主动,快,减少IO,直接内存映射

减少物体质量,主动,topic分了区,区分段,

进行数据压缩

批量操作  ,主动,被动,顺应他人的快 


第六,计算机的时间和空间。空间指的是,有限的资源,包含占地空间,有限的运行单元。

能量守恒,告诉我们任何资源都是有限的


第七,algorithm

1、循环体,做重复的事情。

2、循环出口。

3、递进指针。

4、不变指针。

5、变量暂存和替换。


第八,

1,算法的输入,肯定是有限集

2,枚举每一种类型。

对于求结果集的,肯定有匹配公式,根据该数自己的特性。

 

第九、对象的三种状态:

初始化,服务,消亡。

 

第十、任务对象的交流:

都涉及到信息熵的概念:

信息增加或者信息衰减。

比如:

写代码-->eclipse 编译器-->字节码-->虚拟机-->虚拟机编译器-->本地代码等等都是有信息熵

 

第十一、

算法;

搜索/查找 ,比较排序 --快。

 

分治思想,动态规划的思想。--化大为小。

 

面向对象 --直接利用现有的数据结构。(如hashmap,set,list,也可理解为:直接利用快的物质,做飞机或者火车)

 

这是程序设计的出发点。===快

 

第十二、带着问题去读书,和看别人的评论问题,能加深理解。

 

 

第十三、算法for

for有循环的次数N必须明确。N需要记录的。

或者是while ,循环次数必须确定。


有不变指针,和变动指针记录不同的位置,在for或while里进行++或者--


第十四:算法的基础:

查找和排序---后续衍生的算法都是在这基础上。


第十五:

对于比较分治的思想是很好的。世界上比较没有必要所有对象都比较。

有序的查找或者比较是最快的。也应用了计算机的分支预测的思想。


第十六、计算树的深度


计算树的深度,要需要用逆序的思想.


从底部-->顶部递归。

顺序是除法,逆序是乘法。


Average-case running time


Showing that the average-case running time is also \Theta(n \lg n)Θ(nlgn) takes some pretty involved mathematics, and so we won't go there. But we can gain some intuition by looking at a couple of other cases to understand why it might be O(n \lg n)O(nlgn). (Once we have O(n \lg n)O(nlgn), the \Theta(n \lg n)Θ(nlgn) bound follows because the average-case running time cannot be better than the best-case running time.) First, let's imagine that we don't always get evenly balanced partitions, but that we always get at worst a 3-to-1 split. That is, imagine that each time we partition, one side gets 3n/43n/4 elements and the other side gets n/4n/4. (To keep the math clean, let's not worry about the pivot.) Then the tree of subproblem sizes and partitioning times would look like this:

3-to-1 split quicksort tree

The left child of each node represents a subproblem size 1/4 as large, and the right child represents a subproblem size 3/4 as large. Since the smaller subproblems are on the left, by following a path of left children, we get from the root down to a subproblem size of 1 faster than along any other path. As the figure shows, after \log_4 nlog?4??n levels, we get down to a subproblem size of 1. Why \log_4 nlog?4??n levels? It might be easiest to think in terms of starting with a subproblem size of 1 and multiplying it by 4 until we reach nn. In other words, we're asking for what value of xx is 4^x = n4?x??=n? The answer is \log_4 nlog?4??n. How about going down a path of right children? The figure shows that it takes \log_{4/3} nlog?4/3??nlevels to get down to a subproblem of size 1. Why \log_{4/3} nlog?4/3??n levels? Since each right child is 3/4 of the size of the node above it (its parent node), each parent is 4/3 times the size of its right child. Let's again think of starting with a subproblem of size 1 and multiplying the size by 4/3 until we reach nn. For what value of xx is (4/3)^x = n(4/3)?x??=n? The answer is \log_{4/3} nlog?4/3??n.


第十七、

比较算法来说,

在一组里个数的多少决定了比较的次数。(树节点包含的数据个数)

生成树的深度,决定了循环的次数。(二叉树深度)


第十八,

对于查找来说,

(1)基于比较的查找

(2)基于hash散列,即数组的形式查找。

平均时间最快O(1).表示常量时间哈


第十九;

算法的默认行为:

从小到大排序。

从a[0]开始占位。

所以选择排序默认的是找最小的,然后占位a[0],然后移动。


第二十、

对于算法来说,分治比顺序比较快。

对于算法来说,交换元素,比移位元素快


第二十一、

算法要快:

无论是查找还是排序,

快,那么久减少要比较的个数。需要考虑,有木有一种方法有些个数直接不用比较了呢????

有些个数能不能比较的次数变少了呢???

这是初衷。


省,空间复杂度,用最少的变量、??

第二十二、

对于算法,就少不了操作数组。

算法,最快的方式,就是找到了每个数之间基于当前问题的,公式。

公式的来源=数学,所以数学对好的算法很重要。

算法:就是基于数学公式来的。

比较排序:

》《 =

公式。

比如:codility的这题目:

一个序列的平衡点是这样的,它的左边的所有的元素的和应该等于右边的所有的元素的和,比如在下面的序列A:

A[0] = -7 A[1] = 1 A[2] = 5 A[3] = 2 A[4] = -4 A[5] = 3 A[6] = 0

3是一个平衡点因为:

A[0] + A[1] + A[2] = A[4] + A[5] + A[6]

6也是一个平衡点因为:

A[0] + A[1] + A[2] + A[3] + A[4] + A[5] = 0

其实就是:sum(all)=sum(left)+sum(right);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值