• 数据结构和算法示例一


    程序等于数据架构加算法,一个好的算法可以有效的提高程序整体的性能体现。举一个最简单的例子:解析三元一次方程组,假设现在手上有一块的硬币,还有合计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#内存管理
    Github上都在疯找的京东内部“架构师进阶手册”终于来了
    HTTP Host 头攻击 原理以及修复方法
    夏季,糖友需要注意些什么
    mysql日志服务
    AlphaControls控件TsDBCombobox出错:访问违规
    echrat 的tooltip轮播播放高亮
    解决:Glide 在回调中再次加载图片报错
  • 原文地址:https://blog.csdn.net/sunny_daily/article/details/126413619