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))
相关文章
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
7天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
25 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
5天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
5天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
25 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
9天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
27 2
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
17天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!