THẢO LUẬN

Íntall java15 như link bạn cho. Vẫn báo lỗi. Lần này hơi khác 1 chút.

6039249C-E3DD-4F68-939E-9EABAC3199D9.jpeg

0
Oct 5th, 2020 2:45 a.m.

mình góp ý chút : bạn nên để lại link của bài trước và bài sau của mỗi bài học

0
Avatar
đã bình luận câu trả lời trong câu hỏi
Oct 5th, 2020 2:29 a.m.

@bacode thư viện có sẵn thì mình không biết, bạn thử Google xem. Còn ý tưởng thì bạn có thể làm theo hướng này:

  • Mảng của bạn có n bài.
  • Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài. Suy ra trong một cụm 3 slide liên tiếp thì có tổng cộng 6 bài.

Bạn lấy n chia cho 6 sẽ ra số cụm 3 bài liên tiếp là:

  • Chia hết thì số slide là: [n6]3[\frac{n}{6}] * 3 (kí hiệu [n6][\frac{n}{6}] là ám chỉ lấy phần nguyên của phép chia n6\frac{n}{6})
  • Chia dư 1 thì số slide là: [n6]3+1[\frac{n}{6}] * 3 + 1 (vì dư 1 bài cuối sẽ cần 1 slide nữa cho bài này)
  • Chia dư 2 thì số slide là: [n6]3+1+1[\frac{n}{6}] * 3 + 1 + 1 (Cần thêm 1 + 1 = 2 slide. Vì dư 2 bài, nhưng slide tiếp theo sau cụm n63\frac{n}{6} * 3 slide kia chỉ chứa được 1 bài, vẫn còn bài thứ 2 phải nhét vào slide tiếp nữa). Bạn cũng có thể quy định trường hợp này thì sẽ nhét chung vào 1 slide thay vì chia đơn ra thành 2 slide.
  • ....

Cứ thế xét các trường hợp số dư thôi. Tất nhiên cách này có hạn chế là nếu bạn muốn slide 1 bài rồi tới slide 2 bài rồi 3 bài rồi 4 bài ... thì xét trường hợp sẽ rất cực.

Ví dụ trên cho bạn dễ hiểu, để đơn giản hơn trong mọi trường hợp thì bạn có thể dùng cách dưới:

  • mảng của bạn có n bài
  • Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài, ..., slide thứ k thì có k bài. Suy ra trong một cụm k slide liên tiếp thì có tổng cộng k(k+1)2\frac{k*(k+1)}{2} bài.
  • Và trong trường hợp trên thì một slide bất kì sẽ chứa nhiều nhất là k bài.

Bạn vẫn lấy n chia cho k(k+1)2\frac{k*(k+1)}{2}, nhưng lần này chỉ xét 2 trường hợp:

  • Nếu số dư của phép chia trên mà bé hơn k thì bạn nhét hết chúng vào 1 slide luôn. Nên sẽ có ([n:k(k+1)2]k)+1([n : \frac{k*(k+1)}{2}] * k) + 1 slide. (kí hiệu [n:k(k+1)2][n : \frac{k*(k+1)}{2}] là ám chỉ lấy phần nguyên của phép chia n:k(k+1)2n : \frac{k*(k+1)}{2})
  • Nếu số dư của phép chia trên (kí hiệu là là SD) mà lớn hơn k thì phần dư bạn chia ra thành 2 slide, slide đầu sẽ chứa k bài trong phần dư, phần còn lại là (SD - k) bài thì nhét nốt vào 1 slide nữa. Vậy sẽ có ([n:k(k+1)2]k)+2([n : \frac{k*(k+1)}{2}] * k) + 2 slide.

Cách này có thể áp dụng trong mọi trường hợp của k vì ta chỉ cần xét 2 trường hợp con thôi. Và nếu số bài của bạn nhiều thì việc nhét không theo thứ tự kia vào cuối cùng thì cũng chả ảnh hưởng lắm đến trải nghiệm người dùng, người ta cũng ít khi kéo xuống dưới cùng lắm.

+1

Bạn đang nhắc đến đoạn nào vậy nhỉ. Vì mình thay source của bạn vào source của mình nó vẫn chạy ngon lành mà 😄

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      // trong constructor của MyHomePage truyền thêm param myChild
      home: MyHomePage(myChild: MyCenterWidget()),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({this.myChild}); // thêm dòng này

  final Widget myChild; // thêm dòng này

  
  MyHomePageState createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  int counter = 0;
  
  Widget build(BuildContext context) {
    return Scaffold(
      body: MyInheritedWidget(
        child: MyText(), // Dùng MyText thay cho MyCenterWidget
        myData: counter,
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            counter++;
          });
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

class MyCenterWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    print('2. log build MyCenterWidget');
    return Center(
      child: MyText(),
    );
  }
}

class MyText extends StatelessWidget {
  
  Widget build(BuildContext context) {
    final counter = MyInheritedWidget.of(context).myData;
    print('3. log build MyText với counter = $counter');
    return Text('Tui là widget Text. Data của tui hiện tại là: $counter');
  }
}

class MyInheritedWidget extends InheritedWidget {
  MyInheritedWidget({Widget child, this.myData}) : super(child: child);

  final int myData;

  
  bool updateShouldNotify(MyInheritedWidget oldWidget) {
    return myData !=
        oldWidget
            .myData; // nếu data thay đổi thì return true để rebuild các widget con phụ thuộc
  }

  static MyInheritedWidget of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
  }
}
0
Avatar
đã bình luận câu trả lời trong câu hỏi
Oct 5th, 2020 1:42 a.m.

@NgHoang làm sao mà biết đc có bnhieu slide con nhỉ? với có thư viện nào hỗ trợ cho việc cútom để tính toán kiểu ý ko b?

0

Have a good day.

Mất rất nhìu time để install AS, flutter, dart trên macbook. Cài đặt device màn hình ảo cho phone. Chỉ định PATH cho flutter SDK path... cuối cùng run main.dart mẫu ra thông báo lỗi này. Hic!

Bạn cho hỏi thông báo lỗi này nói gì và cách sửa nó. Tks

C79EAAB5-56B4-4C92-931F-E2A322008F1E.jpeg

+1
Avatar
đã bình luận câu trả lời trong câu hỏi
Oct 5th, 2020 1:30 a.m.

@bacode Bạn lấy thứ tự của div slide con ra. nếu thứ tự (ví dụ tính từ 0) chia hết cho 3 thì là 1 bài, chia 3 dư 1 thì là 2 bài, chia 3 dư 2 thì là 3 bài.

0

Cho mình hỏi, Ở đoạn này mình sẽ đặt như thế này thì nó sẽ sai vì sao???

class MyHomePageState extends State<MyHomePage> { int counter = 0;

@override Widget build(BuildContext context) { return Scaffold( body: MyInheritedWidget( child: MyText(), // Dùng MyText thay cho MyCenterWidget myData: counter, ), floatingActionButton: FloatingActionButton( onPressed: () { setState(() { counter++; }); }, child: Icon(Icons.add), ), ); } }

+1

Nai xừ. Mình cũng đang rơi vào vòng luẩn quẩn, có thời gian, nhưng không biết tận dụng sao cho hợp lý 😦

0
Avatar
đã bình luận câu trả lời trong câu hỏi
Oct 4th, 2020 3:52 p.m.

@NgHoang api là 1 mảng chứa nhiều bài viết. Thì điều kiện sẽ check như nào để chia ra ví dụ slide đầu tiên 1 bài, slide tiếp 2 bài, tiếp theo 3 bài,... r lại lặp lại?

0
Oct 4th, 2020 3:07 p.m.

bài viết hay quá, cảm ơn tác giả nhiều

0

a ơi em muốn load model và finetune với tensorflow để phân loại văn bản thì làm thế nào ạ ?

0
Oct 4th, 2020 2:24 p.m.

Hay 😃

0

Đúng rồi bác. Nhưng do Materialized Path này có vẻ dễ tiếp cận hơn nên mình muốn chia sẻ cái này. Thanks bác đã chia sẻ thêm 😄

0
Oct 4th, 2020 1:28 p.m.

Hay quá, cảm ơn bạn đã chia sẻ

0

Bạn có thể dùng nested set model cho bài toán này. Nhược điểm: insert chậm và update chậm Ưu điểm: Query nhanh

0

@phanhoang Em cảm ơn anh nhiều ạ. Em hiểu ý anh rồi ạ. Cơ mà em vẫn đang hơi rối não về shape của các thành phần. Em muốn hỏi là:

  • xvx_v sẽ là ma trận chứa mọi node feature. hay chỉ là một vector của một node feature thôi ạ.
  • Với Mean Aggregator, thì hNk(v)h^k_N(v) sẽ là ma trận hay chỉ là một vector sau khi lấy Mean element-wise trên các huk1h^{k-1}_u thôi ạ.
  • Với LSTM, thì mạng sẽ many to many ( hNk(v)h^k_N(v) sẽ là ma trận )hay many to one (hNk(v)h^k_N(v) là một vector) ạ.
  • Với Max Pooling Aggregator, thì hNk(v)h^k_N(v) sẽ là ma trận phải không ạ.

Em hỏi hơi ngu mong anh thông cảm ạ. Tại em đang nghĩ shape của hNk(v)h^k_N(v) sau khi qua Max Pooling Aggregator thì sẽ là một ma trận, và LSTM chắc cũng vậy. Còn với Mean Aggregator thì sẽ chỉ là một vector thôi, chứa ít thông tin và còn bị lấy trung bình nên hiệu quả đem lại không bằng Max Pooling và LSTM ạ.

Em cảm ơn anh nhiều ạ.

Capture.PNG

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí