diary 12 -20 github上的找最大子程序和的项目

我想看github上那人是对于一个c程序是如何测试的,文件的安排。

昨天开始的,后来弄弄这个,弄弄那个就乱了,番茄时候会帮助自己跳出死循环,把目标和任务记下了以提醒自己。

就是利用库函数中的计时函数,测量用不同方法所学的计算时间。这倒是挺好的方法,我以前也试图比较某些算法,如各种排序算法,所用的时间,忘了当时用什么方法了。

在该项目中,那人用了10*100的数组作为实验数据,赋予初始值,很大一片。还真挺不容易的。

利用一个数组,在初始值中,存储每次需要测定的数据个数,可以应用循环,简化程序。数组和结构一样,是非常基本,却又非常有用的数据结构。

除了测试程序,测试结果文件,项目中还有报告,觉得挺好玩的,拷贝如下:

Maximum Subarray Project report

1. Mathematical analysis

1.1 Psuedocode

1.1.1 Enumeration pseudocode

enumeration(a: array of integers)
max = -infinity
n = length(a)
for i = 0 to n
sum = 0
for j = i to n
for k = i to k = j
sum += a[n]
if sum > max
max = sum
return max

1.1.2 Better enumeration pseudocode

betterEnumeration(a: array of integers)
max = -infinity
n = length(a)
for i = 0 to n
sum = 0
for j = i to j < n
sum += a[j]
if sum > max
max = sum
return max

1.1.3 Divide and Conquer pseudocode

divideAndConquer(a: array of integers, lo, hi)

//base case
if lo == hi
return a[hi]

//recursive case
midpoint = (lo+hi)/2

//left side
leftMax = divideAndConquer(a, lo, midpoint)

//right side
rightMax = divideAndConquer(a, midpoint+1, hi)

//crossing both sides
//left side
leftBothMax = -infinity
for i = midpoint to i >= 0
leftBothSum += a[i]
if leftBothSum > leftBothMax
leftBothMax = leftBothSum
//right side
rightBothMax = -infinity
for i = midpoint to i >= 0
rightBothSum += a[i]
if rightBothSum > rightBothMax
rightBothMax = rightBothSum

bothMax = leftBothMax + rightBothMax

return max(bothMax, leftMax, rightMax)

1.2 Asymptomatic Analysis

1.2.1 Enumeration

Let the array size be n.
There are three nested loops.
For the first loop, the amount of work is n.
For the second loop, there is n-i work.
For the third loop, there is n-i - j
Total work is n*(n-i)*(n-j)
= n^3 + An^2 + Bn +C
Therefore, Enumeration is O(n^3)

1.2.2 Better enumeration

Let the array size be n
There are two nested loops
For the first loop, the amount of work is n
For the second loop, the amount of work is n-i
Therefore the total work is n*n-i = n^2 +ni
Thus, Better Enumeration is O(n^2)

1.2.3 Divide and Conquer

-Recursive part
let n be the array size
For each level of recursion, the array size is halved.
Therefore, this portion of the algorithm is O(logn)

-Iterative part
there are two sequential loops.
both loops are n/2, therefore the combined work is n.
Therefore, the iterative part is O(n)

-Complete algorithm
Combined, the complete algorithm is: O(nlogn)

2. Theoretical correctness

Claim: DivideandConquer correctly returns the sum of the subarray with the largest sum.

Proof: For an array A, let P(A) be the statement that DivdeandConquer(A, lo , hi)
correctly finds the greatest subarray. We will prove that P(A) is true using induction.

As a base case, consder when |A| is 1. The only element is the greatest subarray.

As an induction hypothesis, suppose that P(A) is true for all lists of length < n where length >= 1; that is,
suppose that for any array A of length < n, DivedeandConquer will correctly return the sum of the greatest subarray.

Now, consider an array A of length < n.

3. Testing

4. Experimental analysis

5. Extrapolation and interpretation

时间: 2024-10-09 21:17:01

diary 12 -20 github上的找最大子程序和的项目的相关文章

GitHub上最受欢迎的Android开源项目TOP20

以下这些开源项目都是从GitHub上筛选的,我强烈推荐android程序源代码有时间的时候自己在上面淘淘,或许能发现自己须要的开源程序. 了解开源项目有两个优点: 1.借鉴代码,一般来说.火爆的开源项目的代码质量都相当高,当我们感觉自己的学习遇到瓶颈的时候,细致研究别人的开源码会让自己受益匪浅. 2.直接用事实上现的功能:android开源项目一般来说都是组件类的,而不是一个完整的应用程序.换句话说,非常多都是提供了一种经常使用功能的解决方式,比方最著名的ActionBarSherlock就是一

GitHub上有很多不错的iOS开源项目

GitHub上有很多不错的iOS开源项目,个人认为不错的,有这么几个:1. ReactiveCocoa:ReactiveCocoa/ReactiveCocoa · GitHub:GitHub自家的函数式响应式编程范式的Objective-C实现,名字听着很高大上,学习曲线确实也比较陡,但是绝对会改变你对iOS编程的认知,首推之.2. Mantle:Mantle/Mantle · GitHub:又是GitHub自家的产物,轻量级建模的首选,也可以很好的配合CoreData工作.3. AFNetwo

40个GitHub上最受欢迎的iOS开源项目

40个GitHub上最受欢迎的iOS开源项目(一) http://www.weste.net/2013/8-1/92975.html 40个GitHub上最受欢迎的iOS开源项目(二) http://www.weste.net/2013/8-1/92976.html

GitHub 上值得关注学习的 iOS 开源项目

特此声明,本文转自知乎,原文地址:http://www.zhihu.com/question/22914651,本人只是复制.粘贴. 1. ReactiveCocoa:ReactiveCocoa/ReactiveCocoa · GitHub:GitHub自家的函数式响应式编程范式的Objective-C实现,名字听着很高大上,学习曲线确实也比较陡,但是绝对会改变你对iOS编程的认知,首推之.2. Mantle:Mantle/Mantle · GitHub:又是GitHub自家的产物,轻量级建模的

强烈推荐 GitHub 上值得前端学习的开源实战项目

强烈推荐 GitHub 上值得前端学习的开源实战项目. Vue.js vue-element-admin 是一个后台前端解决方案,它基于和 element-ui 实现 基于 iView 的 Vue 2.0 管理系统模板 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用 基于 vue + element-ui 的后台管理系统 基于Vue.js + Element UI 的后台管理系统解决方案 基于 Vue(2.5) + vuex + vue-router + vue-axi

Github上比较流行的PHP扩展库项目

这里列出比较常用的PHP开源扩展库项目: swoole, C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP.过去PHP只能做Web项目,现在有了Swoole.任意服务器端程序都可以用PHP来写. yaf,C扩展实现的高性能Web开发框架. php-webim,基于swoole实现的Web即时聊天工具,支持websocket+http comet长链接推送,可以发送文字内容和图片. react 使用PHP代码实现异步框架.如果说swoole是node.js的升级版,react.php就是

如何在GitHub上生成ssh公钥并用NetBeans克隆项目

一.生成ssh公钥. 1.首先判断本机是否创建了公有密钥: $ ls ~/.ssh 这个命令用于检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,下面步骤可省略,直接进入步骤2. 如果没有类似 id_rsa和id_rsa.pub这样的文件,则表明没有创建.生成的办法: //配置git用户名和邮箱: $ git config user.name "用户名" $ git config user.email "邮箱" $ ssh-k

利用git向github上远程提交一个自己的开源项目

1.在电脑的系统变量中的path路径中配置git的环境变量: 找到git安装路径中bin的位置,如:X:\Git\bin 找到git安装路径中git-core的位置,如:X:\Git\libexec\git-core; 然后将这两个路径配置到系统变量的path中即可 2.打开命令行(cmd+enter),将目录切换到项目目录:例如:D:\>cd D:\wps_github\LoopLinearViewItem,然后点击enter 3.然后输入如下命令并点击enter D:\wps_github\

硬核! Github上 ,star超高的Java 开源项目分享给你!

Awsome JavaGreat Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架.软件或者教程.这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法.我会按照几个维度对项目进行分类,以便大家查阅.当然,如果你觉得不错的话,欢迎给本项目点个 Star.我会用我的业余时间持续完善这份名单