找逆序对(Python)

作者:dawncold 发布时间:February 3, 2012 分类:技术 No Comments

其实和昨天的归并排序基本内容一样,就多加了几行输出来帮助理解,找逆序对就是多了一个统计变量而已。


#! /usr/bin/env python
# coding: utf-8

def merge(arraylist, first, middle, last):
    temp = []
    i = first
    j = middle + 1
    while i <= middle and j <= last:
        if arraylist[i] <= arraylist[j]:
            temp.append(arraylist[i])
            i += 1
        else:
            global inv
            inv += middle - i + 1
            temp.append(arraylist[j])
            j += 1
    while i <= middle:
        temp.append(arraylist[i])
        i += 1
    while j <= last:
        temp.append(arraylist[j])
        j += 1
    print temp
    for i in range(0, last - first + 1):
        arraylist[first + i] = temp[i]

def merge_sort(arraylist, first, last):
    if first < last:
        middle = (first + last) / 2
        print "first = %d, middle = %d, last = %d" % (first, middle, last)
        merge_sort(arraylist, first, middle)  
        merge_sort(arraylist, middle + 1, last)
        merge(arraylist, first, middle, last)

if __name__ == "__main__":
    inv = 0
    arr = [2,3,8,6,1]
    print "orign: ", arr
    merge_sort(arr, 0, len(arr) - 1)
    print "final: ", arr
    print "inv = %d" % inv

合并排序(Python)

作者:dawncold 发布时间:February 2, 2012 分类:技术 No Comments

#! /usr/bin/env python
# coding: utf-8

def merge(arraylist, first, middle, last):
    temp = []
    i = first
    j = middle + 1
    while i <= middle and j <= last:
        if arraylist[i] <= arraylist[j]:
            temp.append(arraylist[i])
            i += 1
        else:
            temp.append(arraylist[j])
            j += 1
    while i <= middle:
        temp.append(arraylist[i])
        i += 1
    while j <= last:
        temp.append(arraylist[j])
        j += 1
    for i in range(0, last - first + 1):
        arraylist[first + i] = temp[i]

def merge_sort(arraylist, first, last):
    if first < last:
        middle = (first + last) / 2
        merge_sort(arraylist, first, middle)  
        merge_sort(arraylist, middle + 1, last)
        merge(arraylist, first, middle, last)

if __name__ == "__main__":
    arr = [33, 31, 0, 42, 425, 21, 34, 19]
    print arr
    merge_sort(arr, 0, len(arr) - 1)
    print arr
             

谢谢这里的帮助,我自己照着《算法导论》写了好久都出错,哎,自己在这类问题上有点笨。

Git使用重新学习(分支rebase)

作者:dawncold 发布时间:January 26, 2012 分类:技术 No Comments

rebase被人翻译成衍合,是和merge功能差不多的一种操作,但提醒一点,进行rebase的内容一定不可以是提交到公共服务器上的内容,简单讲就是rebase操作你在本地自己玩就好了。

详细点的说明去这里看吧:http://progit.org/book/zh/ch3-6.html

Git使用重新学习(分支管理)

作者:dawncold 发布时间:January 26, 2012 分类:技术 No Comments

分支的使用比较繁杂,前面光说了一些皮毛,现在记录一下分支的管理部分。

查看分支的详细信息:git branch -v,列出分支最后提交的内容,带星号表示当前分支。

查看哪些分支已经被并入当前分支:git branch --merged,也就是说除了那个带星号的分支都是可以删除(-d)的,因为都合并进来了嘛!查看没合并进来的就是--no-merged开关。删除那些没有合并进来的分支会提示错误,但强制删除就可以了,强制删除用-D开关。

不得不说的远程分支

在github创建了一个项目,在项目管理中开启了github Pages服务,这是个给项目做介绍页面的服务,开启后出现了一个远程分支gh-pages,但本地根本访问不到。首先我们应该明确,这个分支暂时不在我们本地,除非你是在这个服务开启后clone了项目,这样肯定有,否则和我一样的话(从本地push过去的),需要先fetch过来这些远程分支:git fetch origin gh-pages:gh-pages。后面两个由冒号分隔的意思是获取origin中的gh-pages分支,放到本地,在本地也叫gh-pages(冒号右侧),当然你可以根据需要更改冒号右侧的本地分支名字。现在查看一下本地分支就能发现出现两个分支了,切换过去后就能看到github给我们生成的index.html文件,你可以编辑了:)

推送本地分支到远程分支的时候可以像上面这样写:git push origin xxx1:xxx2,意思就是推送本地叫xxx1的分支到origin中,推过去叫xxx2,但此处一般简写,光写本地分支名,这样远程分支中的名字也是和本地一样的。

删除远程分支的命令挺好玩的:git push origin  :xxx,在xxx左边冒号左侧有一个空格,意思是把本地的空分支推到远程的xxx分支上,就是删除xxx分支的意思。

Git使用重新学习(分支)

作者:dawncold 发布时间:January 26, 2012 分类:技术 No Comments

在git中分支是一个变态技能!

创建分支:git branch [branch-name]即可。

18333fig0305-tn.png

git中有个叫master的分支,这是默认的,刚刚创建了一个testing分支,所以这两个指向是一样的,因为刚刚就在master分支下。但是git为何知道我在master呢?因为还有个叫HEAD的默认指针指向了当前正在使用的分支,所以当你切换分支的时候HEAD就会指向新的地方。

切换分支:git checkout [branch-name](git checkout -b [branch-name]可以实现新建并切换到此分支)切换分支时最好保持暂存区清洁,否则有可能产生冲突阻止你切换。

当我们切换到了testing分支后,再做一些提交,我们的testing分支会继续往下走,但master分支还停留在刚才离开的地方,如果我们需要回去,只需要再切换回master分支即可屏蔽刚才所作的提交,保持文件的原始性。

合并分支:git merge [branch-name],把分支合并到你现在所在的那个分支中,可别合并反喽,当然我感觉反了也没关系,就是个名字的问题吧?

分支删除用-d开关,git branch -d [branch-name]即可。

合并分支的时候遇到冲突是不可避免的,有些冲突能够自动解决,但还有不少是需要我们手动解决的,此时git会在status中告诉我们,我们打开后就能看到由“=====”分割开的两部分,就是让我们选择,等手动修改好后需要再add进暂存区,此时就能提交了。