044-Python知识点(10-11)

 

 


复习一下
搜索与二叉树

1.查找无序列表
2.查找有序列表---二分法查找
3.二叉树
    1.树与二叉树
    2.遍历

树的非线性数据结构让我们可以实现更快的算法

重要:
A tree is a set of nodes storing elements in a parent-child relationship with the
following properties:
1.each non-empty tree has a root node.
2.each node different from the root node has a parent node

简略:
A tree is a set of nodes storing elements in a parent-child relationship.

 

重要:
Each node in a binary tree can have at most two children.
1.left child
It is the root node of the left subtree of the node.
2.right child
It is the root node of the right subtree of the node.


1.A is the root.
2.B is the parent of D and E.
3.D is a child of B ( left child)
4.E is a child of B (right child)

1.H,E,I,J,G are leaf nodes of the tree
2.A,B,C,D,F are non-leaf nodes of the tree
3.FIJ is a subtree (left subtree of node C)

 

path, depth and height
1.A path of two nodes begins at the starting node and goes from node to node along the edges that join them until the ending node.
2.The length of a path is the number of the edges that compose it.
3.The depth of a node is the length of the path between the root and the node.
4.The height of a tree is the maxium depth of a leaf node.


The length of the path is 3.
The depth of I is 3.
The height of the tree is 3.

 

Binary Search Tree
A binary search tree is a binary tree whose nodes contain comparable object and are organized as follows.
1.for each node n in the tree
1.The data in the node n is greater than all data values stored in its left subtree T left.

简略:
A binary search tree is a binary tree whose nodes contain comparable object and are organized as values.

Why use binary search trees?
Support fast search.


The pre-order traversal is A-B-D-H-I-E-C-F-J-K-G.
The pre-order traversal is A-B-D-C-E-G-F-H-I.
The in-order traversal is B-D-A-G-E-C-H-F-I.
The post-order traversal is D-B-G-E-H-I-F-C-A.

 

Regular Expression
A regular expression is a special sequence of characters that are used to find and match a set of strings.


C.
def search_by_id(student_id):
    for item in records:
        if item[ID]==student_id:
            return item[NAME]
    return None

 

 

 

第01题。

用递归写一个二分法查找

# 用递归写二分法查找
def search(l, element):
    return binary_search(l, 0, len(l) - 1, element)


def binary_search(list, start, end, element):
    if start > end:
        return False
    mid = (end - start) // 2 + start
    if list[mid] == element:
        return True
    elif list[mid] > element:
        return binary_search(list, start, mid - 1, element)
    else:
        return binary_search(list, mid + 1, end, element)


l = [2, 4, 5, 43, 56, 65, 435, 654, 543, 654, 543, 54, 43, 5, 6, 5, 34, 54, 7, 6, 4, 5]
l.sort()
print(l)

print(search(l, 5))
print(search(l, 4))
print(search(l, 2))
print(search(l, 543))
print(search(l, 54))
print(search(l, 43))
print(search(l, 5434))

 

 

 

 

 

第02题。

Why use a tree?

Some data must be categorized into groups and subgroups

Tree's non-linear data structure allows us to implement faster algorithms.

 

 

第03题。

What is a tree?

A tree is a set of nodes storing elements in a parent-child relationship.

 

 

第04题。

What is a binary tree?
A binary tree is a tree that each node have at most two children.(left child and right child)

 

 

第05题。

What is path, length, depth and height?
A path of two nodes begin from starting node to the end node.
The length of a path is the number of the edges.
The depth of a node is the length of the path between the root and the node.
The height of a tree is the maximum depth of a leaf node.

 

 

第06题。

How is pre-order traversal, in-order traversal and post-order traversal

 

 

 

in-order

 

 

 

post-order

 

 

 

 

 

 

 

第07题。

What is a binary search tree?
a binary search tree is a binary tree whose nodes have comparable objects and organized as values.

 

 

第08题。

Why use a binary search tree?
Because binary search tree can support fast search.

 

 

 

 

 

第10周

第01题。

What is recursion?
Recursion is a programming technique that a method calls itself.

 

 

第02题。

Can you write a function to calculate the triangle loop?
For example: 1+2+3+4+5=15, 6!=21,7!=28

def triangle_loop(n):
    sum = 0
    while n > 0:
        sum = sum + n
        n = n - 1
    return sum


print(triangle_loop(6))
print(triangle_loop(7))
print(triangle_loop(8))

 

 

第03题。

Can you use the recursion to calculate triangle loop?

def triangle_loop(n):
    if n == 1:
        return 1
    else:
        return n + triangle_loop(n - 1)


print(triangle_loop(6))
print(triangle_loop(7))
print(triangle_loop(8))

 

 

 

第04题。

What is characteristics of recursive methods?
1.It calls itself.
2.It breaks the problem into smaller problems.
3.At least one of the problems should have a solution.

 

 

第05题。

Is recursive efficient?
1.Recursive methods may involve more overhead.
2.Recursive is usually used because it simplifies a problem conceptually, not more efficient.

 

 

 

第06题。

Write a bubble sort

# bubble sorting
def bubble_sort(l):
    for i in range(0, len(l) - 1):
        for j in range(i + 1, len(l)):
            if l[i] > l[j]:
                l[i], l[j] = l[j], l[i]


l = [3, 43, 5, 4, 6, 65, 65, 43, 4, 5, 5, 54, 54, 34, 3, 43, 43, 43]
bubble_sort(l)
print(l)

 

 

 

第07题。

Write a selection sort.

# selection sort
def selection_sort(l):
    for i in range(0, len(l)):
        min = i
        for j in range(i, len(l)):
            if l[min] > l[j]:
                min=j
        l[i],l[min]=l[min],l[i]


l = [3, 43, 5, 4, 6, 65, 65, 43, 4, 5, 5, 54, 54, 34, 3, 43, 43, 43]
selection_sort(l)
print(l)

 

 

 

第08题。

Write a inserting sort.

# insertion sort
def insertion_sort(l):
    for j in range(0, len(l)):
        num = l.pop(j)
        for i in range(0, len(l)):
            if num < l[i]:
                l.insert(i, num)
                break
            elif i == len(l) - 1:
                l.insert(len(l) - 1, num)


l = [3, 43, 5, 4, 6, 65, 65, 43, 4, 5, 5, 54, 54, 34, 3, 43, 43, 43]
insertion_sort(l)
print(l)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值