数据结构与算法从零开始------------------------001导学和初识

一.导学

1.1一个经典算法题

字符串匹配问题:

1)一个字符串str1="数据结构 与算法 数据结构与"  和另一个字符串str2 = "数据结构与"

2) 现让你判断str1是否包含str2,如果存在,就返回第一次出现的位置, 如果没有,则返回-1

3)并要求用最快的速度来完成匹配

4)请提供你的思路

当然,面对这些我们可以很容易的想到暴力匹配,即拿str2中的字符串一个一个的和str1中的相比.虽然能做出来,但好像违背了最快速度匹配的要求.

下面是我用Java实现的:

/**
 * @author 十三
 * @version 1.0
 */
public class Main {
    public static void main(String[] args) {
        String str1 = "数据结构 与算法 数据结构与";
        String str2 = "数据结构与";

        int position = Match(str1, str2);
        if (position != -1) {
            System.out.println("字符串str1包含字符串str2,第一次出现的位置是:" + position);
        } else {
            System.out.println("字符串str1不包含字符串str2");
    }
}


    public static int Match(String str1, String str2) {
        int n = str1.length();
        int m = str2.length();

        for (int i = 0; i <= n - m; i++) {
            int j;
            for (j = 0; j < m; j++) {
                if (str1.charAt(i + j) != str2.charAt(j)) {
                    break;
                }
            }
            if (j == m) {
                return i; // 匹配成功,返回第一次出现的位置
            }
        }
        return -1; // 没有找到匹配的子串
    }

       
        
    }

结果展示:

这样的话,可以引出KMP算法.(这个是大二的时候学的一个算法后面复习到时会详细的写出见解)

上述是算法的一个导学案列.

1.2数据结构与算法的重要性

1)提高程序效率:数据结构与算法的设计可以帮助提高程序的执行效率。通过选择合适的数据结构和算法,可以减少程序的运行时间和空间复杂度,从而提高程序的执行速度和效率。

2)解决复杂问题:数据结构与算法提供了解决各种复杂问题的方法和工具。它们可以帮助组织和管理数据,处理和分析大量的信息,解决实际问题,如图像处理、自然语言处理、机器学习等。

3)优化资源利用:合理选择和使用数据结构与算法可以优化资源的利用。例如,在存储和检索大量数据时,合适的数据结构可以减少内存的占用和提高数据的访问效率。

4)提高代码质量:良好的数据结构与算法设计可以提高代码的可读性、可维护性和可扩展性。它们可以帮助我们组织代码逻辑,减少代码的重复性,提高代码的可重用性。

算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算(毕业面试的话肯定少不了数据结构与算法的提问)

1.3数据结构和算法的关系

1)数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。

2)程序 = 数据结构 + 算法

3)数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。

总之, 要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决.

1.3.1现实生活中遇到的问题

丢手帕问题(约瑟夫问题):

想必,这个游戏我们小时候或多或少都接触过,现在把它转换为代码实现,

即Josephu  问题:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表(单向环形链表),然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。当然现在只是先大概有个印象,后面会接触并解决它,今天只是导学.

二.小结

1)程序 = 数据结构 + 算法

2)数据结构和算法很重要!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值