• 数据结构和算法示例一


    程序等于数据架构加算法,一个好的算法可以有效的提高程序整体的性能体现。举一个最简单的例子:解析三元一次方程组,假设现在手上有一块的硬币,还有合计50个1分、2分、5分的硬币,现在要把1块钱的硬币全部换成以分为单位的硬币,大概有多少种换法?

    根据题意,假设最后换成的硬币组成包括i枚1分的硬币、j枚2分的硬币、k枚5分的硬币,则可列出三元一次方程组如下:i+j+k=50;i+2j+5k=100;

    方程组的解析用程序来实现有三种实现方式,分别对应的运算次数为n的立方、n的平方、n。

    1. 第一种计算方式是直接用三层嵌套循环来运算,这样能算出来结果,但算法复杂度为n的立方,如示例代码中的doMethod1方法。
    2. 第二种计算方式是用两层嵌套循环来运算,算法复杂度为n的平方,如示例代码中的doMethod2。
    3. 第三计算方式是只用一层循环来运算,但需要通过转换,将两个方程左右分别相减,最后得到一个二元一次方程,这样就只需要循环一次即可,如示例代码中的doMethod3。
      1. package dataStructure;
      2. import java.util.Arrays;
      3. /*
      4. * 通过分硬币问题,研究算法对性能的影响
      5. * 假设1块钱,还有一分、2分、5分的硬币共50枚,现在讲1块钱全部换成分的硬币,大概有多少分法
      6. * 假设1分、2分、五分分别为x、y、z枚,则
      7. * x+y+z=50
      8. * x+2y+5z=100
      9. */
      10. public class Demo1 {
      11. public static void main(String args[]) {
      12. doMethod1();//循环三次,算法时间复杂度为n的立方
      13. System.out.println("---------");
      14. doMethod2();//循环两次,算法时间复杂度为n的平方
      15. System.out.println("---------");
      16. doMethod3();//循环一次,算法时间复杂度为n
      17. }
      18. public static void doMethod1() {
      19. //分别定义x,y,z的个位数为i,j,k
      20. for(int i=0;i<51;i++) {
      21. for(int j=0;j<51;j++) {
      22. for(int k=0;k<51;k++) {
      23. if((i+j+k==50)&& (i+2*j+5*k == 100)) {
      24. int[] array = {i,j,k};
      25. System.out.println("个数分别为:"+Arrays.toString(array));
      26. }
      27. }
      28. }
      29. }
      30. }
      31. public static void doMethod2() {
      32. //分别定义x,y的个位数为i,j,则y的个数为50-i-j
      33. for(int i=0;i<51;i++) {
      34. for(int j=0;j<51;j++) {
      35. if(i+2*j+5*(50-i-j)== 100) {
      36. int[] array = {i,j,50-i-j};
      37. System.out.println("个数分别为:"+Arrays.toString(array));
      38. }
      39. }
      40. }
      41. }
      42. /*
      43. * 分别定义x,y,z的个位数为i,j,k,
      44. * i+2j+5k=100
      45. * i+j+k=50
      46. * 将两个方程分别左右相减,得到
      47. * j+4k=50;
      48. */
      49. public static void doMethod3() {
      50. for(int j=0;j<51;j++) {
      51. for(int k=0;k<13;k++) {
      52. if(j+4*k == 50) {
      53. int[] array = {50-j-k,j,k};
      54. System.out.println("个数分别为:"+Arrays.toString(array));
      55. }
      56. }
      57. }
      58. }
      59. }

  • 相关阅读:
    【C语言练习——打印空心下三角及其变形】
    元宇宙社交下,VR全景营销C位出道
    python学习思路
    亚马逊按关键字搜索商品 API 返回值说明
    最新泛微java面试题及答案
    Vue3 条件语句
    RCD负载箱的安全性能和认证标准有哪些?
    shell中[[]]与[],=、==和-eq的辨析
    数学建模| 快速入门(以华为杯2019F题为例)
    python 的configparse 读取ini 文件
  • 原文地址:https://blog.csdn.net/sunny_daily/article/details/126413619