python 算法学习部分代码记录篇章1

# -*- coding: utf-8 -*-
# @Date    : 2017-08-19 20:19:56
# @Author  : lileilei
‘‘‘那么算法和数据结构是什么呢,答曰兵法‘‘‘
‘‘‘a+b+c=1000 and a*a+b*b=c*c 求a,b,c‘‘‘
# import time
# start_time=time.time()
# for a in range(1000):#使用枚举法
#     for b in range(1000):
#         for c in range(1000):
#             if a+b+c==1000 and a*a+b*b==c*c:
#                 print(a,b,c)
# print(time.time()-start_time)
# import time #方法2
# start_time=time.time()
# for a in range(1000):
#     for b in range(1000):
#         c=1000-a-b
#         if a+b+c==1000 and a*a+b*b==c*c:
#             print(a,b,c)
# print(time.time()-start_time)
class Stack(object):
    """栈"""
    def __init__(self):
         self.__items = []
    def is_empty(self):
        """判断是否为空"""
        return self.__items == []
    def push(self, item):
        """加入元素"""
        self.__items.append(item)
    def pop(self):
        """弹出元素"""
        return self.__items.pop()
    def peek(self):
        """返回栈顶元素"""
        return self.__items[len(self.__items)-1]
    def size(self):
        """返回栈的大小"""
        return len(self.__items)
# if __name__ == "__main__":
#     stack = Stack()
#     stack.push("hello")
#     stack.push("world")
#     stack.push("itcast")
#     print (stack.size())
#     print (stack.peek())
#     print (stack.pop())
#     print (stack.pop())
#     print (stack.pop())
class Queue(object):
    ‘‘‘队列‘‘‘
    def __init__(self):
        self.__list=[]
    def addqueue(slef,item):
        #self.__list.append(item)
        self.__list.insert(0,item)
    def dequeue(self):
        return self.__list.pop()
    def is_empty(self):
        return self.__list==[]
    def size(self):
        return len(self.__list)
class Dqueue(object):
    ‘‘‘双端队‘‘‘
    def __init__(self):
        self.__list=[]
    def add_front(slef,item):
        self.__list.insert(0,item)
    def add_re(self,item):
        self.__list.insert(item)
    def dequeue(self):
        return self.__list.pop()
    def requeue(self):
        return self.__list.pop(0)
    def is_empty(self):
        return self.__list==[]
    def size(self):
        return len(self.__list)
def buule_sor(alist):#冒泡
    n=len(alist)
    for i in range(n-1):
        for j in range(n-1-i):
            count=0
            if alist[j]>alist[j+1]:
                alist[j],alist[j+1]=alist[j+1],alist[j]
                count+=1
        if 0==count:
            return
def select_sort(alist):#选择排序
    n=len(alist)
    for j in range(n-1):
        min=j
        for i in range(j+1,n):
            if alist[min] > alist[i]:
                min=i
        alist[j],alist[min]=alist[min],alist[j]
def insert_sort(alist):‘‘‘插入排序‘‘‘
    n=len(alist)
    for j in range(1,n):
        i=j
        while  i>0:
            if alist[i]<alist[i-1]:
                alist[i],alist[i-1]=alist[i-1],alist[i]
            i-=1
def shell_sort(alist):‘‘‘希尔排序‘‘‘
    n=len(alist)
    gap=n//2
    while gap>0:
        for j in range(gap,n):
            i=j
            while i>0:
                if alist[i]<alist[i-gap]:
                    alist[i],alist[i-gap]=alist[i-gap],alist[i]
                    i-=gap
                else:
                    break
        gap//=2
def quick_sort(alist,first,last):‘‘‘快速排序‘‘‘
    if first>=last:
        return
    mid_value=alist[first]
    low=first
    high=last
    while low<high:
        while low <high and alist[high]>=mid_value:
            high-=1
        alist[low]=alist[high]
        while low <high and alist[low]<mid_value:
            low+=1
        alist[high]=alist[low]
    alist[low]=mid_value
    quick_sort(alist,first,low-1)
    quick_sort(alist,low+1,last)
def me_sort(alist):‘‘‘归并排序‘‘‘
    n=len(alist)
    if n<=1:
        return alist
    mid=n//2
    left=me_sort(alist[:mid])
    right=me_sort(alist[mid:])
    left_point,right_porint=0,0
    result=[]
    while  left_point<len(left) and right_porint<len(right):
        if left[left_point] <right[right_porint]:
            result.append(left[left_point])
            left_point+=1
        else:
            result.append(right[right_porint])
            right_porint+=1
    result+=left[left_point:]
    result+=right[right_porint:]
    return result
def binary_search(alist,item):#二分查找 递归
    n=len(alist)
    if n>0:
        mid=n//2
        if alist[mid]==item:
            return True
        elif item<alist[mid]:
            return binary_search(alist[:mid],item)
        else:
            return binary_search(alist[mid+1:],item)
    return False
def brin_serce2(alist,item):#二分非递归
    n=len(alist)
    first=0
    lasr=n-1
    while first <=lasr:
        mid = (first + lasr) // 2
        if alist[mid]==item:
            return  True
        elif item<alist[mid]:
            lasr=mid-1
        else:
            first=mid+1
    return False
if __name__ == ‘__main__‘:
    listy=[54,67,76,23,34]
    print(brin_serce2(listy,55))
时间: 2024-08-09 10:44:56

python 算法学习部分代码记录篇章1的相关文章

算法学习与代码实现1——开始、生成随机数

开端 作为一个非科班出身的程序猿,算法始终是个软肋.之前倒也抽时间断断续续看了点算法的书,但基本过目即忘,可能每个算法都实际实现以下,编写下练习代码才能更好的学习.于是在github上创建了一个仓库,用来一个个实现算法.置于语言的选择,都说语言不过是工具,算法才是核心,那么就多用几种语言来实现吧.其实我会的语言也不多,c/c++可能还好,再就是个初学者阶段的Python,在实现算法的过程中,也能练习下这些语言的使用,一箭双雕呀,哈哈,有点小激动呢. github上的仓库地址如下: [email 

汉诺塔算法学习-C代码

#include <stdio.h> void main() {   extern a;   extern b;   extern c;   extern s;   void hanno(int,char,char,char);   void setNum(int);   int n;   printf("Please input the number of dishes: ");   scanf("%d",&n);   printf("

Python之路,Day21 - 常用算法学习

Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算

算法学习记录-查找——平衡二叉树(AVL)

排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高.查找的最差情况是树的高度.这里就有问题了,将无序数列转化为 二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况. [如图1]: 这样的一颗二叉排序树就是一颗比较极端的情况.我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀 的分布在根节点两端. 技术参考:fun4257.com/ 问题提出: 能不能有一种方法,使得我们的二叉排序树不依赖无序序列的顺序,也能使得我们得到的二叉排序树是比

算法学习记录-栈的应用--表达式运算

前面做了栈的基本操作 总感觉需要做一个实际的例子来检验一下. 这里我将用栈来做一个简单的四则运算. 目标比较简单: 做一个带小括号(“()”)的四则运算,如果要加入到中括号(“[]”)或者大括号(“{}”),依次类推. 求一个表达式: 用下面这个算是做例子,程序最后应该可以算出任何带小括号的运算. 3+(32-6)*9+5*3-(3*(65-15)/5)+12; 方法一:后缀法. 1.了解中缀和后缀表示法 中缀表示法:刚才的那个算是就是中缀表示法,我们通常看到的数学符号就是中缀表示法,即数字在计

最大连续子数组算法学习

作为零基础学习的弱智艰难的入行后,在黑暗中摸爬滚打中过了几个月,才想起应该开个博客记录下自己的学习历程和整理知识点.刚刚接触算法的我,博客就以记录我的算法学习历程为开端吧.多说无益,下面开始: 如果已知后三十天的股票涨跌停的情况,那么我该如何确定自己收益的最大值是多少呢?这里可以将股票每天的变化存进一个数组里,涨记为正,跌记为负,那么最后这个实际问题就转化为了求最大连续子数组的问题了,即我怎么切割这个数组使得这个数组里的值最大?这里简单的用了分治法去计算,首先将data分成2份,一份为左data

Python爬虫学习路线,强烈建议收藏这十一条

(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程 2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在 Codecademy - learn to code, interactively, for free 上面进行练习. 如果时间充裕的

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

周总结(2017.2.16):第一周算法学习。

周总结:算法学习总结之DFS和BFS 一:DFS算法 目的:达到被搜索结构的叶节点. 定义:假定给定图G的初态是所有的定点都没有访问过,在G中任选一定点V为初始出发点,首先访问出发点并标记,然后依次从V出发搜索V的每个相邻点W,若W未曾出现过,则对W进行深度优先遍历(DFS),知道所有和V有路径相通的定点被访问. 如果从V0开始寻找一条长度为4的路径的话: 思路步骤: 先寻找V0的所有相邻点:dis{v1,v2,v3},V1没有访问过,所以对V1进行深度遍历并将V1标记为访问过,此时路径长度为1